用 JAX-WS 和 MTOM/XOP 重写 "Content-Type" header 和 MIME 边界
Rewriting "Content-Type" header and MIME boundaries with JAX-WS and MTOM/XOP
我有一个需要遵守的规范,它在使用 MTOM/XOP:
提供和使用 Web 服务时提出了一些相当不寻常的要求(出于历史原因)
总而言之,Content-Type HTTP Header 必须像这样编码:
start-info 和动作必须编码为 Content-Type 的单独参数:
start-info="application/soap+xml";action="urn:ihe:iti:2007:RetrieveDocumentSet"
- 与此相反,MTOM/XOP 规范要求:
Content-Type: multipart/related;start="...";type="application/xop+xml";boundary="...";start-info="application/soap+xml;action=\"urn:ihe:iti:2007:RetrieveDocumentSet\""
- 所以 "action" 包含在 "start-info" 参数中并转义。
我们正在使用 JAX-WS 来提供和使用 Web 服务,我看不到更改 headers 和 MIME 边界以满足规范要求的有效解决方案。
这同样适用于随 Web 服务消息发送的 MIME 边界。
Java7 和 Java8 包含的 JAX-WS 实现似乎以不同方式处理此问题,即:Java7 按照我需要遵守的规范进行编码with, while Java8 根据 MTOM/XOP 规范进行。我无法返回 Java8,因为我正在使用的其他库需要 Java8
有没有办法修改 JAX-WS 的行为,或者在到达其他系统之前拦截和更改 headers / MIME 边界?
同时,我们找到了答案:可以在应用程序中使用自定义 TubeFactory
。然后,这可以 return 标准 HttpTransportPipe
和修改后的 Codec
实现,它修改了 getStaticContentType(Packet)
方法中的 Content-Type header。
我有一个需要遵守的规范,它在使用 MTOM/XOP:
提供和使用 Web 服务时提出了一些相当不寻常的要求(出于历史原因)总而言之,Content-Type HTTP Header 必须像这样编码:
start-info 和动作必须编码为 Content-Type 的单独参数:
start-info="application/soap+xml";action="urn:ihe:iti:2007:RetrieveDocumentSet"
- 与此相反,MTOM/XOP 规范要求:
Content-Type: multipart/related;start="...";type="application/xop+xml";boundary="...";start-info="application/soap+xml;action=\"urn:ihe:iti:2007:RetrieveDocumentSet\""
- 所以 "action" 包含在 "start-info" 参数中并转义。 我们正在使用 JAX-WS 来提供和使用 Web 服务,我看不到更改 headers 和 MIME 边界以满足规范要求的有效解决方案。
这同样适用于随 Web 服务消息发送的 MIME 边界。
Java7 和 Java8 包含的 JAX-WS 实现似乎以不同方式处理此问题,即:Java7 按照我需要遵守的规范进行编码with, while Java8 根据 MTOM/XOP 规范进行。我无法返回 Java8,因为我正在使用的其他库需要 Java8
有没有办法修改 JAX-WS 的行为,或者在到达其他系统之前拦截和更改 headers / MIME 边界?
同时,我们找到了答案:可以在应用程序中使用自定义 TubeFactory
。然后,这可以 return 标准 HttpTransportPipe
和修改后的 Codec
实现,它修改了 getStaticContentType(Packet)
方法中的 Content-Type header。