使用JAX-WS和MTOM / XOP重写“Content-Type”标头和MIME边界

时间:2015-07-08 09:15:45

标签: jax-ws content-type mime mtom xop

我有一个我需要遵守的规范,当使用MTOM / XOP提供和使用Web服务时,这会产生一些非常不寻常的需求(出于历史原因):

总而言之,Content-Type HTTP Header必须像这样编码: start-info和action必须编码为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服务,我看不到改变标头和MIME边界以满足规范要求的可行解决方案。

这同样适用于使用Web服务消息发送的MIME边界。

包含Java7和Java8的JAX-WS实现似乎处理不同,即:Java7按照我需要遵守的规范进行编码,而Java8根据MTOM / XOP规范进行编码。我不能回到Java8,因为我使用的其他库需要Java8

有没有办法修改JAX-WS的行为,或者在到达其他系统之前拦截和更改标头/ MIME边界?

1 个答案:

答案 0 :(得分:2)

同时,我们找到了答案:可以在应用程序中使用自定义TubeFactory。然后,这可以返回带有修改后的HttpTransportPipe实现的标准Codec,该实现会修改getStaticContentType(Packet)方法中的Content-Type标头。