talex
talex

Reputation: 20544

"No adapter for endpoint" with class marked @XmlType as return type

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

Answers (0)

Related Questions