2012-12-20 1 views
0

jboss에 배치되는 CXF 웹 서비스에 내 스프링 빈이 주입되지 않는 이유를 알아 내는데 어려움이 있습니다. 여기 는 시나리오 : 구현 #jboss에 배포 된 CXF 웹 서비스에 스프링 서비스 빈을 주입하는 중 오류가 발생했습니다.

내가 인터페이스 여기

을 구현하는 여러 서비스 클래스를 가지고있다 (1) 여기서

@Service("retrieveService") 
@Scope("prototype") 
@Transactional(propagation=Propagation.REQUIRED) 
public class RetrieveService extends BaseService implements IEuclidService 
{ 
    @Resource 
    private EntrLoanRepository entrLoanRepository; 


    @Override 
    public RetrieveResponse serve(RequestMessage request) 
    { 
        entrLoanRepository.findByEntrLoanId(); 
    } 
} 

는 구현 #에게 내가 가진 2

@Service("disableService") 
@Scope("prototype") 
@Transactional(propagation=Propagation.REQUIRED) 
public class DisableService extends BaseService implements IEuclidService 
{ 
    @Resource 
    private EntrLoanRepository entrLoanRepository; 

    @Override 
    public RetrieveResponse serve(RequestMessage request) 
    { 
       EntrLoan entrLoan = new EntrLoan(); 
       entrLoan.setEndDate(new Date()); 
       entrLoanRepository.save(entrLoan); 
    } 
} 

내 cxf 웹 서비스로, 스프링 (서비스) 빈이 주입되기를 기대하고있다.

euclidService = ctx.getBean("retrieveService", RetrieveService.class);

하지만 오류 메시지가 점점 오전 :

@javax.jws.WebService 
public class Euclid implements IEuclid { 

    private IEuclidService euclidService 

    public MyResponse myMethod(MyRequest req) 
    { 
    <!-- How do I inject an instance of RetrieveService here ???--> 
    euclidService.serve(); 
    } 
} 

나는이 일을 시도

 [email protected] 
    ***1 EuclidService is NULL 
    *****Instantiating Spring Bean 
    org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'retrieveService' must be of type [com.sgb.euclid.ws.service.RetrieveService], but was actually of type [$Proxy98] 
     at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:360) 
     at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 
     at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1102) 
     at com.sgb.euclid.ws.web.Euclid.retrieve(Euclid.java:79) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
     at java.lang.reflect.Method.invoke(Method.java:597) 
     at org.jboss.as.ee.component.ManagedReferenceMethodInterceptorFactory$ManagedReferenceMethodInterceptor.processInvocation(ManagedReferenceMethodInterceptorFactory.java:72) 
     at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) 
     at org.jboss.invocation.WeavedInterceptor.processInvocation(WeavedInterceptor.java:53) 
     at org.jboss.as.ee.component.interceptors.UserInterceptorFactory$1.processInvocation(UserInterceptorFactory.java:58) 
     at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) 
     at org.jboss.invocation.WeavedInterceptor.processInvocation(WeavedInterceptor.java:53) 
     at org.jboss.as.ee.component.interceptors.UserInterceptorFactory$1.processInvocation(UserInterceptorFactory.java:58) 
     at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) 
     at org.jboss.invocation.InitialInterceptor.processInvocation(InitialInterceptor.java:21) 
     at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) 
     at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61) 
     at org.jboss.as.ee.component.interceptors.ComponentDispatcherInterceptor.processInvocation(ComponentDispatcherInterceptor.java:53) 
     at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) 
     at org.jboss.as.webservices.deployers.WSComponentInstanceAssociationInterceptor.processInvocation(WSComponentInstanceAssociationInterceptor.java:49) 
     at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) 
     at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61) 
     at org.jboss.as.ee.component.ViewService$View.invoke(ViewService.java:165) 
     at org.jboss.as.webservices.invocation.AbstractInvocationHandler.invoke(AbstractInvocationHandler.java:111) 
     at org.jboss.wsf.stack.cxf.JBossWSInvoker.performInvocation(JBossWSInvoker.java:149) 
     at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:96) 
     at org.apache.cxf.jaxws.AbstractJAXWSMethodInvoker.invoke(AbstractJAXWSMethodInvoker.java:178) 
     at org.apache.cxf.jaxws.JAXWSMethodInvoker.invoke(JAXWSMethodInvoker.java:64) 
     at org.jboss.wsf.stack.cxf.JBossWSInvoker.invoke(JBossWSInvoker.java:129) 
     at org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:58) 
     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441) 
     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) 
     at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
     at org.apache.cxf.workqueue.SynchronousExecutor.execute(SynchronousExecutor.java:37) 
     at org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:107) 
     at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:262) 
     at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121) 
     at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:236) 
     at org.jboss.wsf.stack.cxf.RequestHandlerImpl.handleHttpRequest(RequestHandlerImpl.java:88) 
     at org.jboss.wsf.stack.cxf.transport.ServletHelper.callRequestHandler(ServletHelper.java:156) 
     at org.jboss.wsf.stack.cxf.CXFServletExt.invoke(CXFServletExt.java:87) 
     at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:221) 
     at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:141) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:754) 
     at org.jboss.wsf.stack.cxf.CXFServletExt.service(CXFServletExt.java:135) 
     at org.jboss.wsf.spi.deployment.WSFServlet.service(WSFServlet.java:140) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:847) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:295) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214) 
     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230) 
     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:149) 
     at org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:50) 
     at org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:50) 
     at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:169) 
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:145) 
     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:97) 
     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:102) 
     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:336) 
     at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856) 
     at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:652) 
     at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:919) 
     at java.lang.Thread.run(Thread.java:662) 

