Search code examples
javaspringsoapjax-ws

Not able to access WSDL end point


I am new to SOAP Web Services. I am working on some project which uses Spring framework for dependency injection and JAX WS for creating the end points and performing some operation.

And I am using dependency injection in the class where I am creating end point. When I am running the application, I am getting below error.

This is the 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)

And this is where I am creating end point.

@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

    }

I do have service class with same qualifier name. And my web.xml contains

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

And when I am trying to access the url "http://localhost:8080/Project_WSDL/services/LookUpService?wsdl", I am getting error.

Please help me how can I resolve the issue?


Solution

  • Finally, I am able to resolve the issue. There were few problems in my previous code.

    1. No dependency for Spring and Jax ws integration.
    2. Listeners for Ws in web.xml
    3. configuring the webservice url in applicationContext.xml

    For first problem, I have added the below dependencies

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

    For second one, I have added below lines 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>
    

    And then finally, I have added the binding url in applicationContext.xml

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

    For me, this was the issue. But it may vary for others.