Попытка настроить сервлет для WebSocket в среде OSGI с причалом 12. Не могу понять эту ошибкуJAVA

Программисты JAVA общаются здесь
Anonymous
Попытка настроить сервлет для WebSocket в среде OSGI с причалом 12. Не могу понять эту ошибку

Сообщение Anonymous »

Я работаю над проектом OSGI с Jetty 12, пытаясь использовать службу HTTP Whiteboard для регистрации сервлета для WebSocket. Все сработало, когда я тестировал с Httpservlet, но когда я модифицировал его на Jettywebsocketservlet и запустил следующую ошибку на консоли OSGI: < /p>

Код: Выделить всё

!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());
}
}
}
}
Я попытался загрузить причалы и пучки Osgi в разные заказы и попытался найти различные версии из них, но на самом деле я просто в тупике.
Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/797 ... ty-12-cant

Вернуться в «JAVA»