SOAP 不支持的媒体异常 text/plain 支持的是:[text/xml]

SOAP unsupported media exception text/plain Supported ones are: [text/xml]

在我们的应用程序中,我们有以下代码行向服务发出 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

之前,它一直有效

它仍然 returns 有效 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 一样对待它?

您可以使用中间反向代理(例如,客户端运行的本地)用[=]覆盖 text/xml 11=] 在 Content-Type 响应 header 上,然后与该代理对话而不是与服务器对话。

例如你可以使用 httpd with with ProxyPass/ProxyPassReverse directives (from mod_proxy 模块) 结合 Header set Content-Type "text/plain"(来自 mod_headers 模块)。

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

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