首页 文章

Java SOAP消息内容类型

提问于
浏览
4

我使用maven wsimport和Java 1.7生成了SOAP客户端代码 . WSDL是由客户提供的,我相信它是一个支持.NET的SOAP服务器 .

在调用该服务后,我不断收到如下错误:

服务器发送HTTP状态码415:无法处理消息因为内容类型'application / soap xml;字符集= UTF-8;不是预期的类型'text / xml;字符集= 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里面的任何东西,vector对象似乎是不可变的....

然后我手动创建了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都设置为text / xml;字符集= utf-8的

但服务器仍然通过相同的错误415 application / soap xml不期望......

我理解服务器似乎遵循SOAP 1.1这就是为什么它期望text / xml ...但是当我创建工厂时我明确地将协议指定为1.1并手动设置mimeHeader . 我真的很困惑

注意:使用SOAPUI或PostMan绝对没问题,只有在使用wsimport生成的java客户端时才会出现问题

1 回答

  • 0

    您应该首先尝试发现问题:在客户端或服务器上?因此,我建议您添加以下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/">...
    

    如果您确实看到Content-Type错误的正确值,毫无疑问:错误位于服务提供商一侧 .

相关问题