Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Soap 如何在不检查内容类型头的情况下进行jaxws解析响应_Soap_Jax Ws - Fatal编程技术网

Soap 如何在不检查内容类型头的情况下进行jaxws解析响应

Soap 如何在不检查内容类型头的情况下进行jaxws解析响应,soap,jax-ws,Soap,Jax Ws,我通过jax-ws客户机代码(从wsdl生成)调用soap-webservice。 但是服务发送“Content-Type:text/html”响应,而jax-ws实现需要“text/xml”类型。 Web服务人员不会更改响应标题 例外情况是: com.sun.xml.internal.ws.client.ClientTransportException:服务器 已发送HTTP状态代码200:OK at com.sun.xml.internal.ws.transport.http.client.

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

例外情况是:

com.sun.xml.internal.ws.client.ClientTransportException:服务器 已发送HTTP状态代码200:OK at 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实现。它还要求响应内容类型标头为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.identificationContentType(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忽略响应头并继续解析?

没有找到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");
        }
    });
Client-Client=ClientProxy.getClient(端口);
client.getInInterceptors().add(新的AbstractPhaseInterceptor(Phase.RECEIVE){
public void handleMessage(org.apache.cxf.message.message){
message.put(org.apache.cxf.message.message.CONTENT_TYPE,“text/xml”);
}
});

您运行的是哪种类型的应用服务器,版本是什么?例如websphere、glassfish、JBoss或Tomcat?带有嵌入式Tomcat的spring引导。我无法解析我在代码中调用的Web服务的响应,因为它返回了错误的soap内容类型:test/htmlWhats tomcat版本?您应该能够使用CXF拦截器或JAX-WS处理程序,尽管我知道这对于您的需求来说过于复杂,但如果您选择JAX-WS路线,可能是您唯一的选择,我有更多的经验,目前在项目中使用它!谢谢@JGlass。我检查了CXF。写下答案是什么让它起作用。谢谢你让它工作-很高兴我能帮你指出正确的方向!