2013-12-14 47 views
4

我在Apache駱駝網站和駱駝行動中經歷了這個例子,並且都非常重視暴露web服務。我在網上找到的唯一例子不起作用。如何通過使用cxf componnet使用Apache駱駝來調用第三方webservice

我試圖訪問第三方Web服務的WSDL - http://www.webservicex.net/CurrencyConvertor.asmx?WSDL

該服務有一個操作/方法計算匯率。操作名稱是「ConversionRate」。

我這樣定義的路線 -

 <?xml version="1.0" encoding="UTF-8"?> 
<!-- Configures the Camel Context--> 

<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:camel="http://camel.apache.org/schema/spring" 
     xmlns:cxf="http://camel.apache.org/schema/cxf" 
     xsi:schemaLocation=" 
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
     http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd"> 


    <camelContext xmlns="http://camel.apache.org/schema/spring"> 

    <route> 
     <description>here is a sample which processes the input files 
     (leaving them in place - see the 'noop' flag) 
     then performs content based routing on the message using XPath</description> 
     <from uri="file:src/data/order?noop=true"/> 
     <log message="${body}"/> 

     <to uri="cxf://http://www.webservicex.net/CurrencyConvertor.asmx?wsdlURL=http://www.webservicex.net/CurrencyConvertor.asmx?wsdl&amp;serviceName=CurrencyConvertor&amp;portName=http://www.webserviceX.NET/tns:CurrencyConvertorSoap&amp;dataFormat=MESSAGE"/> 
     <log message="${body}"/> 
    </route> 
</camelContext> 

</beans> 

我已經定義了樣品的有效載荷XML作爲 -

<order> 
     <Id>1</Id> 
     <Price>10.00</Price> 
     <Quantity>2</Quantity> 
</order> 

當我運行這個例子中我得到這個錯誤。

Error occurred while running main from: org.apache.camel.spring.Main 
java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.apache.camel.maven.RunMojo$1.run(RunMojo.java:440) 
    at java.lang.Thread.run(Thread.java:744) 
