在将Jax-WS生成的SOAP消息发送到服务器之前,是否可以将其作为字符串操作?我想在发送和修改一些标签之前截取消息。将soap消息作为字符串操纵
我想这样做,因为我需要发送一个SOAP请求到服务器。这个请求的标签有很多xml文档作为其内容。对于每个文档,我需要在某些标记中重新声明命名空间(Jax-WS智能地仅声明一次)。我不能使用任何前缀。我也需要签署xml。如果我可以将消息作为一个字符串来处理,所有这些问题将更容易解决。
我已经看到类似的轴,但我没有找到如何用Jax-WS做到这一点。
谢谢。
更新:我已经尝试使用处理程序(SOAP和逻辑处理程序)。我的问题是,即使在使用处理程序修改它之后,Jax-WS也会更改该消息。我的SOAP消息的身体需要看起来像这样:
<soap12:Body>
<cteDadosMsg xmlns="http://www.portalfiscal.inf.br/cte/wsdl/CteRecepcao">
<enviCTe xmlns="http://www.portalfiscal.inf.br/cte" versao="1.04">
<idLote>1</idLote>
<CTe xmlns="http://www.portalfiscal.inf.br/cte">
</CTe>
<CTe xmlns="http://www.portalfiscal.inf.br/cte">
</CTe>
</enviCTe>
</cteDadosMsg>
</soap12:Body>
看我的CTE标签需要重复命名空间声明(由enviCTe使用的相同)。我试图执行以下步骤:
1)使用Jaxb创建包含环境的文档。
2)将其转换为字符串并调整CTe标记的名称空间声明(使用String.replace)。
3)将xml字符串添加到cteDadosMsg。 Jax-WS转义字符(例如替换<为<
)。 Web服务不理解具有转义字符的xml。
4)增加了一个LogicalHandler来消除负载(替换<
,<等)。
5)完成此操作后,Jax-WS再次调整名称空间声明,并且CTe标记的xmlns属性消失。 :P这是我的问题。 Jax-WS甚至在用处理程序修改消息后“修复”该消息。
除了将Jaxb生成的xml作为字符串添加外,我还尝试将其添加为Document。我没有转义的问题,但我仍然无法为每个CTe标签重复命名空间声明。 当我解决这个问题时,我仍然必须签署一些xml标签。所以我真的想在发送消息之前拦截消息并将其修改为字符串。 我错过了什么吗?
嗨Jayamohan,谢谢你的答案。我试图使用处理程序,但它不起作用。我更新了我原来的问题,解释了原因...... – 2013-02-12 13:04:21