On Thu, Apr 14, 2011 at 6:03 PM, Marco Westermann <[email protected]> wrote:
> Hi,
>
> thank you for that link.. I just viewed the webinar xcf with camel for the
> 3rd time. My problem is, that all the services he implements are internal
> services which provide the route to outer world. There is no use of external
> services in his routes, is it?
>

And just to be clear, by external service, you mean your application
calls an external webservice, hosted somewhere else?

To do that its basically just do a .to(uri) where uri is the cxf
endpoint uri for the external webservice.


> regards, Marco
>
>
>
> Am 14.04.2011 16:31, schrieb Claus Ibsen:
>>
>> You might wanna check Adrians webinar series (3 in total).
>> There is one about using webservices (Apache CXF) with Camel, and
>> another with ServiceMix
>>
>> They are here:
>> http://fusesource.com/resources/video-archived-webinars/
>>
>>
>> On Thu, Apr 14, 2011 at 4:19 PM, Marco Westermann<[email protected]>
>>  wrote:
>>>
>>> Hi,
>>>
>>> ok I think I get further..
>>>
>>> but it still doesnt seem to work. I get an exception in serviceMix:
>>> Caused by: [org.apache.camel.InvalidPayloadException - No body available
>>> of
>>> type: org.apache.camel.component.cxf.CxfPayload on: Message: [Body is
>>> null].
>>>
>>> this is my new camel-context:
>>>
>>> <?xml version="1.0" encoding="UTF-8"?>
>>> <!-- Generated by Apache ServiceMix Archetype -->
>>> <beans xmlns="http://www.springframework.org/schema/beans";
>>>       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
>>>       xmlns:osgi="http://camel.apache.org/schema/osgi";
>>>       xmlns:osgix="http://www.springframework.org/schema/osgi-compendium";
>>>       xmlns:ctx="http://www.springframework.org/schema/context";
>>>       xmlns:cxf="http://camel.apache.org/schema/cxf";
>>>       xsi:schemaLocation="
>>>       http://camel.apache.org/schema/cxf
>>> http://camel.apache.org/schema/cxf/camel-cxf.xsd
>>>       http://www.springframework.org/schema/beans
>>> http://www.springframework.org/schema/beans/spring-beans-2.0.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://www.springframework.org/schema/osgi-compendium
>>>
>>> http://www.springframework.org/schema/osgi-compendium/spring-osgi-compendium.xsd
>>>       http://www.springframework.org/schema/context
>>> http://www.springframework.org/schema/context/spring-context.xsd
>>> ">
>>>
>>> <osgi:camelContext xmlns="http://camel.apache.org/schema/spring";>
>>> <route>
>>> <from uri="timer://MyTimer?fixedRate=true&amp;period=10000"/>
>>> <to
>>> uri="cxf:bean:articleService?defaultOperationName=getChangedArticles"/>
>>> <to uri="activemq:camel.changedArticles"/>
>>> </route>
>>> </osgi:camelContext>
>>>
>>> <bean id="activemq"
>>> class="org.apache.activemq.camel.component.ActiveMQComponent">
>>> <property name="brokerURL" value="tcp://localhost:61616"/>
>>> </bean>
>>>
>>> <cxf:cxfEndpoint id="articleService"
>>>
>>> wsdlURL="http://arche:8080/ArticleService/services/ArticleBAS?wsdl";
>>>                     serviceName="impl:ArticleBASService"
>>>                     endpointName="impl:ArticleBAS"
>>>                     xmlns:impl="http://DefaultNamespace";
>>> <cxf:properties>
>>> <entry key="dataFormat" value="PAYLOAD"/>
>>> </cxf:properties>
>>> </cxf:cxfEndpoint>
>>> </beans>
>>>
>>>
>>> what is wrong with that?
>>>
>>> Am 14.04.2011 10:44, schrieb Freeman Fang:
>>>>
>>>> Hi,
>>>>
>>>> Yeah,
>>>>
>>>> The archtypes with
>>>> <groupId>org.apache.servicemix.tooling</groupId>
>>>> <artifactId>servicemix-camel-osgi-bundle</artifactId>
>>>>
>>>> You can find it from [1]
>>>>
>>>>
>>>> [1]http://repo2.maven.org/maven2/org/apache/servicemix/tooling/servicemix-camel-osgi-bundle/
>>>> Freeman
>>>> On 2011-4-14, at 下午4:12, Marco Westermann wrote:
>>>>
>>>>> Hi,
>>>>>
>>>>> ok, I'll try the camel-osgi thing. By the way.. are there already any
>>>>> maven archtypes which can be used to generate a maven-osgi project?
>>>>>
>>>>> regards Marco
>>>>>
>>>>> Am 13.04.2011 11:36, schrieb Freeman Fang:
>>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> My comment inline.
>>>>>> On 2011-4-13, at 下午4:31, Marco Westermann wrote:
>>>>>>
>>>>>>> Hi,
>>>>>>>
>>>>>>> Thank you very much for your answers but
>>>>>>> I get more and more confused:
>>>>>>>
>>>>>>> Matt:
>>>>>>>
>>>>>>> The http component works great as a simple soap client, so you can
>>>>>>> use
>>>>>>> it w/o using CXF in most cases.
>>>>>>>
>>>>>>> Freeman:
>>>>>>> IMHO, to do a soap based operation, you'd better use cxf bc provider
>>>>>>> here, which is more powerful for soap operation.
>>>>>>>
>>>>>>> My question: what should I use now?
>>>>>>
>>>>>> I do think you should use cxf bc provider in this case, as it's better
>>>>>> soap support.
>>>>>>>
>>>>>>> Matt:
>>>>>>> I recommend looking into using Camel and OSGI packaging on ServiceMix
>>>>>>> 4.x, instead of using JBI
>>>>>>>
>>>>>>> My question: does that mean all the beginner tutorials on the
>>>>>>> servicemix-homepage are outdated? Do you have any references how this
>>>>>>> combination of camel and osgi-packaging works for serviceMix?
>>>>>>
>>>>>> We've discussed same issues several times before, JBI component is
>>>>>> kind
>>>>>> of outdated, so if you're starting a new project please use camel
>>>>>> router
>>>>>> directly, it's also has good cxf endpoint support so that it's easy
>>>>>> for you
>>>>>> to call a  external webservice. You can take a look at camel-osgi
>>>>>> example
>>>>>> shipped with Servicemix4.x kit to learn how camel and osgi-packaging
>>>>>> works
>>>>>> together.
>>>>>>>
>>>>>>> And I'm not one step further with the implementation of that one
>>>>>>> external service. @Freeman: I thought the port do exist in the wsdl,
>>>>>>> cause I
>>>>>>> copied it from there. You may see yourself. I provided the wsdl in my
>>>>>>> last
>>>>>>> post. And than again there is the question about how the
>>>>>>> soap-operation has
>>>>>>> to be named in my project.
>>>>>>
>>>>>> Notice
>>>>>> <http:soap-provider service="impl:ArticleBASService"
>>>>>>              endpoint="impl:ArticleBASSoapBinding"
>>>>>>
>>>>>>  wsdl="http://arche:8080/ArticleService/services/ArticleBAS?wsdl"; />
>>>>>> According to your wsdl, the endpoint should be impl:ArticleBAS, it
>>>>>> should be same as the port name in your wsdl.
>>>>>>
>>>>>> I guess this mismatch which cause  soap-operation missing, but again,
>>>>>> please use cxf bc provider endpoint for better soap support.
>>>>>>
>>>>>> Hope this helps.
>>>>>> Freeman
>>>>>>>
>>>>>>> regards, Marco
>>>>>>>
>>>>>>> Am 13.04.2011 05:05, schrieb Freeman Fang:
>>>>>>>>
>>>>>>>> Hi,
>>>>>>>>
>>>>>>>> My comment inline
>>>>>>>> On 2011-4-12, at 下午11:07, Marco Westermann wrote:
>>>>>>>>
>>>>>>>>> Hi,
>>>>>>>>>
>>>>>>>>> I fear I need further assistence. What I really miss is a tutorial
>>>>>>>>> where an external web service is called.
>>>>>>>>>
>>>>>>>>> What I have done:
>>>>>>>>>
>>>>>>>>> I created a http-component-su qbus-article-poll-su (this wrappes
>>>>>>>>> the
>>>>>>>>> external web service)
>>>>>>>>>
>>>>>>>>> in the qbus-article-camel-su I implemented a simple camel route
>>>>>>>>> where
>>>>>>>>> the service should be called and the response is written to a log,
>>>>>>>>> so I can
>>>>>>>>> see, that the request works. But my problems start when
>>>>>>>>> implementing the
>>>>>>>>> service-stub.
>>>>>>>>>
>>>>>>>>> This is my service definion
>>>>>>>>>
>>>>>>>>> <beans xmlns:http="http://servicemix.apache.org/http/1.0";
>>>>>>>>>    xmlns:impl="http://DefaultNamespace";
>>>>>>>>>    xmlns="http://www.springframework.org/schema/beans";
>>>>>>>>>    xmlns:xsi="http://http://www.w3.org/2001/XMLSchema-instance";
>>>>>>>>>    xsi:schemaLocation="http://servicemix.apache.org/http/1.0
>>>>>>>>> http://servicemix.apache.org/schema/servicemix-http-3.2.3.xsd
>>>>>>>>>    http://www.springframework.org/schema/beans
>>>>>>>>> http://www.springframework.org/schema/beans/spring-beans-2.0.xsd";>
>>>>>>>>>
>>>>>>>>> <http:soap-provider service="impl:ArticleBASService"
>>>>>>>>>              endpoint="impl:ArticleBASSoapBinding"
>>>>>>>>>
>>>>>>>>>  wsdl="http://arche:8080/ArticleService/services/ArticleBAS?wsdl";
>>>>>>>>> />
>>>>>>>>>
>>>>>>>>> </beans>
>>>>>>>>>
>>>>>>>>> I think there is still something wrong: First of all I get
>>>>>>>>> exceptions
>>>>>>>>> in Servicemix:
>>>>>>>>> Cound not find port 'impl:ArticleBAS' in wsdl for service
>>>>>>>>> '{http://DefaultNamespace}ArticleBASService'
>>>>>>>>
>>>>>>>> You need check your port name in your wsdl, it need match your http
>>>>>>>> endpoint configuration
>>>>>>>>>
>>>>>>>>> then I miss the reference to the operation I want to call (e.g.
>>>>>>>>> getChangedArticles). Do I have to give this in the camel route or
>>>>>>>>> in the
>>>>>>>>> http-component?
>>>>>>>>>
>>>>>>>>> May somebody help me with my knowledge gaps? I attached the
>>>>>>>>> sourcecode for my servicemix implementation and the wsdl-definition
>>>>>>>>> of the
>>>>>>>>> external service.
>>>>>>>>
>>>>>>>> IMHO, to do a soap based operation, you'd better use cxf bc provider
>>>>>>>> here, which is more powerful for soap operation.
>>>>>>>> We actually have testcase[1] to demonstrate how cxf bc provider
>>>>>>>> works
>>>>>>>> for several different cases, you may need take a look.
>>>>>>>>
>>>>>>>>
>>>>>>>> [1]https://svn.apache.org/repos/asf/servicemix/components/trunk/bindings/servicemix-cxf-bc/src/test/java/org/apache/servicemix/cxfbc/CxfBcProviderTest.java
>>>>>>>>
>>>>>>>> Freeman
>>>>>>>>>
>>>>>>>>> Many thanks and best regards,
>>>>>>>>> Marco
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Am 08.04.2011 16:45, schrieb Matt Pavlovich:
>>>>>>>>>>
>>>>>>>>>> Marco-
>>>>>>>>>>
>>>>>>>>>> Check out XSLT.  You can extract data from that XML document and
>>>>>>>>>> output it it any variety of formats, not just XML.  You'll want to
>>>>>>>>>> capture
>>>>>>>>>> the exact XML from "service one", so you can test your XSLT's.  A
>>>>>>>>>> handy tool
>>>>>>>>>> to do that is TCP Mon, available as an Eclipse plugin, or a stand
>>>>>>>>>> alone
>>>>>>>>>> tool.
>>>>>>>>>>
>>>>>>>>>> XSLT:
>>>>>>>>>> http://w3schools.com/xsl/default.asp
>>>>>>>>>>
>>>>>>>>>> TCPMon:
>>>>>>>>>> http://ws.apache.org/commons/tcpmon/download.cgi
>>>>>>>>>>
>>>>>>>>>> Matt Pavlovich
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On Apr 8, 2011, at 9:33 AM, Marco Westermann wrote:
>>>>>>>>>>
>>>>>>>>>>> Hi, thank you for your response,
>>>>>>>>>>>
>>>>>>>>>>> in fact there is some transformation needed for the response
>>>>>>>>>>> payload of service call one.
>>>>>>>>>>>
>>>>>>>>>>> The service one wrappes an activeX-Object and returns a string as
>>>>>>>>>>> part of a complex type:
>>>>>>>>>>>
>>>>>>>>>>> <element name="getChangedArticlesResponse">
>>>>>>>>>>> <complexType>
>>>>>>>>>>> <sequence>
>>>>>>>>>>> <element name="getChangedArticlesReturn"
>>>>>>>>>>>         type="xsd:string" />
>>>>>>>>>>> </sequence>
>>>>>>>>>>> </complexType>
>>>>>>>>>>> </element>
>>>>>>>>>>>
>>>>>>>>>>> the string itself contains exactly the message which has to be
>>>>>>>>>>> routed to service 2. Any idea how to make this work?
>>>>>>>>>>>
>>>>>>>>>>> Thank you!
>>>>>>>>>>>
>>>>>>>>>>> Marco
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Am 07.04.2011 17:39, schrieb Matt Pavlovich:
>>>>>>>>>>>>
>>>>>>>>>>>> Hi Marco-
>>>>>>>>>>>>
>>>>>>>>>>>> You could implement a very simple solution using Camel running
>>>>>>>>>>>> in
>>>>>>>>>>>> ServiceMix to do that.  Look into the timer, or quartz Camel
>>>>>>>>>>>> components to
>>>>>>>>>>>> start.
>>>>>>>>>>>>
>>>>>>>>>>>> It would look something like:
>>>>>>>>>>>>
>>>>>>>>>>>> <route>
>>>>>>>>>>>> <from uri="timer..  configure to kick off every 5 mintues" />
>>>>>>>>>>>> <to uri="http://webservice1:8080/call />
>>>>>>>>>>>> <to uri="http://webservice2:8080/call2 />
>>>>>>>>>>>> </route>
>>>>>>>>>>>>
>>>>>>>>>>>> The response from the webservice1 would be directed as the input
>>>>>>>>>>>> to webservice2.  As long as the payload is exactly the same, you
>>>>>>>>>>>> don't need
>>>>>>>>>>>> to do anything.  If there are slight changes to the xml, you can
>>>>>>>>>>>> insert a
>>>>>>>>>>>> XSLT to take the response from webservice1 and send it to
>>>>>>>>>>>> webservice2 as the
>>>>>>>>>>>> input.
>>>>>>>>>>>>
>>>>>>>>>>>> Time based invocation:
>>>>>>>>>>>> http://camel.apache.org/timer.html
>>>>>>>>>>>> http://camel.apache.org/quartz.html
>>>>>>>>>>>>
>>>>>>>>>>>> Simple web service calls:
>>>>>>>>>>>> http://camel.apache.org/http.html
>>>>>>>>>>>>
>>>>>>>>>>>> Advanced web service:
>>>>>>>>>>>> http://camel.apache.org/cxf.html
>>>>>>>>>>>>
>>>>>>>>>>>> XSLT:
>>>>>>>>>>>> http://camel.apache.org/xslt.html
>>>>>>>>>>>>
>>>>>>>>>>>> Matt Pavlovich
>>>>>>>>>>>>
>>>>>>>>>>>> On Apr 7, 2011, at 7:59 AM, Marco Westermann wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>> Hi,
>>>>>>>>>>>>>
>>>>>>>>>>>>> I try to implement the following process:
>>>>>>>>>>>>>
>>>>>>>>>>>>> every 5 minutes I want to call a web Service take the answer
>>>>>>>>>>>>> and
>>>>>>>>>>>>> call another web service with the return value from the first
>>>>>>>>>>>>> call.
>>>>>>>>>>>>> using bpel would be nice to do the job (ode?). Is there a
>>>>>>>>>>>>> tutorial which does similar tasks? I think I have still an
>>>>>>>>>>>>> understanding
>>>>>>>>>>>>> problem on how to use serviceMix.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Thank you for all advice you can give.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Marco
>>>>>>>>>>>>
>>>>>>>>>>>> __________ Hinweis von ESET NOD32 Antivirus,
>>>>>>>>>>>> Signaturdatenbank-Version 6025 (20110408) __________
>>>>>>>>>>>>
>>>>>>>>>>>> E-Mail wurde geprüft mit ESET NOD32 Antivirus.
>>>>>>>>>>>>
>>>>>>>>>>>> http://www.eset.com
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>> __________ Hinweis von ESET NOD32 Antivirus,
>>>>>>>>>> Signaturdatenbank-Version 6026 (20110408) __________
>>>>>>>>>>
>>>>>>>>>> E-Mail wurde geprüft mit ESET NOD32 Antivirus.
>>>>>>>>>>
>>>>>>>>>> http://www.eset.com
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>> <qbus_01.zip><ArticleBAS.wsdl>
>>>>>>>>
>>>>>>>> ---------------------------------------------
>>>>>>>> Freeman Fang
>>>>>>>>
>>>>>>>> FuseSource
>>>>>>>> Email:[email protected]
>>>>>>>> Web: fusesource.com
>>>>>>>> Twitter: freemanfang
>>>>>>>> Blog: http://freemanfang.blogspot.com
>>>>>>>> Connect at CamelOne May 24-26
>>>>>>>> The Open Source Integration Conference
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> __________ Hinweis von ESET NOD32 Antivirus,
>>>>>>>> Signaturdatenbank-Version
>>>>>>>> 6037 (20110412) __________
>>>>>>>>
>>>>>>>> E-Mail wurde gepr�ft mit ESET NOD32 Antivirus.
>>>>>>>>
>>>>>>>> http://www.eset.com
>>>>>>>>
>>>>>>>>
>>>>>> ---------------------------------------------
>>>>>> Freeman Fang
>>>>>>
>>>>>> FuseSource
>>>>>> Email:[email protected]
>>>>>> Web: fusesource.com
>>>>>> Twitter: freemanfang
>>>>>> Blog: http://freemanfang.blogspot.com
>>>>>> Connect at CamelOne May 24-26
>>>>>> The Open Source Integration Conference
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> __________ Hinweis von ESET NOD32 Antivirus, Signaturdatenbank-Version
>>>>>> 6037 (20110412) __________
>>>>>>
>>>>>> E-Mail wurde gepr�ft mit ESET NOD32 Antivirus.
>>>>>>
>>>>>> http://www.eset.com
>>>>>>
>>>>>>
>>>> ---------------------------------------------
>>>> Freeman Fang
>>>>
>>>> FuseSource
>>>> Email:[email protected]
>>>> Web: fusesource.com
>>>> Twitter: freemanfang
>>>> Blog: http://freemanfang.blogspot.com
>>>> Connect at CamelOne May 24-26
>>>> The Open Source Integration Conference
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> __________ Hinweis von ESET NOD32 Antivirus, Signaturdatenbank-Version
>>>> 6039 (20110413) __________
>>>>
>>>> E-Mail wurde gepr�ft mit ESET NOD32 Antivirus.
>>>>
>>>> http://www.eset.com
>>>>
>>>>
>>>
>>
>>
>
>



-- 
Claus Ibsen
-----------------
FuseSource
Email: [email protected]
Web: http://fusesource.com
CamelOne 2011: http://fusesource.com/camelone2011/
Twitter: davsclaus
Blog: http://davsclaus.blogspot.com/
Author of Camel in Action: http://www.manning.com/ibsen/

Reply via email to