Caused by: org.apache.camel.FailedToCreateProducerException: Failed to create Producer for endpoint: Endpoint[cxf://http://www.webservicex.net/CurrencyConvertor.asmx?dataFormat=MESSAGE&portName=http%3A%2F%2Fwww.webserviceX.NET%2Ftns%3ACurrencyConvertorSoap&serviceName=CurrencyConvertor&wsdlURL=http%3A%2F%2Fwww.webservicex.net%2FCurrencyConvertor.asmx%3Fwsdl]. Reason: org.apache.cxf.service.factory.ServiceConstructionException: Could not find definition for service CurrencyConvertor. 
    at org.apache.camel.impl.ProducerCache.doGetProducer(ProducerCache.java:395) 
    at org.apache.camel.impl.ProducerCache.acquireProducer(ProducerCache.java:114) 
    at org.apache.camel.impl.ProducerCache.startProducer(ProducerCache.java:145) 
    at org.apache.camel.processor.SendProcessor.doStart(SendProcessor.java:175) 
    at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:60) 
    at org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:62) 
    at org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:52) 
    at org.apache.camel.util.ServiceHelper.startServices(ServiceHelper.java:73) 
    at org.apache.camel.processor.DelegateAsyncProcessor.doStart(DelegateAsyncProcessor.java:78) 
    at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:60) 
    at org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:62) 
    at org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:52) 
    at org.apache.camel.util.ServiceHelper.startServices(ServiceHelper.java:73) 
    at org.apache.camel.processor.DelegateAsyncProcessor.doStart(DelegateAsyncProcessor.java:78) 
    at org.apache.camel.processor.interceptor.TraceInterceptor.doStart(TraceInterceptor.java:358) 
    at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:60) 
    at org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:62) 
    at org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:52) 
    at org.apache.camel.processor.WrapProcessor.doStart(WrapProcessor.java:52) 
    at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:60) 
    at org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:62) 
    at org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:52) 
    at org.apache.camel.util.ServiceHelper.startServices(ServiceHelper.java:73) 
    at org.apache.camel.processor.RedeliveryErrorHandler.doStart(RedeliveryErrorHandler.java:1064) 
    at org.apache.camel.support.ChildServiceSupport.start(ChildServiceSupport.java:41) 
    at org.apache.camel.support.ChildServiceSupport.start(ChildServiceSupport.java:28) 
    at org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:62) 
    at org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:52) 
    at org.apache.camel.util.ServiceHelper.startServices(ServiceHelper.java:73) 
    at org.apache.camel.processor.interceptor.DefaultChannel.doStart(DefaultChannel.java:153) 
    at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:60) 
    at org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:62) 
    at org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:52) 
    at org.apache.camel.util.ServiceHelper.startServices(ServiceHelper.java:85) 
    at org.apache.camel.processor.MulticastProcessor.doStart(MulticastProcessor.java:938) 
    at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:60) 
    at org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:62) 
    at org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:52) 
    at org.apache.camel.util.ServiceHelper.startServices(ServiceHelper.java:73) 
    at org.apache.camel.processor.DelegateAsyncProcessor.doStart(DelegateAsyncProcessor.java:78) 
    at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:60) 
    at org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:62) 
    at org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:52) 
    at org.apache.camel.util.ServiceHelper.startServices(ServiceHelper.java:73) 
    at org.apache.camel.processor.DelegateAsyncProcessor.doStart(DelegateAsyncProcessor.java:78) 
    at org.apache.camel.processor.UnitOfWorkProcessor.doStart(UnitOfWorkProcessor.java:88) 
    at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:60) 
    at org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:62) 
    at org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:52) 
    at org.apache.camel.util.ServiceHelper.startServices(ServiceHelper.java:73) 
    at org.apache.camel.processor.DelegateAsyncProcessor.doStart(DelegateAsyncProcessor.java:78) 
    at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:60) 
    at org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:62) 
    at org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:52) 
    at org.apache.camel.util.ServiceHelper.startServices(ServiceHelper.java:73) 
    at org.apache.camel.processor.DelegateAsyncProcessor.doStart(DelegateAsyncProcessor.java:78) 
    at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:60) 
    at org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:62) 
    at org.apache.camel.impl.RouteService.startChildService(RouteService.java:322) 
    at org.apache.camel.impl.RouteService.warmUp(RouteService.java:151) 
    at org.apache.camel.impl.DefaultCamelContext.doWarmUpRoutes(DefaultCamelContext.java:2000) 
    at org.apache.camel.impl.DefaultCamelContext.safelyStartRouteServices(DefaultCamelContext.java:1928) 
    at org.apache.camel.impl.DefaultCamelContext.doStartOrResumeRoutes(DefaultCamelContext.java:1716) 
    at org.apache.camel.impl.DefaultCamelContext.doStartCamel(DefaultCamelContext.java:1597) 
    at org.apache.camel.impl.DefaultCamelContext.doStart(DefaultCamelContext.java:1453) 
    at org.apache.camel.spring.SpringCamelContext.doStart(SpringCamelContext.java:179) 
    at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:60) 
    at org.apache.camel.impl.DefaultCamelContext.start(DefaultCamelContext.java:1421) 
    at org.apache.camel.spring.SpringCamelContext.maybeStart(SpringCamelContext.java:228) 
    at org.apache.camel.spring.SpringCamelContext.onApplicationEvent(SpringCamelContext.java:118) 
    at org.apache.camel.spring.CamelContextFactoryBean.onApplicationEvent(CamelContextFactoryBean.java:283) 
    at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:97) 
    at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:327) 
    at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:941) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:475) 
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139) 
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:93) 
    at org.apache.camel.spring.Main.createDefaultApplicationContext(Main.java:186) 
    at org.apache.camel.spring.Main.doStart(Main.java:140) 
    at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:60) 
    at org.apache.camel.main.MainSupport.run(MainSupport.java:141) 
    at org.apache.camel.main.MainSupport.run(MainSupport.java:332) 
    at org.apache.camel.spring.Main.main(Main.java:73) 
    ... 6 more 
Caused by: org.apache.cxf.service.factory.ServiceConstructionException: Could not find definition for service CurrencyConvertor. 
    at org.apache.cxf.wsdl11.WSDLServiceFactory.create(WSDLServiceFactory.java:139) 
    at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.buildServiceFromWSDL(ReflectionServiceFactoryBean.java:412) 
    at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.initializeServiceModel(ReflectionServiceFactoryBean.java:534) 
    at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.create(ReflectionServiceFactoryBean.java:248) 
    at org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpoint(AbstractWSDLBasedEndpointFactory.java:101) 
    at org.apache.cxf.frontend.ClientFactoryBean.create(ClientFactoryBean.java:90) 
    at org.apache.camel.component.cxf.CxfEndpoint.createClient(CxfEndpoint.java:527) 
    at org.apache.camel.component.cxf.CxfProducer.doStart(CxfProducer.java:76) 
    at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:60) 
    at org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:62) 
    at org.apache.camel.impl.ProducerCache.doGetProducer(ProducerCache.java:393) 
    ... 88 more 
*************************************. 
+0

這個問題解決我在這裏添加了一個完整的解決方案 - http://www.javahabit.com/2 013/12/16/apache-camel-how-to-call-an-external-webservice /#註釋,如果有人正在尋找完整的實現。 –

回答

2

根據CXF文檔,目標URI顯示爲不正確。

serviceNameportName格式應該是{namespace}name

與嘗試:

+0

謝謝bgossit。這有助於我取得了一些進展。不過,現在我收到了一個不同的錯誤。 –

+0

沒關係它的工作謝謝你指出的錯誤。 –

+2

看起來這個話題獲得了很多觀點。如果有人想看完整的教程,我在這裏添加了教程 - http://www.javahabit.com/2013/12/16/apache-camel-how-to-call-an-external-webservice/ –