gpt4 book ai didi

java - 将 SOAP 消息作为字符串进行操作

转载 作者:行者123 更新时间:2023-11-30 04:30:11 25 4
gpt4 key购买 nike

是否可以在将 Jax-WS 生成的 SOAP 消息发送到服务器之前将其作为字符串进行操作?我想在消息发送之前拦截消息并修改一些标签。

我想这样做是因为我需要向服务器发送 SOAP 请求。该请求的一个标签有很多xml文档作为其内容。对于每个文档,我需要在某些标签中重新声明 namespace (Jax-WS 智能地仅声明一次)。我无法使用任何前缀。我也需要签署 xml。如果我可以将消息作为字符串进行操作,那么所有这些问题都会更容易解决。

我见过与 axis 类似的东西,但我不知道如何使用 Jax-WS 来做到这一点。

谢谢。

更新:我已经尝试使用处理程序(SOAP 和逻辑处理程序)。我的问题是,即使我使用处理程序修改消息,Jax-WS 也会更改该消息。我的肥皂消息的正文需要如下所示:

<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 创建包含 eniCTe 的文档。

2) 将其转换为字符串并调整 CTe 标记的命名空间声明(使用 String.replace)。

3) 将 xml 字符串添加到 cteDadosMsg 中。 Jax-WS 对字符进行转义(例如,将 < 替换为 <)。 Web 服务无法理解带有转义字符的 xml。

4) 添加了一个 LogicalHandler 用于对有效负载进行转义(将 < 替换为 < 等)。

5) 执行此操作后,Jax-WS 再次调整 namespace 声明,并且我的 CTe 标记的 xmlns 属性消失。 :P 那是我的问题。即使在使用处理程序修改消息之后,Jax-WS 也会“修复”该消息。

我没有将 Jaxb 生成的 xml 添加为字符串,而是尝试将其添加为文档。我没有转义问题,但我仍然无法为每个 CTe 标记重复命名空间声明。当我解决这个问题时,我仍然需要签署 xml 的一些标签。所以我真的很想在发送消息之前拦截消息并将其修改为字符串。我错过了什么吗?

最佳答案

您可以使用处理程序执行相同的操作。请参阅here了解更多详情。

关于java - 将 SOAP 消息作为字符串进行操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14824033/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com