Java SOAP消息内容类型



我使用Maven Wsimport,Java 1.7生成了SOAP客户端侧代码。WSDL是由客户提供的,我相信它是.NET支持的SOAP服务器。

致电服务后,我一直在遇到一个错误:

服务器发送的HTTP状态代码415:无法处理消息 因为内容类型'应用程序/soap xml;charset = utf-8;不是 预期类型'text/xml;charset = utf-8'。

我试图通过自定义的处理程序修改肥皂水中的Mimeheader(我确实正确地将处理程序注册到链条上(:

MimeHeaders mimeHeaders = msg.getMimeHeaders();
mimeHeaders.removeAllHeaders();
mimeHeaders.removeHeader("Content-Type");
mimeHeaders.addHeader(HttpHeaders.CONTENT_TYPE, "text/xml; charset=utf-8");

上面的代码似乎不会改变模拟物内部的任何内容,矢量对象似乎是不变的....

然后我手动创建了肥皂消息

  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();

这次肥皂上的mimeheader和content-type本身都设置为text/xml;charset = utf-8

但是,服务器仍然存在相同的错误415应用程序/soap xml ......

我了解服务器似乎遵循SOAP 1.1这就是为什么它的期望文本/XML ...但是当我创建工厂时,我将协议清楚地指定为1.1并手动设置Mimeheader。我真的很困惑

注意:使用SOAPUI或POSTMAN绝对可以,此问题仅在使用WSIMPORT生成的Java客户端

时发生。

您应该首先尝试发现问题:在客户端还是在服务器上?因此,我建议您添加以下JVM参数,以便丢弃HTTP请求详细信息。

-Dcom.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.dump=true

使用它,然后您应该在控制台中看到类似:

的东西
---[HTTP request - http://localhost:8780/soap/MyService]---
Accept: text/xml
Authorization: Basic *****************==
Content-Type: text/xml; charset=utf-8
SOAPAction: "xxxxx"
User-Agent: JAX-WS RI 2.2.9-b130926.1035 svn-revision#5f6196f2b90e9460065a4c2f4e30e065b245e51e
<?xml version="1.0" ?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">...

如果您确实看到了内容类型错误的正确值,则毫无疑问:该错误位于服务提供商的侧面。

相关内容

  • 没有找到相关文章

最新更新