【问题标题】:soap tags using JiBX使用 JiBX 的肥皂标签
【发布时间】:2011-06-23 16:21:09
【问题描述】:

我是一名网络服务开发人员。在我发送到不同 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 中实现这些东西。有什么办法吗?

谢谢。

【问题讨论】:

    标签: soap jibx


    【解决方案1】:

    您是否在 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

    【讨论】:

    • SOAPEnvelope#getBodyElements() 对我来说适用于其中一项服务。不是全部。我会看看。我需要看看如何在请求部分使用它。反应很好。
    猜你喜欢
    • 1970-01-01
    • 2017-01-01
    • 2010-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多