在Camel中使用Web服务

时间:2013-07-29 15:45:16

标签: web-services cxf apache-camel

我有一个描述Web服务的WSDL文件。但是还没有实现,但是我在SoapUI中创建了一个Mock服务,它是硬编码的,一遍又一遍地给出相同的响应。

我希望Camel从磁盘向Web服务发送SOAP请求,并将响应写入另一个文件。我在想这些路线看起来像这样:

from(file:data/input/soaprequest)
.to(wsendpoint)

from(wsendpoint)
.to(file:data/input/soapresponse)

然后我将它们添加到驼峰上下文中,我不确定这是否是正确的方法,但即使它是,我仍然在努力设置webserviceendpoint。由于我不能使用Spring XML,这就是我所拥有的:

CxfEndpoint wsendpoint = new CxfEndpoint();
wsendpoint.setAddress("http://localhost:9001/HelloWorld");
wsendpoint.setWsdlURL("http://localhost:9001/HelloWorld?WSDL");
wsendpoint.setServiceClass("com.generated.HelloWorld");
wsendpoint.setCamelContext(camelcontext);

然后我将wsendpoint传递给路线,如上所示。但什么都没发生。应用程序永远不会停止,它不会在输出文件夹中发布任何响应,它只是说

INFO: Setting the server's publish address to be http://localhost:9001/HelloWorld

我还尝试在应用程序仍在运行时从SoapUI发送请求,它在应用程序中没有任何变化,我在SoapUI中收到404错误

2 个答案:

答案 0 :(得分:2)

路线应该是这样的

from(file:data/input/soaprequest)
   .to(wsendpoint)
   .to(file:data/input/soapresponse)

答案 1 :(得分:1)

您可以执行以下任务:

 <!--Configure SOAP endpoint in camel-->
    <cxf:cxfEndpoint id="cxfEndpoint"
                     serviceClass="SEIClassNameHere"
                     address="exposedAdress">
    </cxf:cxfEndpoint>

  <!--Configure consuming camel route-->
    <route id="consumingFromCXFEndpointRoute">
            <from uri="cxf:bean:cxfEndpoint"/>
            <to uri="file:someFile"/>
    </route> 

  <!--Configure producing camel route-->
    <route id="producingToCXFEndpointRoute">
            <from uri="timer://foo?period=60000"/>
            <pollEnrich uri="file:{{sourceFolder}}?maxMessagesPerPoll=1&amp;move=  {{destinationFolder}}/${file:name}-${date:now:yyyy-MM-dd-HHmmssSSS}.csv&amp;moveFailed= {{errorFolder}}/${file:name}-${date:now:yyyy-MM-dd-HHmmssSSS}.csv"
                    timeout="5000"/>
            <to uri="cxf:serviceAddress?serviceClass=SEIClassNameHere&defaultOperationName=methodYouWantToCall"/>
    </route>