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

Joe*_*e D 5 content-type jax-ws jakarta-ee

在我们的应用程序中,我们有以下代码行向服务发出 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;
Run Code Online (Sandbox Code Playgroud)

它曾经一直有效,直到服务将其响应内容类型从 更改text/xmltext/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)
Run Code Online (Sandbox Code Playgroud)

有没有办法让它接受text/plain并以同样的方式对待它text/xml

Jan*_*nou 2

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

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

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