Apache camel 使用ApacheCamel实现ebXml/ebMs的最佳方法

Apache camel 使用ApacheCamel实现ebXml/ebMs的最佳方法,apache-camel,ebxml,Apache Camel,Ebxml,首先,我还没有找到任何适用于ebxml/ebms的通用开源实现,对我来说这有点奇怪,或者可能我查错了东西,但我在这里没有找到有用的东西 在寻找ebxml/ebms时,我还找到了JAXM/SAAJ(jsr67)。看起来这个实现从来没有结束过,所有与此相关的链接都指向了不再存在的sun主页。从sun主页,您可以重定向到oracle主页,在那里我找不到关于JAXM或JSR67的内容 这就引出了我的问题,如何在ApacheCamel中实现ebxml服务 我应该“手动”创建ebxmlsoap消息,还是缺少

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

在寻找ebxml/ebms时,我还找到了JAXM/SAAJ(jsr67)。看起来这个实现从来没有结束过,所有与此相关的链接都指向了不再存在的sun主页。从sun主页,您可以重定向到oracle主页,在那里我找不到关于JAXM或JSR67的内容

这就引出了我的问题,如何在ApacheCamel中实现ebxml服务

  • 我应该“手动”创建ebxmlsoap消息,还是缺少一些lib来为我生成这样的ebxml消息`
  • 如何通过apachecamel发送这样的ebxmlsoap消息?Cxf需要wsdl,对于我们要调用的服务,不存在wsdl
  • 如何接收这样的ebXml消息?Cxf如上所述,可能与netty http或jetty这样的http消费者一起使用
  • 例如,您可以使用velocity模板手动创建ebxml SOAP消息 模板示例:

    
    ${headers.OPERATION_TYPE}
    ${exchange.properties.messageId}
    ${exchange.properties.sourceId}
    ${exchange.properties.destinationId}
    ${body}
    
  • 您可以使用httphttp4jetty组件通过apachecamel发送这样的ebxmlsoap消息

            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

  • .... 到(“velocity:file://{{karaf.home}}/etc/vm/ws message oc.vm?contentCache=true”)。 setProperty(Exchange.CONTENT_TYPE).constant(“应用程序/soap+xml”)。 setProperty(Exchange.CONTENT\u ENCODING).constant(“gzip”)。 setProperty(Exchange.CHARSET_NAME).constant(“utf-8”)。 //日志(LoggingLevel.INFO,“WS-request:${body}”)。 至(“jetty:http://{{app server.host}}:{{{app server.http.port}}}}/service/”)。 日志(LoggingLevel.INFO,“HTTP响应代码:${in.header.CamelHttpResponseCode}”) //日志(LoggingLevel.INFO,“WS响应:${body}”) .setHeader(“callRC”).xpath(//ser:callRC/text()”,String.class,XmlNamespaces.NAMESPACES.getNamespace()) ....
    晚了几年,但对其他人来说可能很有价值:)

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


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

    看起来有很多手工工作要做。我认为ebXml应该成为交换业务文档的全球标准。我只是想知道为什么我找不到UTIL/实现或其他更容易实现的东西。ebXML是SOAP和WS-*的非标准竞争对手。当SOAP获胜时,原始的ebXML规范被修改为使用SOAP附件作为其头。然而,到那时,WS-*已经开始工作,SOAP附件已经被弃用。全球标准是SOAP和WS-*规范 .... 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()) ....