0

我是一名网络服务开发人员。在我发送到不同 Web 服务的所有 XML 请求中,我需要添加肥皂信封、肥皂标题、肥皂正文标签。在响应中,我需要忽略这些并仅解析肥皂体的孩子。例子:

要求:

    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v1="http://schemas.abc.com/v1.0">
   <soapenv:Header/>
   <soapenv:Body>
      <ns:webservice-abc-Request xmlns:ns="http://schemas.abc.com/v1.0">

回复:

    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <SOAP-ENV:Header/>
   <SOAP-ENV:Body>
      <ns:webservice-abc-Response xmlns:ns="http://schemas.abc.com/v1.0">

我在请求和响应处理中都使用 JiBX。架构显然没有定义这些肥皂标签。所以我目前正在做的是将请求作为字符串并将这些肥皂标签添加到适当的位置并发送请求。

作为响应,使用字符串操作删除肥皂标签并使用 JiBX 解析消息的其余部分。

我想知道一种更好的方法并摆脱这些字符串操作。我想纯粹在 JiBX 中实现这些东西。有办法吗?

谢谢。

4

1 回答 1

0

您在 JiBX 绑定中使用了 flexible='true' 吗?这将阻止 JiBX 尝试解析 SOAP 信封,您只需为 SOAP 主体定义一个映射。

<binding>
   <mapping name="Envelope" ns="http://schemas.xmlsoap.org/soap/envelope/" flexible="true" ordered="false">
      <structure name="Body" ns="http://schemas.xmlsoap.org/soap/envelope/">
           ... your envelope binding here! ...
      </structure>
   </mapping>
</binding>

其次,您使用的是 Axis2 等 Web 服务框架吗?Axis2 可以自动删除这些标头并简单地将 SOAP 主体返回给您(作为可以轻松转换为字符串的 OMElement),然后您就可以使用 JiBX。

http://axis.apache.org/axis2/java/core/api/org/apache/axis2/client/ServiceClient.html

于 2011-06-28T17:43:37.967 回答