2014-09-11 2 views
0

Чтобы реализовать SOA с наименьшим наименованием, я создал WSDL с двумя операциями и сгенерированными классами Java и интерфейсом. Я создал один поток мула для обработки нескольких операций следующим образом. Это правильный подход или лучший способ его достижения?Поддержка нескольких операций в службе SOAP Mule

<choice doc:name="Choice"> 
     <when expression="header:INVOCATION:cxf_operation={http://integration.sbs.com/Services/SMT/v1}getSupplierRequestDetail"> 
      <vm:outbound-endpoint exchange-pattern="request-response" path="GetFlow" doc:name="Get"/> 
     </when> 
     <when expression="header:INVOCATION:cxf_operation={http://integration.sbs.com/Services/SMT/v1}updateSupplierRequestDetail"> 
      <vm:outbound-endpoint exchange-pattern="request-response" path="UpdateFlow" doc:name="Update"/> 
     </when> 
     <otherwise> 
      <logger message="Operation Not Supported" level="INFO" doc:name="Logger"/> 
     </otherwise> 
+0

Вам не нужно использовать маршрутизатор выбора для разной работы. Вместо этого mule автоматически вызовет операцию, основанную на действии SOAP. –

+0

Реализации службы нет. Если вы видите код, я направляюсь к различным подпотокам, которые запускают разные запросы к базе данных. Затем ответ базы данных преобразуется в объект ответа перед передачей его компоненту SOAP. Если я не идентифицирую операцию в потоке, как я могу перейти к другому потоку? –

+0

Зачем вам передавать ответ базы данных на запрос SOAP? Вместо этого вы можете называть вас слоем DAO с вашего уровня, реализованного сервисом, который будет выполнять различные операции с БД ... Вы можете реализовать свою услугу и в сервисе, вы можете позвонить в свою БД, вызвав ваш уровень DAO .. И делая это может вызывать различные операции службы на основе действия SOAP. –

ответ

0

Из-за вашего требования не использовать Сервисный класс и другой код Java, подход выглядит нормально (при условии, что служба работает должным образом).

Другой вариант был бы следующим.

SOAP в WADL будет определять свои операции и запросы на операцию. В потоке после HTTP-входящего вы получите XML-запрос SOAP. Итак, попробуйте использовать выбор в запросе XML, чтобы проверить, какой именно запрос он использует, используя XPATH. Затем направьте запрос на соответствующий поток или подпоток.

<choice doc:name="Choice"> 
    <when expression="#[xpath('//mpsvc:getSupplierRequestDetail') != null"> 
     <vm:outbound-endpoint exchange-pattern="request-response" path="GetFlow" doc:name="Get"/> 
    </when> 
    <when expression="#[xpath('//mpsvc:updateSupplierRequestDetail') != null"> 
     <vm:outbound-endpoint exchange-pattern="request-response" path="UpdateFlow" doc:name="Update"/> 
    </when> 
    <otherwise> 
     <logger message="Operation Not Supported" level="INFO" doc:name="Logger"/> 
    </otherwise> 
</choice> 

Надеюсь, это поможет.

Смежные вопросы