2016-03-23 24 views
1

私はSOAP Web Servicesを初めて使用しています。私は、依存性注入のためにSpringフレームワークを使用し、エンドポイントを作成し、いくつかの操作を実行するためのJAX WSを使用するいくつかのプロジェクトに取り組んでいます。WSDLエンドポイントにアクセスできない

そして、私は終点を作成しているクラスに依存性注入を使用しています。 私はアプリケーションを実行しているときに、私は以下のエラーが発生しています。

これは、スタックトレース

No qualifying bean of type [com.wex.gbp.service.EmployeeService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true), @org.springframework.beans.factory.annotation.Qualifier(value=employeeService)} 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1100) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:960) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:855) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:480) 
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.processInjection(AutowiredAnnotationBeanPostProcessor.java:307) 
    at org.springframework.web.context.support.SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(SpringBeanAutowiringSupport.java:85) 
    at org.springframework.web.context.support.SpringBeanAutowiringSupport.<init>(SpringBeanAutowiringSupport.java:68) 
    at com.wex.gbp.business.common.ws.endpoints.LookUpServiceEndpoint.<init>(LookUpServiceEndpoint.java:27) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:422) 
    at java.lang.Class.newInstance(Class.java:442) 
    at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:116) 
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1148) 
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:864) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:134) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Thread.java:745) 

であると私は、エンドポイントを作成しています場所です。

@WebService(serviceName = "LookUpServiceBeanService", portName = "LookUpServiceBeanPort", name = "LookUpService", targetNamespace = "http://namespaceurl.com/") 
@SOAPBinding(style = Style.DOCUMENT) 
@HandlerChain(file = "chain.xml") 
    @Component 
    public class LookUpServiceEndpoint extends SpringBeanAutowiringSupport { 

     private static final Logger LOGGER = LoggerFactory.getLogger(LookUpServiceEndpoint.class); 



@Autowired 
@Qualifier(value="employeeService") 
private EmployeeService employeeService; 
    // Other methods 

    } 

私は同じ修飾子名を持つサービスクラスを持っています。 そして、私のweb.xmlが

<servlet> 
     <servlet-name>LookUpService</servlet-name> 
     <servlet-class>com.ws.endpoints.LookUpServiceEndpoint</servlet-class> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>LookUpService</servlet-name> 
     <url-pattern>/services/LookUpService</url-pattern> 
    </servlet-mapping> 

が含まれていると私は、URL「http://localhost:8080/Project_WSDL/services/LookUpService?wsdl」にアクセスしようとしていたとき、私はエラーを取得しています。

どうすれば問題を解決できますか?

+0

エラーはウェブサービスとは関係ありません。何らかの理由でSpringがその名前のBeanを見つけることができないだけです。 EmployeeServiceインターフェイスとEmployeeServiceImpl(または具体的なクラスの名前は何でも構いません)クラスのコードを、それらのすべての注釈を含むクラスに追加できますか? –

+0

うん。私は、WebサービスクラスがSpringコンテキストの前にロードされていると考えています。したがって、サービスクラスはまだオートワイヤリングすることができません。しかし、Webサービスクラスの前にSpringのコンテキストをロードする方法を理解することはできません。 – Raghavendra

+0

jax-wsの前にSpringリスナーをロードできます。あなたはXMLまたはJavaの設定をしていますか?どのサーバーを使用していますか? –

答えて

0

最後に、問題を解決できました。以前のコードにはほとんど問題はありませんでした。

  1. SpringとJaxの統合に依存しません。第一の問題についてapplicationContext.xmlを

にWebサービスのURLを設定するweb.xmlの

  • でWsのため
  • リスナーは、私が持っている、以下の依存関係

    1秒間
    <dependency> 
          <groupId>com.sun.xml.ws</groupId> 
          <artifactId>jaxws-rt</artifactId> 
          <version>2.2.3</version> 
         </dependency> 
    
         <!-- Library from java.net, integrate Spring with JAX-WS --> 
         <dependency> 
          <groupId>org.jvnet.jax-ws-commons.spring</groupId> 
          <artifactId>jaxws-spring</artifactId> 
          <version>1.8</version> 
    </dependency> 
    

    を追加しましたweb.xmlの下に行が追加されました

    <servlet> 
         <servlet-name>jaxws-servlet</servlet-name> 
         <servlet-class> 
          com.sun.xml.ws.transport.http.servlet.WSSpringServlet 
         </servlet-class> 
        </servlet> 
    
        <servlet-mapping> 
         <servlet-name>jaxws-servlet</servlet-name> 
         <url-pattern>/services/LookUpService</url-pattern> 
        </servlet-mapping> 
    

    最後に、彼はapplicationContext.xmlのURLをバインドします

    <wss:binding url="/services/LookUpService"> 
         <wss:service> 
          <ws:service bean="#lookUpServiceEndpoint" /> 
         </wss:service> 
        </wss:binding> 
    

    私にとっては、これが問題でした。しかし、それは他人のために変わるかもしれません。

  • +0

    ニース。あなたの解決策を共有してくれてありがとう:) –

    +0

    問題ない。 – Raghavendra

    関連する問題