26.14. 如何在 PAYLOAD 模式中获取和设置 SOAP 标头
我们已显示了如何在 PAYLOAD 模式中以 CxfPayload 对象的形式访问 SOAP 消息,部分将如何处理 PAYLOAD 数据格式的 camel-cxf 端点 的消息。
获取 CxfPayload 对象后,您可以调用返回 DOM Elements (SOAP 标头)的 CxfPayload.getHeaders ()方法。
有关示例,请参阅 CxfPayLoadSoapHeaderTest :
from(getRouterEndpointURI()).process(new Processor() {
@SuppressWarnings("unchecked")
public void process(Exchange exchange) throws Exception {
CxfPayload<SoapHeader> payload = exchange.getIn().getBody(CxfPayload.class);
List<Source> elements = payload.getBodySources();
assertNotNull(elements, "We should get the elements here");
assertEquals(1, elements.size(), "Get the wrong elements size");
Element el = new XmlConverter().toDOMElement(elements.get(0));
elements.set(0, new DOMSource(el));
assertEquals("http://camel.apache.org/pizza/types",
el.getNamespaceURI(), "Get the wrong namespace URI");
List<SoapHeader> headers = payload.getHeaders();
assertNotNull(headers, "We should get the headers here");
assertEquals(1, headers.size(), "Get the wrong headers size");
assertEquals("http://camel.apache.org/pizza/types",
((Element) (headers.get(0).getObject())).getNamespaceURI(), "Get the wrong namespace URI");
// alternatively you can also get the SOAP header via the camel header:
headers = exchange.getIn().getHeader(Header.HEADER_LIST, List.class);
assertNotNull(headers, "We should get the headers here");
assertEquals(1, headers.size(), "Get the wrong headers size");
assertEquals("http://camel.apache.org/pizza/types",
((Element) (headers.get(0).getObject())).getNamespaceURI(), "Get the wrong namespace URI");
}
})
.to(getServiceEndpointURI());
您还可以使用与子章节相同的方法"如何在 POJO 模式中获取和设置 SOAP 标头,以设置或获取 SOAP 标头。因此,您可以使用标头 "org.apache.cxf.headers.Header.list" 获取和设置 SOAP 标头列表。这也意味着,如果您有一个路由,它从一个 Camel-cxf 端点转发到另一个(SOAP Client