2012-04-09 3 views
1

간단한 WebSevice의존성 주입하여 EJB 주석

@WebService 
@Stateless 
public class HistoryFormatterWebService implements IHistoryFormatterWebService 
{ 
    @EJB 
    private IHistoryFormatter historyFormatter; 

    public byte[] formatHistory(final byte[] data) 
    { 
     System.err.println("hello from service"); 

     return null; 
    } 
} 

IHistoryFormatter

@Local 
public interface IHistoryFormatter 
{ 
// .. 
} 

IHistoryFormatter는 다른 프로젝트 (쿼리 ear.ear)에서 콩하지만 그는 또한 JBoss에서 배포됩니다.
내 웹 서비스가 jBoss에 정상적으로 배포됩니다. 그리고 JBoss는 내가 할

11:17:09,506 INFO [JmxKernelAbstraction] installing MBean: jboss.j2ee:ear=wsformatter-ear-1.0-SNAPSHOT.ear,jar=wsformatter-ejb-1.0-SNAPSHOT.jar,name=HistoryFormatterWebService,service=EJB3 with dependencies: 
11:17:09,568 INFO [JmxKernelAbstraction] jboss.j2ee:ear=query-ear.ear,jar=query-services.jar,name=HistoryFormatter,service=EJB3 
11:17:09,568 INFO [EJBContainer] STARTED EJB: com.wsformatter.HistoryFormatterWebService ejbName: HistoryFormatterWebService 

을 썼다 그러나 나는 그것에 요청을 보낼 때 (SoapUI를 사용하여) 예외

java.lang.RuntimeException: Non matching type for inject of field: private com.softcomputer.softlab.lquery.service.IHistoryFormatter com.softcomputer.wsformatter.HistoryFormatterWebService.historyFormatter for type: $Proxy250 of jndiName env/com.softcomputer.wsformatter.HistoryFormatterWebService/historyFormatter 
intfs: , com.softcomputer.softlab.lquery.service.IHistoryFormatter, org.jboss.ejb3.JBossProxy 
    at org.jboss.injection.JndiFieldInjector.inject(JndiFieldInjector.java:128) 
    at org.jboss.injection.JndiFieldInjector.inject(JndiFieldInjector.java:106) 
    at org.jboss.injection.JndiFieldInjector.inject(JndiFieldInjector.java:63) 
    at org.jboss.ejb3.AbstractPool.create(AbstractPool.java:111) 
    at org.jboss.ejb3.InfinitePool.get(InfinitePool.java:49) 
    at org.jboss.ejb3.ThreadlocalPool.create(ThreadlocalPool.java:50) 
    at org.jboss.ejb3.ThreadlocalPool.get(ThreadlocalPool.java:90) 
    at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:54) 
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) 
    at org.jboss.aspects.security.AuthenticationInterceptor.invoke(AuthenticationInterceptor.java:77) 
    at org.jboss.ejb3.security.Ejb3AuthenticationInterceptor.invoke(Ejb3AuthenticationInterceptor.java:110) 
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) 
    at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:46) 
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) 
    at org.jboss.ejb3.asynchronous.AsynchronousInterceptor.invoke(AsynchronousInterceptor.java:106) 
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) 
    at org.jboss.wsf.container.jboss42.InvocationHandlerEJB3.invoke(InvocationHandlerEJB3.java:103) 
    at org.jboss.ws.core.server.ServiceEndpointInvoker.invoke(ServiceEndpointInvoker.java:221) 
    at org.jboss.wsf.stack.jbws.RequestHandlerImpl.processRequest(RequestHandlerImpl.java:466) 
    at org.jboss.wsf.stack.jbws.RequestHandlerImpl.handleRequest(RequestHandlerImpl.java:284) 
    at org.jboss.wsf.stack.jbws.RequestHandlerImpl.doPost(RequestHandlerImpl.java:201) 
    at org.jboss.wsf.stack.jbws.RequestHandlerImpl.handleHttpRequest(RequestHandlerImpl.java:134) 
    at org.jboss.wsf.stack.jbws.EndpointServlet.service(EndpointServlet.java:84) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) 
    at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:182) 
    at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
    at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446) 
    at java.lang.Thread.run(Thread.java:595) 
Caused by: java.lang.IllegalArgumentException 
    at sun.reflect.UnsafeObjectFieldAccessorImpl.set(UnsafeObjectFieldAccessorImpl.java:63) 
    at java.lang.reflect.Field.set(Field.java:656) 
    at org.jboss.injection.JndiFieldInjector.inject(JndiFieldInjector.java:116) 
    ... 41 more 

누군가가 나를 도울 수 있습니까?

답변

3

그냥 추측은 :

java.lang.RuntimeException: Non matching type for inject of field: 
[...] com.softcomputer.softlab.lquery.service.IHistoryFormatter [...] for type: 
[...] of [...] com.softcomputer.softlab.lquery.service.IHistoryFormatter[...] 

이 두 클래스 로더에 의해로드 클래스 IHistoryFormatter 있다는 것을 나에게 소리. 클래스가 같은 이름을 가지고 있더라도 다른 클래스 로더에 의해로드 된 클래스는 서로 다른 것으로 간주됩니다.

인터페이스 클래스의 패키징을 확인하십시오. 이상적으로는 JBoss에서 정확히 한 곳에서 사용할 수 있어야합니다.

+0

사실입니다. 클래스 경로에 lquery.jar 및 lquery-1.0-SNAPSHOT.jar이 있습니다. – Ilya