2016-07-19 49 views
1

我可以在只有遠程接口的EJB 3.1會話bean上使用JAX-RS註釋(如@Path)嗎?EJB 3.1會話Bean上的JAX-RS只有遠程接口

這工作:

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

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

@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

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) 

從像Implementing RESTful views of an EJB with local interfaces文章我覺得JAX-RS只適用於具有本地接口的會話bean。但是我找不到任何明確聲明不可能的資源。

我做錯了什麼?或者這是不可能的?

Btw:我正在運行JBoss EAP 6.4應用程序服務器。

回答

1

這是不可能的。

JAX-RS註釋可以在EJB的本地 接口或直接在無接口EJB方法應用於方法:JSR-339(的的JavaTM API的REST Web服務)規範這個如下說明。

相關問題