如何在不检查Content-Type标头

时间:2018-06-13 16:18:31

标签: soap jax-ws

我通过jax ws客户端代码(从wsdl生成)调用soap webservice。 但是服务使用“Content-Type:text / html”发送响应,其中jax-ws实现需要“text / xml”类型。 webservice folk不会更改响应标题。

例外是:

  

com.sun.xml.internal.ws.client.ClientTransportException:服务器   发送HTTP状态码200:好的   com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.createResponsePacket(HttpTransportPipe.java:266)   〜[?:1.8.0_171] at   com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.process(HttpTransportPipe.java:217)   〜[?:1.8.0_171] at   com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.processRequest(HttpTransportPipe.java:130)   〜[?:1.8.0_171] at   com.sun.xml.internal.ws.transport.DeferredTransportPipe.processRequest(DeferredTransportPipe.java:124)   〜[:?1.8.0_171]

还尝试了Saaj Implementation。它还要求响应Content-Type标头为text / xml。 这是saaj的例外:

  

引起:com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl:   内容类型无效:text / html。这是一个错误消息而不是   SOAP响应?在   org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)     在   com.sun.xml.internal.messaging.saaj.soap.MessageImpl.identifyContentType(MessageImpl.java:655)   〜[?:1.8.0_171] at   org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:803)     在   org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)     在   org.apache.coyote.AbstractProtocol $ ConnectionHandler.process(AbstractProtocol.java:790)     在   org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.doRun(NioEndpoint.java:1459)     在   org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)

有没有办法让jaxws忽略响应头并继续解析?

1 个答案:

答案 0 :(得分:1)

没有找到jax-ws的解决方案,但感谢@JGlass用apache cfx找到了一个非常简单的解决方案。非常灵活地实现jax-ws。爱上它。 以下是使其工作的简单代码:

    Client client = ClientProxy.getClient(port);
    client.getInInterceptors().add(new AbstractPhaseInterceptor<org.apache.cxf.message.Message>(Phase.RECEIVE) {
        public void handleMessage(org.apache.cxf.message.Message message) {
            message.put(org.apache.cxf.message.Message.CONTENT_TYPE, "text/xml");
        }
    });