我正在尝试将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类到我的业务类的通信,但是,这对我来说听起来不太好,我想要正确地做到这一点。任何提示如何做到这一点?
答案 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;
}