关于jboss:仅具有远程接口的EJB 3.1 Session Bean上的JAX-RS

JAX-RS on EJB 3.1 Session Bean which only has Remote Interface

是否可以在仅具有远程接口的EJB 3.1会话bean上使用@Path之类的JAX-RS注释?

这有效:

1
2
3
4
5
6
7
8
9
@Path("/service")
@Stateless
public class ServiceOne {
    @POST
    @Path("/foo")
    public Response foo() {
        return Response.ok().build();
    }
}

但是,如果我添加了远程接口...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Remote
public interface ServiceOneRemote {
    Response foo();
}

@Path("/service")
@Stateless
public class ServiceOne implements ServiceOneRemote {
    @POST
    @Path("/foo")
    public Response foo() {
        return Response.ok().build();
    }
}

...我收到NotSerializableException

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
java.io.NotSerializableException: org.jboss.resteasy.core.ServerResponse
    org.jboss.marshalling.cloner.SerializingCloner.clone(SerializingCloner.java:253)
    org.jboss.marshalling.cloner.SerializingCloner.clone(SerializingCloner.java:128)
    org.jboss.as.ejb3.remote.LocalEjbReceiver.clone(LocalEjbReceiver.java:295)
    org.jboss.as.ejb3.remote.LocalEjbReceiver.clone(LocalEjbReceiver.java:286)
    org.jboss.as.ejb3.remote.LocalEjbReceiver.processInvocation(LocalEjbReceiver.java:258)
    org.jboss.ejb.client.EJBClientInvocationContext.sendRequest(EJBClientInvocationContext.java:184)
    org.jboss.ejb.client.EJBObjectInterceptor.handleInvocation(EJBObjectInterceptor.java:58)
    org.jboss.ejb.client.EJBClientInvocationContext.sendRequest(EJBClientInvocationContext.java:186)
    org.jboss.ejb.client.EJBHomeInterceptor.handleInvocation(EJBHomeInterceptor.java:83)
    org.jboss.ejb.client.EJBClientInvocationContext.sendRequest(EJBClientInvocationContext.java:186)
    org.jboss.ejb.client.TransactionInterceptor.handleInvocation(TransactionInterceptor.java:42)
    org.jboss.ejb.client.EJBClientInvocationContext.sendRequest(EJBClientInvocationContext.java:186)
    org.jboss.ejb.client.ReceiverInterceptor.handleInvocation(ReceiverInterceptor.java:125)
    org.jboss.ejb.client.EJBClientInvocationContext.sendRequest(EJBClientInvocationContext.java:186)
    org.jboss.ejb.client.EJBInvocationHandler.sendRequestWithPossibleRetries(EJBInvocationHandler.java:255)
    org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:200)
    org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:183)
    org.jboss.ejb.client.EJBInvocationHandler.invoke(EJBInvocationHandler.java:146)
    com.sun.proxy.$Proxy88.foo(Unknown Source)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    java.lang.reflect.Method.invoke(Method.java:483)
    org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:168)
    org.jboss.resteasy.core.ResourceMethod.invokeOnTarget(ResourceMethod.java:269)
    org.jboss.resteasy.core.ResourceMethod.invoke(ResourceMethod.java:227)
    org.jboss.resteasy.core.ResourceMethod.invoke(ResourceMethod.java:216)
    org.jboss.resteasy.core.SynchronousDispatcher.getResponse(SynchronousDispatcher.java:541)
    org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:523)
    org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:125)
    org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:208)
    org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:55)
    org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:50)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:847)

从诸如使用本地接口实现EJB的RESTful视图的文章中,我得到的印象是JAX-RS仅适用于具有本地接口的会话bean。但是我找不到任何明确指出不可能的资源。

我做错什么了吗?还是这不可能?

顺便说一句:我正在运行JBoss EAP 6.4应用服务器。


不可能。在JSR-339(用于RESTful Web服务的JavaTM API)规范中,该声明如下:

JAX-RS annotations can be applied to methods in an EJB’s local
interface or directly to methods in a no-interface EJB.