Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jakarta ee connectToServer上的Websocket javax.Websocket.DeploymentException_Jakarta Ee_Netbeans_Websocket_Glassfish_Tyrus - Fatal编程技术网

Jakarta ee connectToServer上的Websocket javax.Websocket.DeploymentException

Jakarta ee connectToServer上的Websocket javax.Websocket.DeploymentException,jakarta-ee,netbeans,websocket,glassfish,tyrus,Jakarta Ee,Netbeans,Websocket,Glassfish,Tyrus,环境: NetBeans 8.0.2 玻璃鱼4.1 Tyrus 1.11 我试图在中测试websocket,但我正在测试javax.websocket.DeploymentException ToDoChangeTracker.java ... import java.io.IOException; import javax.ejb.ConcurrencyManagement; import javax.ejb.ConcurrencyManagementType; import javax.

环境:

  • NetBeans 8.0.2
  • 玻璃鱼4.1
  • Tyrus 1.11
我试图在中测试websocket,但我正在测试javax.websocket.DeploymentException

ToDoChangeTracker.java

...
import java.io.IOException;
import javax.ejb.ConcurrencyManagement;
import javax.ejb.ConcurrencyManagementType;
import javax.ejb.Singleton;
import javax.enterprise.event.Observes;
import javax.enterprise.event.TransactionPhase;
import javax.websocket.OnClose;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;

@Singleton
@ServerEndpoint("/changes")
@ConcurrencyManagement(ConcurrencyManagementType.BEAN)
public class ToDoChangeTracker {

    private Session session;

    @OnOpen
    public void onOpen(Session session){
        this.session = session;
    }

    @OnClose
    public void onClose(Session session){
        this.session = null;
    }

    public void onToDoChange(@Observes(during = TransactionPhase.AFTER_SUCCESS) ToDo todo){
        //System.out.println("################# todo changed and committed = " + todo);
        if(this.session != null && this.session.isOpen()){
            try {
                this.session.getBasicRemote().sendText(todo.toString());
            } catch (IOException ex) {
                //we ignore this
            }
        }
    }

}
    import java.io.IOException;
    import java.net.URI;
    import java.net.URISyntaxException;
    import javax.websocket.ContainerProvider;
    import javax.websocket.DeploymentException;
    import javax.websocket.WebSocketContainer;
    import static org.junit.Assert.assertNotNull;
    import org.junit.Before;
    import org.junit.Test;

    /**
     *
     * @author jose
     */
    public class ToDoChangeTrackerIT {
        private WebSocketContainer container;
        private ChangesListener listener;

        @Before
        public void initContainer() throws URISyntaxException, DeploymentException, IOException{
            this.container = ContainerProvider.getWebSocketContainer();
            URI uri = new URI("ws://localhost:8080/doit/changes");
            this.listener = new ChangesListener();
            this.container.connectToServer(container, uri); //Error
        }

        @Test
        public void receiveNotifications() throws InterruptedException{
            String message = this.listener.getMessage();
            assertNotNull(message);
            System.out.println(" " + message);
        }
    }
ToDoChangesTrackerIT.java

...
import java.io.IOException;
import javax.ejb.ConcurrencyManagement;
import javax.ejb.ConcurrencyManagementType;
import javax.ejb.Singleton;
import javax.enterprise.event.Observes;
import javax.enterprise.event.TransactionPhase;
import javax.websocket.OnClose;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;

@Singleton
@ServerEndpoint("/changes")
@ConcurrencyManagement(ConcurrencyManagementType.BEAN)
public class ToDoChangeTracker {

    private Session session;

    @OnOpen
    public void onOpen(Session session){
        this.session = session;
    }

    @OnClose
    public void onClose(Session session){
        this.session = null;
    }

    public void onToDoChange(@Observes(during = TransactionPhase.AFTER_SUCCESS) ToDo todo){
        //System.out.println("################# todo changed and committed = " + todo);
        if(this.session != null && this.session.isOpen()){
            try {
                this.session.getBasicRemote().sendText(todo.toString());
            } catch (IOException ex) {
                //we ignore this
            }
        }
    }

}
    import java.io.IOException;
    import java.net.URI;
    import java.net.URISyntaxException;
    import javax.websocket.ContainerProvider;
    import javax.websocket.DeploymentException;
    import javax.websocket.WebSocketContainer;
    import static org.junit.Assert.assertNotNull;
    import org.junit.Before;
    import org.junit.Test;

    /**
     *
     * @author jose
     */
    public class ToDoChangeTrackerIT {
        private WebSocketContainer container;
        private ChangesListener listener;

        @Before
        public void initContainer() throws URISyntaxException, DeploymentException, IOException{
            this.container = ContainerProvider.getWebSocketContainer();
            URI uri = new URI("ws://localhost:8080/doit/changes");
            this.listener = new ChangesListener();
            this.container.connectToServer(container, uri); //Error
        }

        @Test
        public void receiveNotifications() throws InterruptedException{
            String message = this.listener.getMessage();
            assertNotNull(message);
            System.out.println(" " + message);
        }
    }