내가 아주 "유형은 [$가 Proxy98]"무엇을 이해하지를 . 로그에서 검색했지만 어디에서 오는지 알 수 없습니다. 나는 이것이 봄과 관련이 있다고 가정한다 ?? 어쨌든, bean이 beans.xml에 정의되어 있지 않고 오히려 주석이 달렸음을 기억하면서 봄용 bean을 인스턴스화 할 수 없다는 것은 잘못된 것입니다.

나는 뭔가를 놓치고 있다고 느낀다. 그러나 나는 그것에 손가락을 대지 못한다.

jboss에서 배포 할 때 구성 xml은 온라인에서 보는 예제와 약간 다릅니다. 가 여기 내 JBoss에 cxf.xml입니다 :

<jaxws:endpoint id="POJOEndpoint" 
     implementor="com.sgb.euclid.ws.web.Euclid" 
     wsdlLocation="WEB-INF/wsdl/EnterpriseLoanIdentifier.wsdl" 
     address="http://localhost:8080/euclid-ws"> 
     <jaxws:properties> 
      <entry key="schema-validation-enabled" value="true" /> 
     </jaxws:properties> 
     <jaxws:invoker> 
      <bean class="org.jboss.wsf.stack.cxf.InvokerJSE" /> 
     </jaxws:invoker> 
    </jaxws:endpoint> 

그리고 여기의 ApplicationContext-ws.xml입니다 :

여기
<import resource="applicationContext-core.xml" /> 
    <import resource="applicationContext-jpa.xml" /> 

    <!-- setting up packages to scan for components --> 
    <context:component-scan base-package="com.sgb.euclid.ws.service" /> 

    <tx:annotation-driven 
    transaction-manager="transactionManager" /> 

는 해당의 web.xml에게 있습니다

<!-- setting up spring configuration to instantiate the spring container --> 
<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>classpath*:META-INF/spring/applicationContext-ws.xml</param-value> 
</context-param> 

<servlet> 
    <servlet-name>euclid</servlet-name> 
    <servlet-class>com.sgb.euclid.ws.web.Euclid</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>euclid</servlet-name> 
    <url-pattern>/*</url-pattern> 
</servlet-mapping> 

그럴 수 없어 내 실수가 무엇인지 알아 내라. 구현을

euclidService = ctx.getBean("retrieveService", IEuclidService .class); 

또는

euclidService = (IEuclidService) ctx.getBean("retrieveService"); 

의 getBean는 인터페이스로 캐스팅 할 수있는 표시하지 : 어떤 도움

답변

관련 문제