Question

I'm trying to deploy an application containing a WebSocket endpoint on Wildfly and I get this error:

javax.websocket.DeploymentException: UT003012: Method public void Endpoint.openConnection(javax.websocket.Session,javax.websocket.EndpointConfig,java.lang.String) has invalid parameters [2]"}}

This is the code for the endpoint class:

import javax.websocket.EndpointConfig;
import javax.websocket.CloseReason;
import javax.websocket.OnClose;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
import javax.ws.rs.PathParam;

@ServerEndpoint(value = "/update-user/{token}")
public class UpdateUsersEndpoint {

    @OnOpen
    public void openConnection(Session session, EndpointConfig config, @PathParam("token") String token) {
        ...
    }

    @OnClose
    public void closedConnection(Session session, CloseReason reason, @PathParam("token") String token) {
        ...
    }
}

This is the full stack from Wildfly log:

07:44:31,876 INFO  [io.undertow.websockets.jsr] (MSC service thread 1-4) UT026003: Adding annotated server endpoint class test.UpdateUsersEndpoint for path /update-user/{token}
07:44:31,877 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-4) MSC000001: Failed to start service jboss.undertow.deployment.default-server.default-host./test: org.jboss.msc.service.StartException in service jboss.undertow.deployment.default-server.default-host./test: Failed to start service
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1904) [jboss-msc-1.2.0.Final.jar:1.2.0.Final]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_51]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_51]
    at java.lang.Thread.run(Thread.java:744) [rt.jar:1.7.0_51]
Caused by: java.lang.RuntimeException: javax.websocket.DeploymentException: UT003012: Method public void test.UpdateUsersEndpoint.openConnection(javax.websocket.Session,javax.websocket.EndpointConfig,java.lang.String) has invalid parameters [2]
    at io.undertow.websockets.jsr.Bootstrap.handleDeployment(Bootstrap.java:50)
    at io.undertow.servlet.core.DeploymentManagerImpl.handleExtensions(DeploymentManagerImpl.java:237)
    at io.undertow.servlet.core.DeploymentManagerImpl.deploy(DeploymentManagerImpl.java:146)
    at org.wildfly.extension.undertow.deployment.UndertowDeploymentService.startContext(UndertowDeploymentService.java:86)
    at org.wildfly.extension.undertow.deployment.UndertowDeploymentService.start(UndertowDeploymentService.java:71)
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1948) [jboss-msc-1.2.0.Final.jar:1.2.0.Final]
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1881) [jboss-msc-1.2.0.Final.jar:1.2.0.Final]
    ... 3 more
Caused by: javax.websocket.DeploymentException: UT003012: Method public void test.UpdateUsersEndpoint.openConnection(javax.websocket.Session,javax.websocket.EndpointConfig,java.lang.String) has invalid parameters [2]
    at io.undertow.websockets.jsr.annotated.BoundMethod.<init>(BoundMethod.java:43)
    at io.undertow.websockets.jsr.annotated.AnnotatedEndpointFactory.create(AnnotatedEndpointFactory.java:81)
    at io.undertow.websockets.jsr.ServerWebSocketContainer.addEndpointInternal(ServerWebSocketContainer.java:266)
    at io.undertow.websockets.jsr.ServerWebSocketContainer.addEndpoint(ServerWebSocketContainer.java:243)
    at io.undertow.websockets.jsr.Bootstrap.handleDeployment(Bootstrap.java:44)
    ... 9 more

The deployment is successful upon removing the two last parameters. Since the WebSocket JSR states that a method annotated with @OnOpen can have the parameters I have in my method, I can't understand why Wildfly refuses to deploy the application.

UPDATE: this is the WEB-INF/lib folder:

