如何访问camel-cxf端点

时间:2015-06-17 17:13:14

标签: soap cxf

我有基于CXF的Jax-WS Web服务,并尝试阅读Payload of request。 我有org.apache.camel.component.cxf.CxfEndpoint我的Dataformat我设置为Payload。

我正在使用POST方法调用此服务,并使用body作为Soap信封,如下所示。

   <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:loc="http://www.csapi.org/schema/parlayx/terminal_location/v2_0/local">
   <soapenv:Header/>
   <soapenv:Body>
      <loc:getLocation>
         <loc:address>tel:+948420161525</loc:address>
         <loc:requestedAccuracy>500</loc:requestedAccuracy>
         <loc:acceptableAccuracy>500</loc:acceptableAccuracy>
      </loc:getLocation>
   </soapenv:Body>
</soapenv:Envelope>

这里的body是ParlayX协议的GetLocation对象的表示。

在我的课上,我收到了CxfPayload对象。我想从Payload正文中检索地址和requestedAccuracy。 我试图从CxfPayload的getBodySources()和getBody()方法中提取所需的数据。但无法成功。我没有在对象中看到所需的数据。

我提到了link的一些例子,但也不能成功。

知道如何提取有效载荷的身体数据吗?

1 个答案:

答案 0 :(得分:0)

有几种方法可以做到这一点。例如,您可以将其解组为POJO并使用Java方法访问它。或者,如果您只想从有效负载中获取一些值,则可以使用XPath:

<setHeader headerName="address">
  <xpath>//loc:address/text()</xpath>
</setHeader>

在地址标题中设置地址。

编辑: 要在Java中使用有效负载上的xpath,这样的事情应该可以解决问题:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder;
builder = factory.newDocumentBuilder();
Document document = builder.parse(new InputSource(new StringReader(BODY_IN_STRING)));
XPath xPath = XPathFactory.newInstance().newXPath();

String address = xPath.evaluate("//loc:address/text()", document));