Как я могу использовать Apache Camel для преобразования SOAP XML в запрос REST JSON и возврата ответа в обратном порядке - PullRequest
0 голосов
/ 14 октября 2019

Я хочу, чтобы запрос SOAP XML был преобразован в соответствующий запрос REST POST, который будет отправлен на сервер, обработан и затем возвращен как ответ SOAP XML.

Отправить запрос SOAP XML -> СоздатьREST Request -> Process Rest Request и возврат Rest Response -> Create и return SOAP XML response

Я установил два работающих приложения, верблюжье приложение, которое получит SOAP XML-запрос и отправит запрос REST POSTприложение, которое будет возвращать ответ REST. Я пытаюсь, чтобы приложение верблюда получило ответ REST и преобразовало его в ответ SOAP, который будет возвращен отправителю исходного запроса SOAP.

Ниже приведен файл camel-config.xml, который я использовал:

    <bean id="ProcessChange" class="com.acompany.camel.processor.ProcessChange"/>

  <cxf:cxfEndpoint id="HTTP_EndPoint" 
                  address="/OptionalServicesService" 
      wsdlURL="classpath:optionalservices_v22_0/OptionalServicesContract.wsdl" 
      serviceClass="com.acompany.ism.optionalservices_v22_0.OptionalServicesPort"
      endpointName="tns:OptionalServicesPort"
      serviceName="tns:OptionalServicesService" 
      xmlns:tns="http://www.acompany.com/ism/optionalservices_v22_0">
  </cxf:cxfEndpoint>

  <cxf:rsClient id="rsClient" address="http://localhost:9090/TicketRelatedSvc"
    serviceClass="com.acompany.mce.dto.response.RESBody"
    loggingFeatureEnabled="true" />

    <dataFormats>
        <json id="jaxreq" library="Jackson" unmarshalTypeName="com.acompany.mce.dto.request.REQBody"/>
        <json id="jaxres" library="Jackson" unmarshalTypeName="com.company.mce.dto.response.RESBody"/>
    </dataFormats>


    <route id="OptionalServices">
      <from uri="cxf:bean:HTTP_EndPoint"/> 
      <transform id="TransformInput"><simple>${in.body[0]}</simple></transform>
      <doTry>
        <pipeline id="HTTPPipeline" xmlns:doc6="http://www.acompany.com/ism/optionalservices_v22_0">
            <choice id="ChoiceOfVersions">    
                <when> 
                    <simple>${in.header.operationName} == 'OptionalServices'</simple>  
                    <marshal><custom ref="jaxreq"/></marshal>
                    <setHeader headerName="CamelHttpMethod">
                        <constant>POST</constant>
                    </setHeader>
                    <setHeader headerName="Content-Type" id="header_contentType">
                        <constant>application/json</constant>
                    </setHeader>
                    <inOut uri="cxfrs://bean://rsClient"/>
                    <unmarshal ref="jaxres"/>
                </when>     
          (EXCEPTION HANDLING IS HERE)
    </route>   

Я получаю следующую ошибку:

org.apache.camel.processor.Pipeline - сбой обмена сообщениями: поэтому прерывается конвейер для обмена: Exchange [ID-DFPC0N2-1570808508753-0-4] Исключение: org.apache.camel.CamelExecutionException: исключение произошло во время выполнения на обмене: Exchange [ID-DFPC0N2-1570808508753-0-4]

...