Лучший способ реализовать ebXml/ebMs с верблюдом Apache

Прежде всего, я не нашел какой-либо универсальной реализации с открытым исходным кодом для ebxml/ebms, для меня это как-то странно или, может быть, я искал не те вещи, но я не нашел здесь чего-то полезного.

Когда я искал ebxml/ebms, я также нашел JAXM/SAAJ(JSR 67). Похоже, что эти реализации никогда не заканчивались, все ссылки на это ссылаются на домашнюю страницу sun, которая больше не существует. С домашней страницы sun вы будете перенаправлены на домашнюю страницу oracle, и там я не могу найти что-то о JAXM или JSR 67.

Это приводит меня к моему вопросу, как реализовать сервис ebxml в Apache Camel?

  1. Должен ли я создать ebxml SOAP-сообщение "вручную" или я пропустил несколько библиотек, которые генерируют для меня такое ebxml-сообщение?`
  2. Как отправить такое ebXml SOAP-сообщение через Apache Camel? Cxf нужен wsdl, для службы, которую мы хотим вызвать, не существует wsdl.
  3. Как получить такие ebXml сообщения? Cxf, см. Выше, может быть, с http-потребителем, таким как netty-http или jetty?

2 ответа

Несколько лет опоздал, но может быть ценным для других:)

Доступна реализация с открытым исходным кодом, которая поддерживает спецификацию ebMS 2.0. Этот адаптер ebMS может быть развернут как плагин Mule ESB или как обычное приложение WAR.

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

Несмотря на то, что он находится на Sourceforge, он все еще активно развивается.

  1. Вы можете использовать шаблон скорости, например, для создания сообщения SOAP ebxml вручную.

Пример шаблона:

<?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. Вы можете использовать компоненты http, http4 или 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. Может быть, вы можете использовать beanio, xstream или jaxb и так далее для преобразования XML в POJO.

.... to ("скорость: файл:///{{karaf.home}}/etc/vm/ws-message-oc.vm?contentCache=true"). SetProperty(Exchange.CONTENT_TYPE).constant("приложение / мыло + XML"). SetProperty(Exchange.CONTENT_ENCODING).constant("GZIP"). SetProperty(Exchange.CHARSET_NAME).constant("UTF-8").
        //log(LoggingLevel.INFO, "запрос WS: ${body}"). к ("причалу: HTTP://{{app-server.host}}:{{приложение-server.http.port}}/ сервис /").
        log(LoggingLevel.INFO, "HTTP-код ответа: ${in.header.CamelHttpResponseCode}")
        //log(LoggingLevel.INFO, "WS response: ${body}")
        .setHeader("callRC").xpath("//ser:callRC/text()", String.class, XmlNamespaces.NAMESPACES.getNamespace())
    ....
Другие вопросы по тегам