- 例如,您可以使用速度模板手动创建 ebxml SOAP 消息。
模板示例:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
xmlns:ser="http://test/Service">
<soap:Header/>
<soap:Body>
<ser:insertRequest>
<ser:routingHeader>
<ser:operationType>${headers.OPERATION_TYPE}</ser:operationType>
<ser:messageId>${exchange.properties.messageId}</ser:messageId>
<ser:sourceId>${exchange.properties.sourceId}</ser:sourceId>
<ser:destinationId>${exchange.properties.destinationId}</ser:destinationId>
</ser:routingHeader>
<ser:datagram>
${body}
</ser:datagram>
</ser:insertRequest>
</soap:Body>
</soap:Envelope>
您可以使用http、http4或jetty组件通过 apache camel 发送这样的 ebXml SOAP 消息。
to("jetty:http://{{server.host}}:{{server.http.port}}/service/").
log(LoggingLevel.INFO, "HTTP response code: ${in.header.CamelHttpResponseCode}")
在您只需要手动解析 SOAP 响应(可能是 XPath)之后,或者您可以通过 XSLT 转换响应。也许您可以使用 beanio、xstream 或 jaxb 等将 XML 转换为 POJO。
……
到(“速度:文件:///{{karaf.home}}/etc/vm/ws-message-oc.vm?contentCache=true”)。
setProperty(Exchange.CONTENT_TYPE).constant("application/soap+xml")。
setProperty(Exchange.CONTENT_ENCODING).constant("gzip")。
setProperty(Exchange.CHARSET_NAME).constant("utf-8")。
//log(LoggingLevel.INFO, "WS 请求:${body}")。
到(“码头:http://{{app-server.host}}:{{app-server.http.port}}/service/”)。
日志(LoggingLevel.INFO,“HTTP 响应代码:${in.header.CamelHttpResponseCode}”)
//log(LoggingLevel.INFO, "WS 响应: ${body}")
.setHeader("callRC").xpath("//ser:callRC/text()", String.class, XmlNamespaces.NAMESPACES.getNamespace())
……