首先,我还没有找到ebxml / ebms的任何通用开源实现,对我来说它有些奇怪或者我查找了错误的东西,但我还没有找到一些有用的东西。
当我在寻找ebxml / ebms时,我也找到了JAXM / SAAJ(JSR 67)。看起来这个实现永远不会结束,关于这个的所有链接都是指不再存在的sun主页。从sun主页,你被重定向到oracle主页,在那里我找不到关于JAXM或JSR 67的东西。
这引出了我的问题,如何在apache camel中实现ebxml服务?
答案 0 :(得分:1)
模板示例:
<?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。
.... to("velocity:file:///{{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 request: ${body}"). to("jetty:http://{{app-server.host}}:{{app-server.http.port}}/service/"). log(LoggingLevel.INFO, "HTTP response code: ${in.header.CamelHttpResponseCode}") //log(LoggingLevel.INFO, "WS response: ${body}") .setHeader("callRC").xpath("//ser:callRC/text()", String.class, XmlNamespaces.NAMESPACES.getNamespace()) ....
答案 1 :(得分:0)
几年太晚了,但也许对其他人有价值:)
有一个支持ebMS 2.0规范的开源实现。 此ebMS适配器可以部署为Mule ESB插件或常规WAR应用程序。
https://sourceforge.net/projects/muleebmsadapter/
尽管是在sourceforge上,但它仍在积极开发中。