2

まず第一に、私は ebxml/ebms の一般的なオープン ソース実装を見つけていません。私にとっては、それはどういうわけか奇妙であるか、間違ったものを調べたのかもしれませんが、ここで何か非常に役立つものは見つかりませんでした。

ebxml/ebms を探していたときに、JAXM/SAAJ(JSR 67) も見つけました。この実装は決して終わらないようです。これに関するすべてのリンクは、もはや存在しない太陽のホームページを参照しています。Sun のホームページから Oracle のホームページにリダイレクトされますが、JAXM または JSR 67 に関する情報が見つかりません。

これは私の質問につながります.apache camelでebxmlサービスを実装する方法は?

  1. ebxml SOAP メッセージを「手動で」作成する必要がありますか?それとも、そのような ebxml メッセージを生成している、見落としているライブラリがありますか?`
  2. このような ebXml SOAP メッセージを apache camel 経由で送信するにはどうすればよいですか? Cxf には wsdl が必要です。呼び出したいサービスには wsdl が存在しません。
  3. このような ebXml メッセージを受信するにはどうすればよいですか? 上記の Cxf を参照してください。多分 netty-http や jetty のような http コンシューマーを使用していますか?
4

2 に答える 2

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. httphttp4またはjettyコンポーネントを使用して、このような ebXml SOAP メッセージを apache camel 経由で送信できます。

            to("jetty:http://{{server.host}}:{{server.http.port}}/service/").
            log(LoggingLevel.INFO, "HTTP response code: ${in.header.CamelHttpResponseCode}")
    
  2. SOAP応答を手動で解析するだけでよい場合(XPathなど)、またはXSLTで応答を変換できます。XML を POJO に変換するには、beanio、xstream、jaxb などを使用できます。

    ....
        to("velocity:file:///{{karaf.home}}/etc/vm/ws-message-oc.vm?contentCache=true")。                                
    setProperty(Exchange.CONTENT_TYPE).constant("アプリケーション/soap+xml")。
        setProperty(Exchange.CONTENT_ENCODING).constant("gzip").
        setProperty(Exchange.CHARSET_NAME).constant("utf-8")。
        //log(LoggingLevel.INFO, "WS リクエスト: ${body}").
        to("jetty:http://{{app-server.host}}:{{app-server.http.port}}/service/")。
        log(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 に答える