我在使用spring-boot
实现SOAP Web服务时遇到问题。
我有课
@Endpoint
public class EndpointPortTypeImpl implements EndpointPortType {
@PayloadRoot(
namespace = "...",
localPart = "getReq")
@ResponsePayload
@Override
public GetResp getReq(@RequestPayload GetReq parameters) {
return new GetLinkedAcctResp();
}
}
从GetResp
生成类GetReq
,EndpointPortType
和接口wsdl
。
当我尝试访问此服务时,我得到了
java.lang.IllegalStateException: No adapter for endpoint [public com.mydomain.GetResp com.mydomain.EndpointPortTypeImpl.getReq(com.mydomain.GetReq)]: Is your endpoint annotated with @Endpoint, or does it implement a supported interface like MessageHandler or PayloadEndpoint?
at org.springframework.ws.server.MessageDispatcher.getEndpointAdapter(MessageDispatcher.java:302)
at org.springframework.ws.server.MessageDispatcher.dispatch(MessageDispatcher.java:235)
at org.springframework.ws.server.MessageDispatcher.receive(MessageDispatcher.java:176)
at org.springframework.ws.transport.support.WebServiceMessageReceiverObjectSupport.handleConnection(WebServiceMessageReceiverObjectSupport.java:89)
at org.springframework.ws.transport.http.WebServiceMessageReceiverHandlerAdapter.handle(WebServiceMessageReceiverHandlerAdapter.java:61)
at org.springframework.ws.transport.http.MessageDispatcherServlet.doService(MessageDispatcherServlet.java:293)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:661)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
这是因为XmlRootElementPayloadMethodProcessor
可以使用@XmlType
或@XmlRootElement
注释的类型处理参数,但返回值只能使用@XmlRootElement
进行注释。
我生成的GetResp
有@XmlType
注释,因此XmlRootElementPayloadMethodProcessor
不支持它。
由于显而易见的原因,我无法将@XmlRootElement
添加到GetResp
,我不想实现自己的MethodReturnValueHandler
。
如何配置spring-boot以使用没有@XmlRootElement
注释的返回值?