2013-02-15 1 views
0

Имея WSDL:Веб-сервис с дополнительным ключом, карта значений с верблюдом?

<definitions targetNamespace="http://MyWebService/" name="MyWebService"> 
    <types> 
     <xsd:schema> 
      <xsd:import namespace="http://MyWebService/" schemaLocation="http://localhost:8081/MyWebService?xsd=1"/> 
     </xsd:schema> 
    </types> 
    <message name="doIt"> 
     <part name="Word" type="xsd:string"/> 
     <part name="SomeParameters" type="tns:MapWrapper"/> 
    </message> 
    <message name="doItResponse"> 
     <part name="return" type="xsd:string"/> 
    </message> 
    <portType name="MyWebService"> 
     <operation name="doIt" parameterOrder="Word SomeParameters"> 
      <input message="tns:doIt"/> 
      <output message="tns:doItResponse"/> 
     </operation> 
    </portType> 
... 
</definitions> 

и связанный с ним XSD:

<xs:schema version="1.0" targetNamespace="http://MyWebService/"> 
    <xs:complexType name="MapWrapper"> 
     <xs:sequence> 
      <xs:element name="map"> 
       <xs:complexType> 
        <xs:sequence> 
         <xs:element name="entry" minOccurs="0" maxOccurs="unbounded"> 
          <xs:complexType> 
           <xs:sequence> 
            <xs:element name="key" minOccurs="0" type="xs:string"/> 
            <xs:element name="value" minOccurs="0" type="xs:string"/> 
           </xs:sequence> 
          </xs:complexType> 
         </xs:element> 
        </xs:sequence> 
       </xs:complexType> 
      </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
</xs:schema> 

Что бы быть лучшим/простой способ опубликовать эту WebService, чтобы получить входные параметры WS для работы с , Маршрут должен выглядеть так: (1) WS -> (2) InputParameters -> (3) некоторые шаги обработки с параметрами ввода -> (4) что-то в зависимости от параметров из (2).

Я попытался получить знания из примера верблюда-cxf; но там много чего смешалось, что затрудняет понимание imo.

Некоторые фрагменты кода Java DSL были бы хороши.

ответ

1

Самый простой способ - сделать маршруты Верблюда, используя Spring. Например: если вы хотите создать свой собственный боб и хотите изменить сообщение перед маршрутизацией его фактической конечной точке вы могли бы сделать что-то вроде этого:

public class CustomProcessor { 

    public void processDoIt(Exchange exchange) { 
     DoIt smth = exchange.getIn().getBody(DoIt.class); //Your message's body    
    } 

} 

И маршрут Camel с использованием Spring:

<bean id="processor" class="your.custom.CustomProcessor"/> 

<camel:camelContext trace="true" id="camelContext" > 

    <camel:route id="camelRoute"> 
     <camel:from uri="cxf:bean:yourWebServiceListenerEndpoint?dataFormat=POJO&amp;synchronous=true" /> 
     <camel:choice> 
      <camel:when> 
       <camel:simple>${headers.operationName} == 'doIt'</camel:simple> 
       <camel:bean ref="processor" method="processDoIt"/> 
      </camel:when> 
     </camel:choice> 
     <camel:to uri="cxf:bean:yourWebServiceTargetEndpoint"/> 
    </camel:route> 

</camel:camelContext> 

В зависимости по имени операции верблюд направит сообщение на соответствующий процессор. Также вы можете перенаправить свое сообщение в другое место. Это тебе решать. Это просто пример того, как это можно сделать.

Смотрите также:

+0

operationName всегда будет Doit. Только входные параметры doit-операции «решат, какой маршрут принимать». –

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