activation-1.1.1.jar
apache-mime4j-0.6.jar
asm-3.3.1.jar
commons-email-1.3.1.jar
commons-logging-1.1.1.jar
geronimo-jta_1.1_spec-1.1.1.jar
gson-2.2.2.jar
istack-commons-runtime-2.16.jar
jackson-annotations-2.2.1.jar
jackson-core-2.2.1.jar
jackson-databind-2.2.1.jar
jackson-jaxrs-base-2.2.1.jar
jackson-jaxrs-json-provider-2.2.1.jar
jackson-module-jaxb-annotations-2.2.1.jar
jaxb-api-2.2.7.jar
jaxb-core-2.2.7.jar
jaxb-impl-2.2.7.jar
jboss-annotations-api_1.2_spec-1.0.0.Final.jar
jboss-ejb-api_3.2_spec-1.0.0.Final.jar
jboss-interceptors-api_1.2_spec-1.0.0.Final.jar
jboss-jms-api_2.0_spec-1.0.0.Final.jar
jboss-servlet-api_3.1_spec-1.0.0.Final.jar
jboss-websocket-api_1.0_spec-1.0.0.Final.jar
jcl-over-slf4j-1.7.1.jar
jsr173_api-1.0.jar
logback-classic-1.0.10.jar
logback-core-1.0.10.jar
mail-1.4.5.jar
resteasy-client-3.0.6.Final.jar
resteasy-jackson2-provider-3.0.6.Final.jar
resteasy-jaxb-provider-3.0.6.Final.jar
resteasy-multipart-provider-3.0.6.Final.jar
slf4j-api-1.7.1.jar
Was it helpful?

Solution

You are using javax.ws.rs.PathParam instead of javax.websocket.server.PathParam.

I might add a warning about this to Undertow, seems like the sort of thing that may happen a lot.

OTHER TIPS

Your problem is in faulty lib, you have jars that are server provided in your lib. This can cause all kinds of problems with injections.

If you are building with maven you are just missing few <scope>provided</scope> in your dependencies.

comments on individual jars:

activation-1.1.1.jar <-- part of jdk, remove
apache-mime4j-0.6.jar 
asm-3.3.1.jar <-- probably not needed
commons-email-1.3.1.jar
commons-logging-1.1.1.jar <-- remove
geronimo-jta_1.1_spec-1.1.1.jar <-- remove this is JTA api jar, it is part of app server
gson-2.2.2.jar
istack-commons-runtime-2.16.jar
jackson-annotations-2.2.1.jar <-- using jackson directly in your app? if not remove jackson*
jackson-core-2.2.1.jar
jackson-databind-2.2.1.jar
jackson-jaxrs-base-2.2.1.jar
jackson-jaxrs-json-provider-2.2.1.jar
jackson-module-jaxb-annotations-2.2.1.jar
jaxb-api-2.2.7.jar <-- part of jdk and app server, remove
jaxb-core-2.2.7.jar <-- part of jdk and app server, remove
jaxb-impl-2.2.7.jar <-- part of jdk and app server, remove
jboss-annotations-api_1.2_spec-1.0.0.Final.jar <-- part of app server, should not be in deployment
jboss-ejb-api_3.2_spec-1.0.0.Final.jar <-- part of app server, should not be in deployment
jboss-interceptors-api_1.2_spec-1.0.0.Final.jar <-- part of app server, should not be in deployment
jboss-jms-api_2.0_spec-1.0.0.Final.jar <-- part of app server, should not be in deployment
jboss-servlet-api_3.1_spec-1.0.0.Final.jar <-- part of app server, should not be in deployment
jboss-websocket-api_1.0_spec-1.0.0.Final.jar <-- part of app server, should not be in deployment
jcl-over-slf4j-1.7.1.jar <-- probably not needed as wildfly overrides it
jsr173_api-1.0.jar <-- app server already provides that, could be removed
logback-classic-1.0.10.jar <-- are you server managed logging? if so remove
logback-core-1.0.10.jar <-- are you server managed logging? if so remove
mail-1.4.5.jar <-- part of app server
resteasy-client-3.0.6.Final.jar <-- client api in deployment? is your application client to some jaxrs services?
resteasy-jackson2-provider-3.0.6.Final.jar <-- remove
resteasy-jaxb-provider-3.0.6.Final.jar <-- remove
resteasy-multipart-provider-3.0.6.Final.jar <-- remove
slf4j-api-1.7.1.jar <-- are you server managed logging? if so remove

I think most of the stuff you have here is because you need compile dependencies, but they are not required at runtime.

Also why do you have two jaxrs impls in your app? is that intended or mistake?

This should work. Can you post your full endpoint definition? All I can think of is maybe you are using this on a Client endpoint, which won't work.

I just added a test for this to Undertow and it passes fine, so I am not sure what the problem is: https://github.com/undertow-io/undertow/commit/1be41d70ec5268e557cf0657638f0f77bc6d2f58

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top