使用Spring依赖注入部署CXF服务端点

时间:2012-05-24 14:19:17

标签: java web-services spring soap cxf

我正在尝试将spring bean注入使用@WebService和@SOAPBinding注释注释的类中。

@WebService(targetNamespace = JAXWSMessageHandler.MY_URL)
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
public class JAXWSMessageHandler {

    private StorageManager bufferContainer;

    public void setBufferContainer(StorageManager storageManager){
        this.bufferContainer = storageManager;

    }

我得到以下异常:

Service class soap.service.JAXWSMessageHandler method setBufferContainer part {http://myurl/myproject/v1}setBufferContainer cannot be mapped to schema. Check for use of a JAX-WS-specific type without the JAX-WS service factory bean.

预计spring使用的操作将由CXF在WSDL中定义。我认为我可以使用singleton mediator类来破解它,它允许从WebService类到我的业务类的通信,但是,这对我来说听起来不太好,我想要正确地做到这一点。任何提示如何做到这一点?

2 个答案:

答案 0 :(得分:1)

JAX-WS将带注释的类上的方法签名解释为Web服务操作。我的猜测是,如果你使用构造函数注入(而不是setter注入),问题就会消失。

答案 1 :(得分:1)

我认为我有更好的解决方案:

据推测,您使用@WebMethod来注释要在Web服务上公开的方法?

您也可以在setter方法中添加@WebMethod注释,并将属性'exclude'设置为true。这意味着不会在wsdl中定义此方法。

@WebService(targetNamespace = JAXWSMessageHandler.MY_URL)
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
public class JAXWSMessageHandler {

private StorageManager bufferContainer;

@WebMethod(exclude=true)
public void setBufferContainer(StorageManager storageManager){
    this.bufferContainer = storageManager;

}