Exposing JAX-WS web service as spring bean

2019-07-14 17:26发布

问题:

Is this possible to somehow expose JAX-WS web service as spring bean? I need to set some objects into my implementation class, but I want to do this using spring.

回答1:

You need to use SpringBeanAutowiringSupport and Autowired annotation to inject the object from spring. Create an endpoint class which will work like real web service but calls to real implementation methods goes throught your web service interface which is injected from spring.

For e.g:

@WebService(targetNamespace = "http://my.ws/MyWs",
        portName = "MyWsService",
        serviceName = "MyWs",
        endpointInterface = "my.ws.MyWsService",
        wsdlLocation = "WEB-INF/wsdl/MyWs.wsdl")
public class MyWsEndpoint extends SpringBeanAutowiringSupport implements MyWsService {

    @Autowired
    private MyWsService proxy;

    public void myMethod() {
        proxy.myMethod();
    }

}

Your JAX-WS enpoint configuration should look like this:

<?xml version="1.0" encoding="UTF-8"?>
<endpoints xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime" version="2.0">
    <endpoint
            name="MyWsService"
            implementation="my.ws.MyWsEndpoint"
            url-pattern="/services/MyWsService"/>
</endpoints>

Define real implementation class in spring but remember that both: your endpoint class and implementation class must implement your web service interface.

<bean id="myWsImpl" class="my.ws.MyWsImpl"/>

And thats it, now you can use spring in your JAX-WS web service.



标签: spring jax-ws