Reputation: 20544
I have problem with implementing SOAP Web service with spring-boot
.
I have class
@Endpoint
public class EndpointPortTypeImpl implements EndpointPortType {
@PayloadRoot(
namespace = "...",
localPart = "getReq")
@ResponsePayload
@Override
public GetResp getReq(@RequestPayload GetReq parameters) {
return new GetLinkedAcctResp();
}
}
Classes GetResp
, GetReq
and interface EndpointPortType
are generated from wsdl
.
When I try to access to this service I get
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)
It happens because XmlRootElementPayloadMethodProcessor
can process parameters with type annotated with @XmlType
or @XmlRootElement
, but return value should be annotated only with @XmlRootElement
.
My generated GetResp
have @XmlType
annotation so XmlRootElementPayloadMethodProcessor
does not support it.
For obvious reason I can't add @XmlRootElement
to GetResp
and I don't want to implement my own MethodReturnValueHandler
.
How to configure spring-boot to work with return values without @XmlRootElement
annotation?
Upvotes: 0
Views: 531