Код: Выделить всё
!MESSAGE Cannot invoke "org.eclipse.jetty.websocket.core.server.WebSocketMappings.clear()" because "this.mappings" is null
!STACK 0
java.lang.NullPointerException: Cannot invoke "org.eclipse.jetty.websocket.core.server.WebSocketMappings.clear()" because "this.mappings" i s n u l l < b r / > a t o r g . e c l i p s e . j e t t y . e e 8 . w e b s o c k e t . s e r v e r . J e t t y W e b S o c k e t Servlet.destroy(JettyWebSocketServlet.java:172)
at org.eclipse.equinox.http.servlet.internal.registration.EndpointRegistration.destroy(EndpointRegistration.java:67)
at org.eclipse.equinox.http.servlet.internal.context.ContextController.doAddServletRegistration(ContextController.java:453)
at org.eclipse.equinox.http.servlet.internal.context.ContextController.addServletRegistration(ContextController.java:404)
at org.eclipse.equinox.http.servlet.internal.customizer.ContextServletTrackerCustomizer.addingService(ContextServletTrackerCustomizer.java:82)
at org.eclipse.equinox.http.servlet.internal.customizer.ContextServletTrackerCustomizer.addingService(ContextServletTrackerCustomizer.java:1)
at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:947)
at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:1)
at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:257)
at org.osgi.util.tracker.AbstractTracked.trackInitial(AbstractTracked.java:184)
at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:324)
at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:267)
at org.eclipse.equinox.http.servlet.internal.context.ContextController.(ContextController.java:85)
at org.eclipse.equinox.http.servlet.internal.HttpServiceRuntimeImpl.addingService(HttpServiceRuntimeImpl.java:135)
at org.eclipse.equinox.http.servlet.internal.HttpServiceRuntimeImpl.addingService(HttpServiceRuntimeImpl.java:1)
at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:947)
at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:1)
at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:257)
at org.osgi.util.tracker.AbstractTracked.trackInitial(AbstractTracked.java:184)
at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:324)
at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:267)
at org.eclipse.equinox.http.servlet.internal.HttpServiceRuntimeImpl.open(HttpServiceRuntimeImpl.java:121)
at org.eclipse.equinox.http.servlet.internal.Activator.addingService(Activator.java:164)
at org.eclipse.equinox.http.servlet.internal.Activator.addingService(Activator.java:1)
at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:947)
at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:1)
at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:257)
at org.osgi.util.tracker.AbstractTracked.trackInitial(AbstractTracked.java:184)
at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:324)
at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:267)
at org.eclipse.equinox.http.servlet.internal.Activator.start(Activator.java:84)
at org.eclipse.osgi.internal.framework.BundleContextImpl$2.run(BundleContextImpl.java:826)
at org.eclipse.osgi.internal.framework.BundleContextImpl$2.run(BundleContextImpl.java:1)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:569)
at org.eclipse.osgi.internal.framework.BundleContextImpl.startActivator(BundleContextImpl.java:818)
at org.eclipse.osgi.internal.framework.BundleContextImpl.start(BundleContextImpl.java:768)
at org.eclipse.osgi.internal.framework.EquinoxBundle.startWorker0(EquinoxBundle.java:1066)
at org.eclipse.osgi.internal.framework.EquinoxBundle$EquinoxModule.startWorker(EquinoxBundle.java:394)
at org.eclipse.osgi.container.Module.doStart(Module.java:643)
at org.eclipse.osgi.container.Module.start(Module.java:500)
at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel$2.run(ModuleContainer.java:2110)
at org.eclipse.osgi.internal.framework.EquinoxContainerAdaptor$1$1.execute(EquinoxContainerAdaptor.java:146)
at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:2101)
at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:2043)
at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.doContainerStartLevel(ModuleContainer.java:2003)
at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1915)
at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1)
at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:341)
< /code>
Я понятия не имею, почему объект отображения нулевой. Я предполагаю, что что -то не инициализируется должным образом, но я не знаю, что это будет. < /P>
Вот мой код. Опять же, это работает в среде OSGI с Jetty 12. < /p>
Класс плагинов: < /p>
package com.example.core.websocket;
import java.util.Dictionary;
import java.util.Hashtable;
import javax.servlet.Servlet;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.service.http.whiteboard.HttpWhiteboardConstants;
public class WebSocketPlugin implements BundleActivator {
@Override
public void start(BundleContext context) throws Exception {
System.out.println("Starting WebSocketPlugin bundle.");
Servlet servlet = new WebSocketServlet();
Dictionary servletProps = new Hashtable();
servletProps.put(HttpWhiteboardConstants.HTTP_WHITEBOARD_SERVLET_PATTERN, "/ws/*");
context.registerService(Servlet.class, servlet, servletProps);
System.out.println("Registered WebSocket servlet at /ws/*");
}
@Override
public void stop(BundleContext context) throws Exception {
System.out.println("WebSocketPlugin bundle stopped");
}
}
< /code>
Класс сервлета: < /p>
package com.example.core.websocket;
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.eclipse.jetty.ee8.websocket.api.Session;
import org.eclipse.jetty.ee8.websocket.api.WebSocketAdapter;
import org.eclipse.jetty.ee8.websocket.server.JettyWebSocketServlet;
import org.eclipse.jetty.ee8.websocket.server.JettyWebSocketServletFactory;
public class WebSocketServlet extends JettyWebSocketServlet {
private static final long serialVersionUID = 5254365488025393690L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
resp.getWriter().println("Hello from WebSocket servlet (EE8)");
}
@Override
protected void configure(JettyWebSocketServletFactory factory) {
factory.setCreator((req, resp) -> new EchoWebSocketListener());
}
public class EchoWebSocketListener extends WebSocketAdapter {
@Override
public void onWebSocketConnect(Session s) {
System.out.println("EchoWebSocketListener connected.");
}
@Override
public void onWebSocketText(String message) {
System.out.println("Received message: " + message);
try {
if(isConnected()) {
getRemote().sendString("Echo: " + message);
}
} catch (IOException ex) {
System.out.println("Error sending message: " + ex.getMessage());
}
}
}
}
Спасибо!
Подробнее здесь: https://stackoverflow.com/questions/797 ... ty-12-cant