Freeman Fang wrote: > > Hi, > > My comment inline. > On 2010-6-1, at 上午4:24, Amigo_ wrote: > >> >> >> Freeman Fang wrote: >>> >>> >>> On 2010-5-30, at 下午11:54, Amigo_ wrote: >>> >>>> >>>> Hi, >>>> >>>> I need to invoke external web service from SE. I've generated codes >>>> for >>>> client using Apache CXF, but any invocations are blocked by >>>> servicemix. >>>> >>>> I've searched this forum and I've read that there should a binding >>>> component >>>> between my SE and WS, but I can hardly find any tutorials. I will be >>>> very >>>> glad if someone could post any links to tutorials or just clues >>>> explaining >>>> how to ensure communication with external ws over servicemix. >>>> >>> Hi, >>> In your case you need a cxf bc provider endpoint, so the flow looks >>> like >>> >>> SE-->cxf bc providier--> external ws, >>> >>> You may need take a look at CxfBcProviderTest to get details about >>> how >>> it works. >>> >>> [1]https://svn.apache.org/repos/asf/servicemix/components/bindings/servicemix-cxf-bc/trunk/src/test/java/org/apache/servicemix/cxfbc/CxfBcProviderTest.java >>> >>> Freeman >>> >> >> Thanks for reply, but I can't make this works yet. I've searched >> internet >> and found similar post with link to this CxfBcProviderTest.java. >> >>>>> So we need to create raw SOAP message in order to pass data >>>>> instead >>>>> of >>>>> directly deal with a JavaBean >>>>> >>>> No, you needn't create raw soap message yourself. >>>> The raw soap message you saw in the test case is just a simple way >>>> to >>>> invoke the cxf se, it's not the key point of that test case. The >>>> key >>>> point of that test case is cxf se can hold proxy of cxf bc >>>> provider so >>>> that you can invoke external webservice >> >> I assume I have to define cxf bc provider and managed to communicate >> with my >> generated from wsdl cxf client. I added to my bundle-context.xml - >> cxfbc:provider and it looks like: >> >> <beans xmlns="http://www.springframework.org/schema/beans" >> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >> xmlns:osgi="http://www.springframework.org/schema/osgi" >> xmlns:camel-osgi="http://camel.apache.org/schema/osgi" >> xmlns:cxfbc="http://servicemix.apache.org/cxfbc/1.0" >> xsi:schemaLocation=" >> http://www.springframework.org/schema/beans >> http://www.springframework.org/schema/beans/spring-beans-2.0.xsd >> http://www.springframework.org/schema/osgi >> http://www.springframework.org/schema/osgi/spring-osgi.xsd >> http://camel.apache.org/schema/osgi >> http://camel.apache.org/schema/osgi/camel-osgi.xsd >> http://servicemix.apache.org/cxfbc/1.0 >> http://servicemix.apache.org/cxfbc/1.0/servicemix-cxf-bc.xsd"> >> >> <camel-osgi:camelContext xmlns="http://camel.apache.org/schema/ >> spring"> >> <route> >> <from >> uri="timer://myTimer?fixedRate=true&period=30000" /> >> <bean ref="translator" method="translate" /> >> </route> >> </camel-osgi:camelContext> >> >> <bean class="com.amigo.cxf.TranslatorClient" id="translator" /> >> >> <cxfbc:provider wsdl="http://localhost:9090/Translator/translate? >> WSDL" >> locationURI="http://localhost:9090/Translator/translate" >> endpoint="tns:translatorSOAP" service="translatorSOAP"> >> </cxfbc:provider> >> >> </beans> > One obvious problem I can tell now is you need add > <bean class="org.apache.servicemix.common.osgi.EndpointExporter" /> > when you use jbi endpoint in osgi container. > You may need take a look at cxf-wsdl-first-osgi-package example > shipped with kit to get idea how jbi endpoint works with osgi package. > > Freeman >
Hi, thanks for reply. I followed carefully this example and have made some changes to my bundle-context.xml It looks now like this: <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:osgi="http://www.springframework.org/schema/osgi" xmlns:camel-osgi="http://camel.apache.org/schema/osgi" xmlns:cxfbc="http://servicemix.apache.org/cxfbc/1.0" xmlns:cxfse="http://servicemix.apache.org/cxfse/1.0" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/osgi http://www.springframework.org/schema/osgi/spring-osgi.xsd http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd http://camel.apache.org/schema/osgi http://camel.apache.org/schema/osgi/camel-osgi.xsd http://servicemix.apache.org/cxfbc/1.0 http://servicemix.apache.org/cxfbc/1.0/servicemix-cxf-bc.xsd http://servicemix.apache.org/cxfse/1.0 http://servicemix.apache.org/cxfse/1.0/servicemix-cxf-se.xsd"> <camel-osgi:camelContext xmlns="http://camel.apache.org/schema/spring"> <route> <from uri="timer://myTimer?fixedRate=true&period=3000000" /> <bean ref="translator" method="translate" /> </route> </camel-osgi:camelContext> <bean class="com.amigo.cxf.TranslatorClient" id="translator" /> <import resource="classpath:META-INF/cxf/cxf.xml" /> <import resource="classpath:META-INF/cxf/cxf-extension-http-jetty.xml" /> <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" /> <import resource="classpath:META-INF/cxf/cxf-extension-http-binding.xml" /> <import resource="classpath:META-INF/cxf/cxf-extension-http-jetty.xml" /> <cxfse:endpoint> <cxfse:pojo> <bean class="com.amigo.cxf.Translator_Service" /> </cxfse:pojo> </cxfse:endpoint> <cxfbc:provider wsdl="http://localhost:9090/Translator?wsdl" locationURI="http://localhost:9090/Translator/translate" endpoint="tns:translatorSOAP" service="translatorSOAP"> </cxfbc:provider> <bean class="org.apache.servicemix.common.osgi.EndpointExporter" /> </beans> But unfortunately it still doesn't work. Now I have error about no conduit initiatior. As far as I could searched in internet it could be caused by lack of the cxf-rt-transports-http-jetty dependency - but i added. 20:29:44,990 | ERROR | myTimer | DefaultErrorHandler | rg.apache.camel.processor.Logger 248 | Failed delivery for exchangeId: 8a7feae2-5d6e-4e48-af34-1c8721c4dc97. Exhausted after delivery attempt: 1 caught: javax.xml.ws.soap.SOAPFaultException: No conduit initiator was found for the namespace http://schemas.xmlsoap.org/soap/http. javax.xml.ws.soap.SOAPFaultException: No conduit initiator was found for the namespace http://schemas.xmlsoap.org/soap/http. at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:146) at $Proxy142.translate(Unknown Source) at com.amigo.cxf.TranslatorClient.translate(TranslatorClient.java:28) 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:616) at org.apache.camel.component.bean.MethodInfo.invoke(MethodInfo.java:214) at org.apache.camel.component.bean.MethodInfo$1.proceed(MethodInfo.java:133) at org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:137) at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:67) at org.apache.camel.processor.DelegateProcessor.processNext(DelegateProcessor.java:53) at org.apache.camel.processor.DelegateProcessor.proceed(DelegateProcessor.java:82) at org.apache.camel.processor.interceptor.TraceInterceptor.process(TraceInterceptor.java:93) at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:67) at org.apache.camel.processor.RedeliveryErrorHandler.processExchange(RedeliveryErrorHandler.java:177) at org.apache.camel.processor.RedeliveryErrorHandler.processErrorHandler(RedeliveryErrorHandler.java:143) at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:88) at org.apache.camel.processor.DefaultErrorHandler.process(DefaultErrorHandler.java:49) at org.apache.camel.processor.DefaultChannel.process(DefaultChannel.java:228) at org.apache.camel.processor.UnitOfWorkProcessor.processNext(UnitOfWorkProcessor.java:66) at org.apache.camel.processor.DelegateProcessor.process(DelegateProcessor.java:48) at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:67) at org.apache.camel.component.timer.TimerConsumer.sendTimerExchange(TimerConsumer.java:103) at org.apache.camel.component.timer.TimerConsumer$1.run(TimerConsumer.java:50) at java.util.TimerThread.mainLoop(Timer.java:534) at java.util.TimerThread.run(Timer.java:484) Caused by: org.apache.cxf.BusException: No conduit initiator was found for the namespace http://schemas.xmlsoap.org/soap/http. at org.apache.cxf.transport.ConduitInitiatorManagerImpl.getConduitInitiator(ConduitInitiatorManagerImpl.java:112) at org.apache.cxf.endpoint.AbstractConduitSelector.getSelectedConduit(AbstractConduitSelector.java:73) at org.apache.cxf.endpoint.UpfrontConduitSelector.prepare(UpfrontConduitSelector.java:61) at org.apache.cxf.endpoint.ClientImpl.prepareConduitSelector(ClientImpl.java:715) at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:478) at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:310) at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:262) at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:73) at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:124) ... 26 more My earlier error with org.apache.cxf.bus.CXFBusFactory was probably caused by cxf-bundle - because my own web service after installation of this bundle started to output same error, so uninstalled this bundle. -- View this message in context: http://old.nabble.com/Invoking-external-web-service-from-SE-tp28722871p28745838.html Sent from the ServiceMix - User mailing list archive at Nabble.com.