我创建了一个javascript文件来测试websocket,它实际上可以工作,结果是

已连接到ws://localhost:8080/doit/changes

websocket.js

var wsUri = "ws://" + document.location.host + document.location.pathname + "changes";
var websocket = new WebSocket(wsUri);

websocket.onerror = function(evt) { onError(evt) };

function onError(evt) {
    writeToScreen('<span style="color: red;">ERROR:</span> ' + evt.data);
}

// For testing purposes
var output = document.getElementById("output");
websocket.onopen = function(evt) { onOpen(evt) };

function writeToScreen(message) {
    output.innerHTML += message + "<br>";
}

function onOpen() {
    writeToScreen("Connected to " + wsUri);
}
// End test functions
var wsUri=“ws://”+document.location.host+document.location.pathname+“更改”;
var websocket=新的websocket(wsUri);
websocket.onerror=函数(evt){onerror(evt)};
函数onError(evt){
writeToScreen('错误:'+evt.data);
}
//用于测试目的
var output=document.getElementById(“输出”);
websocket.onopen=函数(evt){onopen(evt)};
功能写入屏幕(消息){
output.innerHTML+=message+“
”; } 函数onOpen(){ writeToScreen(“连接到”+wsUri); } //结束测试函数
错误

javax.websocket.DeploymentException
    at org.glassfish.tyrus.client.ClientManager.connectToServer(ClientManager.java:383)
    at com.airhacks.doit.business.reminders.boundary.ToDoChangeTrackerIT.initContainer(ToDoChangeTrackerIT.java:32)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:53)
    at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:123)
    at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:104)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:164)
    at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:110)
    at org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:175)
    at org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcessWhenForked(SurefireStarter.java:107)
    at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:68)
Caused by: java.lang.NullPointerException
    at org.glassfish.tyrus.core.AnnotatedEndpoint.<init>(AnnotatedEndpoint.java:161)
    at org.glassfish.tyrus.core.AnnotatedEndpoint.fromInstance(AnnotatedEndpoint.java:135)
    at org.glassfish.tyrus.client.ClientManager$3.run(ClientManager.java:559)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at org.glassfish.tyrus.client.ClientManager$SameThreadExecutorService.execute(ClientManager.java:866)
    at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:112)
    at org.glassfish.tyrus.client.ClientManager.connectToServer(ClientManager.java:511)
    at org.glassfish.tyrus.client.ClientManager.connectToServer(ClientManager.java:373)
    ... 30 more
javax.websocket.DeploymentException
位于org.glassfish.tyrus.client.ClientManager.connectToServer(ClientManager.java:383)
在com.airhacks.doit.business.remenders.boundary.ToDoChangeTrackerIT.initContainer(ToDoChangeTrackerIT.java:32)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:497)
位于org.junit.runners.model.FrameworkMethod$1.runReflectVeCall(FrameworkMethod.java:50)
位于org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
位于org.junit.runners.model.FrameworkMethod.invokeeexplosive(FrameworkMethod.java:47)
位于org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)
位于org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
位于org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
位于org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
位于org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
位于org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
位于org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
访问org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
位于org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
位于org.junit.runners.ParentRunner.run(ParentRunner.java:363)
位于org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:53)
位于org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:123)
位于org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:104)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:497)
位于org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:164)
位于org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:110)
位于org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:175)
在org.apache.maven.surefire.booter.SurefireStarter.runsuitesinprocesswhen标记(SurefireStarter.java:107)
位于org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:68)
原因:java.lang.NullPointerException
位于org.glassfish.tyrus.core.AnnotatedEndpoint。(AnnotatedEndpoint.java:161)
位于org.glassfish.tyrus.core.AnnotatedEndpoint.fromInstance(AnnotatedEndpoint.java:135)
位于org.glassfish.tyrus.client.ClientManager$3.run(ClientManager.java:559)
位于java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
在java.util.concurrent.FutureTask.run(FutureTask.java:266)处
位于org.glassfish.tyrus.client.ClientManager$SameThreadExecutorService.execute(ClientManager.java:866)
位于java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:112)
位于org.glassfish.tyrus.client.ClientManager.connectToServer(ClientManager.java:511)
位于org.glassfish.tyrus.client.ClientManager.connectToServer(ClientManager.java:373)
... 30多
有什么想法吗