2012-04-24 2 views
2

Я пытаюсь интегрировать Apache CXF с Apache Camel. Конфигурация для верблюда:Вызов CXF webservice через Apache Camel

<cxf:cxfEndpoint id="authTest" 
     address="/cxfAuth" 
     serviceClass="com.test.AuthService" > 
     <cxf:properties> 
      <entry key="dataFormat" value="POJO" /> 
      <entry key="setDefaultBus" value="true" /> 
     </cxf:properties> 
    </cxf:cxfEndpoint> 

    <camel:camelContext trace="true"> 
     <camel:route> 
      <camel:from uri="cxf:bean:authTest" /> 
      <camel:to uri="bean:routeExitResponseProcessor"/> 
     </camel:route> 
    </camel:camelContext> 

Теперь для вызова конкретной операции на веб-службы, я использую это:

<camel:route> 
      <camel:from uri="direct:startAuthTest"/> 
      <camel:setHeader headerName="getEmployee"> 
       <camel:constant>gid</camel:constant> 
      </camel:setHeader> 
      <camel:to uri="cxf:bean:authTest" /> 
      <camel:log message=">>> data is : ${body}"/> 
      <camel:to uri="bean:routeExitResponseProcessor"/> 
     </camel:route> 

Но после того, как в том числе выше конфигурации я получаю WARN ServletController:149 - Can't find the the request for http://localhost:8080/CXFService/services/cxfAuth's Observer на серверной консоли и мой вебсервис не найденных в браузере.

Пожалуйста, помогите.

ответ

2

можно назвать следующее, чтобы получить имя операции CXF называют ... см http://camel.apache.org/cxf.html подробнее

String operation = (String)in.getHeader(CxfConstants.OPERATION_NAME); 

также увидеть этот модульный тест для примера использования ...

http://svn.apache.org/repos/asf/camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerTest.java

+0

затем на основе имен работы я должен положить много, если ... еще. Есть ли чистый способ сделать это? –

+1

см. Пример тестового модуля, который я включил, но в основном выбор() stmts можно использовать в маршруте или условных условиях в компонентах/процессорах и т. Д. ... –

+0

Есть ли способ настроить его в файле конфигурации верблюда? –

0

В CXF конечной точке

<cxf:cxfEndpoint id="yourServiceCall" 
    address="http://localhost:8181/yourservice/services/yourserviceport" 
    wsdlURL="wsdl/yourwsdl.wsdl" xmlns:ns="http://service.your.com" 
    endpointName="ns:YourServicePort" serviceName="ns:yourService" 
    serviceClass="com.service.YourServicePortType"> 

и на верблюдах Endpoint

camelContext id="camelId" xmlns="http://camel.apache.org/schema/spring"> 
    <camel:dataFormats> 
     <camel:jaxb contextPath="com.your.service" id="jaxb" /> 
    </camel:dataFormats> 

    <route id="route1"> 
     <from uri="cxf:bean:yourServiceCall?dataFormat=PAYLOAD" /> 
     <camel:unmarshal ref="jaxb" /> 
     <log message="log: Called from cxf endpoint" /> 
     <!-- Your Logic --> 
     <camel:process ref="ExitResponseProcessor"/> 
     <camel:marshal ref="jaxb" /> 
    </camel:route> 

Основываясь на Himanshu Ядав Комментарии: Обновление

<camel:choice> 
<camel:when> 
<camel:simple>${body} is com.your.service.YourRequest</camel:simple> 
<!-- Your Logic or call any bean method with <camel:bean ref="YourBean " method="YourMethod"/ /> --> 
</camel:when> 
<camel:when> </camel:when> 
<camel:otherwise> </camel:otherwise> 
</camel:choice 
Смежные вопросы