Java SOAP响应问题

nzkunb0c  于 2023-06-28  发布在  Java
关注(0)|答案(4)|浏览(160)

我从一个jax-ws java客户端调用一个web服务,当我收到一个响应时,我得到一个异常,说内容类型不受支持,
异常跟踪如下。

com.sun.xml.ws.server.UnsupportedMediaException: Unsupported Content-Type: application/soap+xml Supported ones are: [text/xml]
    at com.sun.xml.ws.encoding.StreamSOAPCodec.decode(StreamSOAPCodec.java:295)
    at com.sun.xml.ws.encoding.StreamSOAPCodec.decode(StreamSOAPCodec.java:129)
    at com.sun.xml.ws.encoding.SOAPBindingCodec.decode(SOAPBindingCodec.java:360)
    at com.sun.xml.ws.transport.http.client.HttpTransportPipe.process(HttpTransportPipe.java:187)
    at com.sun.xml.ws.transport.http.client.HttpTransportPipe.processRequest(HttpTransportPipe.java:94)
    at com.sun.xml.ws.transport.DeferredTransportPipe.processRequest(DeferredTransportPipe.java:116)
    at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:598)
    at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:557)
    at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:542)
    at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:439)
    at com.sun.xml.ws.client.Stub.process(Stub.java:222)
    at com.sun.xml.ws.client.sei.SEIStub.doProcess(SEIStub.java:135)
    at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:109)
    at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:89)
    at com.sun.xml.ws.client.sei.SEIStub.invoke(SEIStub.java:118)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)

我已经检查了SOAP请求中的头部,它显示可接受的内容类型是html/xml,text/jpg等。而不是application/XML+SOAP。
在使用SoapUI进行测试时,一切都很完美。
我们正在使用SOAP v1.1..但是(很明显)客户端使用的是SOAP 1.2。我们有没有办法解析响应

oyt4ldly

oyt4ldly1#

如果您使用Maven作为构建工具,请确保检查您Maven目标是否使用XSoap1.2作为协议。我们遇到了类似的问题,我们几个星期都没弄清楚。
希望这对你有帮助…

t40tm48m

t40tm48m2#

someone else中提取

The @BindingType annotation is only necessary as we're using SOAP v1.2.  
  If you forget this line and you've specified SOAP v1.2 in your WSDL you'll 
  receive a runtime exception about the wrong content-type header as follows:

  SEVERE: Unsupported Content-Type: application/soap+xml; 
  charset=UTF-8 Supported ones are: [text/xml]
  com.sun.xml.ws.server.UnsupportedMediaException: Unsupported Content-Type:  
  application/soap+xml; charset=UTF-8 Supported ones are: [text/xml]

也许您正在尝试使用错误的SOAP版本。
Glassfish也有一个SOAP 1.2 page来帮助。

t5zmwmid

t5zmwmid3#

您可以从sun-jaxws.xml中的端点定义中删除binding="http://java.sun.com/xml/ns/jaxws/2003/05/soap/bindings/HTTP/"

sq1bmfud

sq1bmfud4#

很抱歉重新提出这样一个老问题。我只是想添加一些关于为什么不可能(至少在理论上)接受其他MIME而不是使用SOAP v1.1服务器的text/xml的数据。
W3C上关于SOAP v1.1的文档(§ 6)指出
根据RFC 2376,当在HTTP消息中包含SOAP实体体时,HTTP应用程序必须使用“text/xml”媒体类型。
如果我们查看SOAP v1.2的最新文档(§ 1.3),我们会发现:
媒体类型“application/soap + xml”应该用于SOAP消息信息集的XML1.0序列化
我认为一个不错的尝试是添加一个实现SOAPv1.2的等效服务,然后逐渐切换到这个新服务。在绝大多数情况下,这种开关“只是工作”

相关问题