我通过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忽略响应头并继续解析?
答案 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");
}
});