【发布时间】:2017-11-08 01:53:04
【问题描述】:
我使用 maven wsimport 和 Java 1.7 生成了 SOAP 客户端代码。 WSDL 是客户提供的,我相信它是一个支持 .NET 的 SOAP 服务器。
调用服务后,我不断收到如下错误:
服务器发送 HTTP 状态码 415:无法处理消息 因为内容类型'application/soap+xml;字符集=utf-8;不是 预期类型'text/xml; charset=utf-8'。
我正在尝试通过自定义处理程序修改 SOAPMessage 类中的 MimeHeader(并且我确实将处理程序正确地注册到链中):
MimeHeaders mimeHeaders = msg.getMimeHeaders();
mimeHeaders.removeAllHeaders();
mimeHeaders.removeHeader("Content-Type");
mimeHeaders.addHeader(HttpHeaders.CONTENT_TYPE, "text/xml; charset=utf-8");
上面的代码似乎没有改变 mimiHeaders 中的任何内容,矢量对象似乎是不可变的......
然后我手动创建了 SOAP 消息
MessageFactory newInstance = MessageFactory.newInstance(SOAPConstants.SOAP_1_1_PROTOCOL);
MimeHeaders he = new MimeHeaders();
he.addHeader("Content-Type", "text/xml; charset=utf-8");
String ss = "<x:Envelope>xxxxx</x:Envelope>";
InputStream in = new ByteArrayInputStream(ss.getBytes(StandardCharsets.UTF_8));
SOAPMessage createMessage = newInstance.createMessage(he, in);
createMessage.writeTo(System.out);
context.setMessage(createMessage);
msg.saveChanges();
这次 SOAPMessage 本身的 mimeHeader 和 Content-Type 都设置为 文本/xml;字符集=utf-8
但是服务器仍然出现同样的错误 415 application/soap+xml is not expected......
我知道服务器似乎遵循 SOAP 1.1,这就是为什么它需要 text/xml...但是当我创建工厂时,我明确地将协议指定为 1.1 并手动设置 mimeHeader。我真的很困惑
注意:使用 SOAPUI 或 PostMan 绝对没问题,只有在使用 wsimport 生成的 java 客户端时才会出现问题
【问题讨论】:
标签: java web-services wcf soap wsimport