Как получить заголовок SOAP из объекта обмена в Camel? - PullRequest
0 голосов
/ 24 января 2019
  • Мы представили веб-сервис Apache camel-cxf.Используя верблюжий процессор, мы пытаемся получить заголовок мыла, который мы передали в запросе мыла от клиента soapUi.
  • Объект обмена содержит тело сообщения мыла (не заголовок мыла).В exchange.getIn.getHeader () мы получаем только те заголовки HTTP, которые мы передали, а не заголовок SOAP.

  • Как получить заголовок SOAP из объекта обмена в Camel?

  • Ниже передается мыльный заголовок:

<soapenv:Header>
  <ns1:info xmlns:ns1="http://www.w3schools.com/transaction/">
    <ns1:TransactionID>01</ns1:TransactionID>
    <ns1:AppUserID>52</ns1:AppUserID>
    <ns1:AppPass>ab</ns1:AppPass>
  </ns1:info>
</soapenv:Header>
  • Мы пытались использовать,

    • exchange.getIn (). GetHeaders ();
    • exchange.getIn (). GetHeader («TransactionID»);

      Однако не удалось извлечь отправленный заголовок SOAP.

  • Как добавить пользовательские заголовки мыла в режиме полезной нагрузки?

Ответы [ 2 ]

0 голосов
/ 25 января 2019

Это было мое решение:

    List<SoapHeader> soapHeaders = (List)exchange.getIn().getHeader("org.apache.cxf.headers.Header.list");
    Element header = ((Element)soapHeaders.get(0).getObject());
    String eventType = (String)header.getElementsByTagName("TransactionID").item(0).getTextContent();
    exchange.getIn().setHeader("TYPE_EVENT",eventType);
0 голосов
/ 24 января 2019

Если конечная точка cxf настроена на работу в DataFormat.PAYLOAD так:

 .process(exchange -> {
                CxfPayload body = exchange.getIn().getBody(CxfPayload.class);
                for (Object header : body.getHeaders()) {
                    SoapHeader soapHeader = (SoapHeader) header;
                    org.w3c.dom.Element element = (Element) soapHeader.getObject();
                    //parse elements
                }
            });

Если в необработанном режиме, просто читать поток ввода и парсинга данных как XML, используя xpath

...