【问题标题】:SOAP unsupported media exception text/plain Supported ones are: [text/xml]SOAP 不支持的媒体异常 text/plain 支持的有:[text/xml]
【发布时间】:2021-02-28 02:59:26
【问题描述】:

在我们的应用程序中,我们有以下代码行向服务发出 SOAP 请求

@WebResult(
      name = "GetRequestResponse",
      targetNamespace = "urn://x-artefacts-smev-gov-ru/services/message-exchange/types/1.1",
      partName = "parameters"
   )
   GetRequestResponse getRequest(@WebParam(name = "GetRequestRequest",targetNamespace = "urn://x-artefacts-smev-gov-ru/services/message-exchange/types/1.1",partName = "parameters") GetRequestRequest var1) throws InvalidContentException, SMEVFailureException, SenderIsNotRegisteredException, SignatureVerificationFaultException, UnknownMessageTypeException;

在服务将其响应内容类型从 text/xml 更改为 text/plain 之前,它一直有效

它仍然返回有效的 XML,但只是在 text/plain

我不想彻底修改代码,因为它是一个非常古老且过时的遗留库,专门用于向服务发出请求(另外,我不确定是否有可以替代它的东西)

总而言之,我们得到以下异常:

ru.voskhod.smev.message_exchange_service_client.WebServiceClientException: com.sun.xml.internal.ws.server.UnsupportedMediaException: Unsupported Content-Type: text/plain;charset=utf-8 Supported ones are: [text/xml]
  at ru.voskhod.smev.message_exchange_service_client.MessageExchangeEndpoint.getRequest(MessageExchangeEndpoint.java:457)

有没有办法让它接受text/plain 并像对待text/xml 一样对待它?

【问题讨论】:

    标签: jakarta-ee jax-ws content-type


    【解决方案1】:

    更改调用 http 请求标头。 'content-type' 标头应该是 'text/xml'。

    【讨论】:

      【解决方案2】:

      您可以使用中间反向代理(例如,在客户端运行的本地)在Content-Type 响应中text/plain 覆盖 text/xml标头,然后与该代理通信,而不是与服务器通信。

      例如您可以将httpdProxyPass/ProxyPassReverse 指令一起使用(来自mod_proxy 模块) 结合Header set Content-Type "text/plain"(来自mod_headers模块)。

      如果客户端无法配置为调用新域(例如 localhost),您可能需要添加 hosts 文件条目以将远程服务器的域解析为反向代理的绑定地址。但是反向代理仍然需要能够对远程服务器的原始地址进行 dns 解析,因此要使其工作,至少两者之一(客户端或反向代理)可能需要containerized

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-07-12
        • 1970-01-01
        • 1970-01-01
        • 2018-10-05
        • 2021-08-05
        • 2023-02-15
        • 2015-03-30
        • 1970-01-01
        相关资源
        最近更新 更多