2

首先,我还没有找到任何针对 ebxml/ebms 的通用开源实现,对我来说这有点奇怪,或者我可能查找了错误的东西,但我没有在这里找到有用的东西。

当我在寻找 ebxml/ebms 时,我还找到了 JAXM/SAAJ(JSR 67)。看起来这个实现从未结束,所有与此相关的链接都指向不再存在的 sun 主页。从 sun 主页,您会被重定向到 oracle 主页,但在那里我找不到有关 JAXM 或 JSR 67 的信息。

这引出了我的问题,如何在 apache camel 中实现 ebxml 服务?

  1. 我应该“手动”创建 ebxml SOAP 消息,还是有一些我错过的库正在为我生成这样的 ebxml 消息?`
  2. 如何通过 apache camel 发送这样的 ebXml SOAP 消息?Cxf 需要一个 wsdl,对于我们要调用的服务,不存在 wsdl。
  3. 如何接收这样的 ebXml 消息?Cxf 见上文,可能是使用像 netty-http 或 jetty 这样的 http 消费者?
4

2 回答 2

2

几年太晚了,但可能对其他人有价值:)

有一个支持 ebMS 2.0 规范的开源实现。此 ebMS 适配器可以部署为 Mule ESB 插件或常规 WAR 应用程序。

https://sourceforge.net/projects/muleebmsadapter/

尽管在 sourceforge 上,它仍在积极开发中。

于 2018-05-29T09:53:52.733 回答
1
  1. 例如,您可以使用速度模板手动创建 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>
  1. 您可以使用httphttp4jetty组件通过 apache camel 发送这样的 ebXml SOAP 消息。

            to("jetty:http://{{server.host}}:{{server.http.port}}/service/").
            log(LoggingLevel.INFO, "HTTP response code: ${in.header.CamelHttpResponseCode}")
    
  2. 在您只需要手动解析 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())
    ……

于 2015-11-04T13:18:32.080 回答