使用JiBX的肥皂标签

时间:2011-06-23 16:21:10

标签: soap jibx

我是一名网络服务开发人员。在我发送给不同的Web服务的所有XML请求中,我需要添加soap信封,soap标头,soap body标签。在回应中我需要忽略那些并解析肥皂体的孩子。例如:

请求:

    <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。架构显然没有定义这些soap标签。所以我目前正在做的是将请求作为字符串,并在适当的位置添加这些肥皂标签并发送请求。

作为响应,使用String操作删除soap标签,并使用JiBX解析剩余的消息。

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

感谢。

1 个答案:

答案 0 :(得分: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