2016-03-23 19 views
1

Ich bin neu in SOAP Web Services. Ich arbeite an einem Projekt, das Spring-Framework für die Abhängigkeitsinjektion und JAX WS zum Erstellen der Endpunkte und Ausführen einiger Operationen verwendet.Kein Zugriff auf WSDL-Endpunkt möglich

Und ich verwende Abhängigkeitsinjektion in der Klasse, wo ich Endpunkt erstellen. Wenn ich die Anwendung ausführe, erhalte ich einen Fehler.

Dies ist der Stack-Trace

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) 

Und das ist, wo ich Endpunkt erschaffe.

@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 

    } 

Ich habe Service-Klasse mit demselben Qualifier-Namen. Und mein web.xml enthält

<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> 

Und wenn ich die URL „http://localhost:8080/Project_WSDL/services/LookUpService?wsdl“ zuzugreifen versuchen, erhalte ich Fehler.

Bitte helfen Sie mir, wie kann ich das Problem lösen?

+0

Der Fehler hat nichts mit Web-Services zu tun. Es ist nur Spring nicht in der Lage, eine Bean mit diesem Namen aus irgendeinem Grund zu finden. Können Sie den Code für die EmployeeService-Schnittstelle und die EmployeeServiceImpl-Klasse (oder wie auch immer der Name für Ihre konkrete Klasse lautet) einschließlich aller Anmerkungen hinzufügen? –

+0

Ja. Ich denke, dass die Webservice-Klasse vor dem Spring-Kontext geladen wird. Daher ist die Service-Klasse noch nicht verfügbar für Autowire. Aber ich bin nicht in der Lage, herauszufinden, wie man den Spring-Kontext vor der Web-Service-Klasse lädt. – Raghavendra

+0

Sie können den Spring-Listener vor dem Jax-WS laden. Sie haben eine XML- oder Java-Konfiguration? Welchen Server benutzen Sie? –

Antwort

0

Endlich kann ich das Problem lösen. Es gab wenige Probleme in meinem vorherigen Code.

  1. Keine Abhängigkeit für Spring und Jax WS Integration.
  2. Hörer für Ws in web.xml
  3. die Webservice-URL in applicationContext.xml

Für erstes Problem der Konfiguration habe ich die folgenden Abhängigkeiten

hinzugefügt
<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> 

Für zweite, ich habe hinzugefügt unter Linien in 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> 

Und dann endlich, ich habe hinzugefügt t Die verbindliche URL in applicationContext.xml

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

Für mich war dies das Problem. Aber es kann für andere variieren.

+0

Schön. Danke, dass du deine Lösung geteilt hast :) –

+0

Ja. Kein Problem. – Raghavendra

Verwandte Themen