camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Liav Ezer <liav.e...@gmail.com>
Subject Re: How do i call an HTTP Provider end-pont from the process method?
Date Sat, 10 Jan 2009 19:51:19 GMT

Hi Claus,

I changed the notation as needed to: 

producer.sendBody("jbi:endpoint:http://localhost:8080/LiavHello/services/LiavHelloImpl",
"Netania");

 SMX console now output some wierd error - googling it comes up with some
xml parsing error:

[Fatal Error] :1:1: Content is not allowed in prolog.DEBUG -
DeliveryChannelImpl            - Exception processing:
ID:10.236.11.194-11ec1f3a450-2:291 in DeliveryChannel{servicemix-camel}
ERROR - DeadLetterChannel              - Failed delivery for exchangeId:
ID-LIAVE02/4519-1231614935663/0-50. On delivery attempt: 0 caught:
org.apache
org.apache.servicemix.camel.JbiException:
javax.jbi.messaging.MessagingException: Could not find route for exchange:
InOnly[
  id: ID:10.236.11.194-11ec1f3a450-2:291
  status: Active
  role: provider

Claus Ibsen-2 wrote:
> 
> 
> 
> This is the SMX Provider xbean:
> 
> <?xml version="1.0" encoding="UTF-8"?>
> <beans xmlns:http="http://servicemix.apache.org/http/1.0"
>        xmlns:wsn="http://com.amdocs.oxp/esb"
>        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.3.1.3-fuse.xsd
>        http://www.springframework.org/schema/beans
> http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
>                  
>                 <http:endpoint service="wsn:LiavHelloImplService"
>                  endpoint="wsn:LiavHelloImpl"
>                  role="provider"
>                 
> locationURI="http://localhost:8080/LiavHello/services/LiavHelloImpl"
>                  wsdlResource="c:/HTTPReceiverServices/LiavHelloImpl.wsdl"
>                  defaultMep="http://www.w3.org/2004/08/wsdl/in-out"
>                  soap="true" />
> </beans>
> Any clue?
> On Sat, Jan 10, 2009 at 4:17 PM, Liav Ezer <liav.ezer@gmail.com> wrote:
>>
>> Hi Claus,
>>
>> Well i'll stick with the Http SMX provider end-point. I guess it's should
>> integrate with camel routing with no problem.
>>
>> Ok what i did is the advise you gave me a few answers ago:
>>
>> ProducerTemplate producer =
>> exchange.getContext().createProducerTemplate();
>> Object response =
>> producer.sendBody("http://localhost:8080/LiavHello/services/LiavHelloImpl",
>> "Daviv");
> See below
> 
> 
>>
>> And got this exception (SMX console after deply):
>>
>> : No endpoint could be found for:
>> http://localhost:8080/LiavHello/services/LiavHelloImpl
>> org.apache.camel.NoSuchEndpointException: No endpoint could be found for:
>> http://localhost:8080/LiavHello/services/LiavHelloImpl
>>
>> LiavHelloImpl is the wsdlsoap:address location of the wsdl file
>> representing
>> the LiavHelloImp web project (under a running tomcat 6.0).
>>
>> Can you advise? It seems that the routing trying to be accomplished but
>> something "configi" is messed up.
>>
>> Here is my provider xbean:
>>
>> <http:endpoint service="wsn:LiavHelloImplService"
>>                 endpoint="wsn:LiavHelloImpl"
>>                 role="provider"
>>
>> locationURI="http://localhost:8080/LiavHello/services/LiavHelloImpl"
>>                 wsdlResource="c:/HTTPReceiverServices/LiavHelloImpl.wsdl"
>>                 defaultMep="http://www.w3.org/2004/08/wsdl/in-out"
>>                 soap="true" />
> When you want from Camel to call service on SMX then you must use the
> camel-jbi component that delegates to the SU in SMX.
> So you need to add the jbi prefix in front.
> See: http://activemq.apache.org/camel/jbi.html
> 
> It should be something like this. By by all means I am not SMX expert
> (yet):
> producer.sendBody("jbi:service:wsn:LiavHelloImplService", "Daviv");
> 
> The jbi component have different notation so please check it out.
> 
> If you manage to get it working, then please write back how to, so we
> can improve the documentation and help others in the future.
> 
> 
> 
>>
>> Thanks!
>>
>>
>> Claus Ibsen-2 wrote:
>>>
>>> On Sat, Jan 10, 2009 at 3:02 PM, Liav Ezer <liav.ezer@gmail.com> wrote:
>>>>
>>>> Hi Claus,
>>>>
>>>> I did follow this camel example & set up a timer 'from' end-point which
>>>> my
>>>> processor 'catched'.
>>>>
>>>> My will is to query this 'catched' data by sending it to a different
>>>> end-point such as a service provider.
>>>>
>>>> Therefore, i deployed two SU's in my servicemix: One for the camel
>>>> routing
>>>> (timer example) & two is for
>>>>
>>>> the HTTP servicemix provider which i want to invoke in the proceesor.
>>>>
>>>> My question seems simple as long as an API exists for it:
>>>>
>>>> When my Processor class is instansiated than the process() method is
>>>> invoked:
>>>>
>>>> public void process(Exchange exchange) throws Exception {
>>>>
>>>> The exchange.getIn() consist my 'from' end-point data (=the timer).
>>>>
>>>> I need the API to fetch the Http servicemix provider end-point & to
>>>> send
>>>> hime a request with this data.
>>> If you want to send FROM Camel to SMX then you need to use the
>>> camel-jbi component. That is you get endpoints FROM Camel starting
>>> with the "jbi:" prefix. See camel-jbi component.
>>>
>>>
>>>
>>>>
>>>> One extra small question: Do i need to replace my provider SU with a
>>>> camel
>>>> http producer SU?
>>> If you are using SMX 3.x then you dont as SMX has one SU for Camel.
>>> However if you need to use any of the other camel components from SMX
>>> you need to have them in the classpath as well, such as
>>> camel-http.jar.
>>>
>>>
>>> (In SMX 4.x its all OSGi land and you need to install features into
>>> SMX.)
>>>
>>> A bit confused now. Which http provider do you want to use?
>>> - SMX Http provider
>>> - Camel http provider
>>>
>>>
>>>>
>>>> Thanks.
>>>>
>>>> Claus Ibsen-2 wrote:
>>>>>
>>>>> Hi
>>>>>
>>>>> Yeah its a bit mixed up since Camel and ServiceMix have classes with
>>>>> common name: Endpoint, Exchange etc.
>>>>>
>>>>> All the code I have shown assumes pure Camel code.
>>>>>
>>>>> I advice to check the ServceMix docu about using Camel in ServiceMix.
>>>>> And get a basic example running. Such as this example
>>>>> http://servicemix.apache.org/camel-example.html
>>>>>
>>>>> You could use that as a starting point to get Camel invoking your HTTP
>>>>> server. Just let the timer start it.
>>>>> Then later your can connect using SMX instead of the camel timer.
>>>>>
>>>>>
>>>>>
>>>>> On Sat, Jan 10, 2009 at 12:53 PM, Liav Ezer <liav.ezer@gmail.com>
>>>>> wrote:
>>>>>>
>>>>>> Hi Claus again,
>>>>>>
>>>>>> I addition to what i asked in my previouse response here is a
>>>>>> question
>>>>>> regarding the producer snippet which you gave in your last answer:
>>>>>>
>>>>>> I indeed wrote the following in my process() method:
>>>>>>
>>>>>> ProducerTemplate producer =
>>>>>>
>>>>>> exchange.getCamelContext().createProducerTemplate();
>>>>>>                            Object response =
>>>>>>
>>>>>> producer.sendBody("http://myserver.com/myapp?foo=bar", "Liav Camel
>>>>>> POC");
>>>>>>
>>>>>> but i don't have the camel context at hand (saying "The method
>>>>>> getCamelContext() is undefined for the type Exchange").
>>>>>>  & also do i need to deploy a camel http producer su instead
of an
>>>>>> http
>>>>>> service mix provider?
>>>>>>
>>>>>> Claus Ibsen-2 wrote:
>>>>>>>
>>>>>>> Hi
>>>>>>>
>>>>>>> When you are working with ServiceMix you must use the JBI component
>>>>>>> in
>>>>>>> Camel
>>>>>>> http://activemq.apache.org/camel/jbi.html
>>>>>>>
>>>>>>> So your endpoints should starting with "jbi:XXXX"
>>>>>>>
>>>>>>> And ServiceMix has some Camel docu here:
>>>>>>> http://servicemix.apache.org/servicemix-camel.html
>>>>>>>
>>>>>>> Could you take a look at this docu a bit. There might be some
help
>>>>>>> there.
>>>>>>>
>>>>>>> Try to get something more easier working with SMX and Camel and
then
>>>>>>> later do the stuff you want with the dynamic add a camel context.
>>>>>>>
>>>>>>>
>>>>>>> On Sat, Jan 10, 2009 at 12:39 PM, Liav Ezer <liav.ezer@gmail.com>
>>>>>>> wrote:
>>>>>>>>
>>>>>>>> Hi Claus,
>>>>>>>>
>>>>>>>> I read your tutorial & learnt from it. Thanks. I adopted
the cxf
>>>>>>>> framework
>>>>>>>> for now.
>>>>>>>>
>>>>>>>> Regarding my project (as stated above in snippets):
>>>>>>>>
>>>>>>>> I planted the following camel routing logic at my processor
class:
>>>>>>>>
>>>>>>>> process method - with camel:
>>>>>>>>
>>>>>>>> public void process(Exchange exchange) throws Exception {
>>>>>>>>
>>>>>>>>  CamelContext camel = new DefaultCamelContext();
>>>>>>>>  camel.start();
>>>>>>>>
>>>>>>>>  Component component = (Component)
>>>>>>>> camel.getComponent("http-provider-su");
>>>>>>>>
>>>>>>>>  Endpoint endpoint = (Endpoint) ((org.apache.camel.Component)
>>>>>>>> component).createEndpoint("provider:com.amdocs.oxp.esb");
>>>>>>>>
>>>>>>>>  exchange.getIn().setBody("Liav testing here!");
>>>>>>>>
>>>>>>>>  Producer producer = ((org.apache.camel.Endpoint)
>>>>>>>> endpoint).createProducer();
>>>>>>>>
>>>>>>>>  producer.start();
>>>>>>>>  producer.process(exchange);
>>>>>>>>  producer.stop();
>>>>>>>>
>>>>>>>>  //System.out.println(exchange.getIn().toString() + "process
>>>>>>>> activated
>>>>>>>> by
>>>>>>>> SU");
>>>>>>>> }
>>>>>>>>
>>>>>>>> And got the following exception while SA's jar was deployed:
>>>>>>>>
>>>>>>>> ERROR - DeadLetterChannel              - Failed delivery
for
>>>>>>>> exchangeId:
>>>>>>>> ID-LIAVE02/1885-1231586726193/0-0. On delivery attemp
>>>>>>>> java.lang.NullPointerException
>>>>>>>>        at
>>>>>>>> org.apache.servicemix.tutorial.camel.MyProcessor.process(MyProcessor.java:33)
>>>>>>>> at
>>>>>>>> org.apache.camel.impl.ProcessorEndpoint.onExchange(ProcessorEndpoint.java:92)
>>>>>>>>        at
>>>>>>>> org.apache.camel.impl.ProcessorEndpoint$1.process(ProcessorEndpoint.java:66)
>>>>>>>>        at
>>>>>>>> org.apache.camel.impl.converter.AsyncProcessorTypeConverter$ProcessorToAsyncProcessorBridge.process(AsyncProcessorT
>>>>>>>>        at
>>>>>>>> org.apache.camel.processor.SendProcessor.process(SendProcessor.java:75)
>>>>>>>>        at
>>>>>>>> org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:146)
>>>>>>>>        at
>>>>>>>> org.apache.camel.processor.DeadLetterChannel.process(DeadLetterChannel.java:90)
>>>>>>>>        at
>>>>>>>> org.apache.camel.processor.Pipeline.process(Pipeline.java:101)
>>>>>>>>        at
>>>>>>>> org.apache.camel.processor.Pipeline.process(Pipeline.java:85)
>>>>>>>>        at
>>>>>>>> org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:39)
>>>>>>>>        at
>>>>>>>> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:41)
>>>>>>>>        at
>>>>>>>> org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:66)
>>>>>>>>        at
>>>>>>>> org.apache.camel.component.timer.TimerConsumer.sendTimerExchange(TimerConsumer.java:91)
>>>>>>>>        at
>>>>>>>> org.apache.camel.component.timer.TimerConsumer$1.run(TimerConsumer.java:48)
>>>>>>>>        at java.util.TimerThread.mainLoop(Timer.java:512)
>>>>>>>>        at java.util.TimerThread.run(Timer.java:462)
>>>>>>>>
>>>>>>>> Be advise that line 33 is:Endpoint endpoint = (Endpoint)
>>>>>>>> ((org.apache.camel.Component)
>>>>>>>> component).createEndpoint("provider:com.amdocs.oxp.esb");
>>>>>>>>
>>>>>>>> My questions:
>>>>>>>>
>>>>>>>> 1. As bolded above i "fetched" my provider su component by
staing
>>>>>>>> it's
>>>>>>>> name
>>>>>>>> - is it correct?
>>>>>>>>
>>>>>>>> 2. I used the following servicemix object (not camel's) since
i
>>>>>>>> work
>>>>>>>> with
>>>>>>>> servicemix provider endpoint. That's the reason for all the
casting
>>>>>>>> in
>>>>>>>> my
>>>>>>>> code:
>>>>>>>> import org.apache.servicemix.jbi.deployment.Component;
>>>>>>>> import org.apache.servicemix.jbi.framework.Endpoint;
>>>>>>>>
>>>>>>>> Is it correct?
>>>>>>>>
>>>>>>>> Thank again,
>>>>>>>> Liav Ezer.
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> Claus Ibsen-2 wrote:
>>>>>>>>>
>>>>>>>>> Hi
>>>>>>>>>
>>>>>>>>> You can use the producer template to call an external
http server
>>>>>>>>> and
>>>>>>>>> get the response.
>>>>>>>>>
>>>>>>>>> See this tutorial:
>>>>>>>>> http://activemq.apache.org/camel/tutorial-axis-camel.html
>>>>>>>>>
>>>>>>>>> From the section - integrating Camel
>>>>>>>>>
>>>>>>>>> Its kinda the same but its just uses the producer template
to save
>>>>>>>>> a
>>>>>>>>> file. Its the same API for using any of the camel components.
>>>>>>>>>
>>>>>>>>> Little sidenote:
>>>>>>>>> And since you use InOut you should use: requestBody instread
of
>>>>>>>>> sendBody. However Camel is not to stricky about this
yet so if you
>>>>>>>>> use
>>>>>>>>> a send instead of request then it should work as well.
>>>>>>>>>
>>>>>>>>> The demo shows how to inject a producer template from
spring into
>>>>>>>>> your
>>>>>>>>> bean class = your processor. when you have this template
you can
>>>>>>>>> call
>>>>>>>>> the external http server and get the response using the
>>>>>>>>> requestBody
>>>>>>>>> method.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Thu, Jan 8, 2009 at 1:46 PM, Liav Ezer <liav.ezer@gmail.com>
>>>>>>>>> wrote:
>>>>>>>>>>
>>>>>>>>>> Hi,
>>>>>>>>>>
>>>>>>>>>> Here is my camel-context:
>>>>>>>>>>
>>>>>>>>>>  <camelContext id="camel"
>>>>>>>>>> xmlns="http://activemq.apache.org/camel/schema/spring">
>>>>>>>>>>    <package>org.apache.servicemix.tutorial.camel</package>
>>>>>>>>>>  </camelContext>
>>>>>>>>>>
>>>>>>>>>>  <bean id="myProcessor"
>>>>>>>>>> class="org.apache.servicemix.tutorial.camel.MyProcessor"/>
>>>>>>>>>>
>>>>>>>>>> Here is my RouteBuilder java file:
>>>>>>>>>>
>>>>>>>>>> public class MyRouteBuilder extends RouteBuilder
{
>>>>>>>>>>        public void configure() {
>>>>>>>>>>
>>>>>>>>>> from("timer://tutorial?fixedRate=true&delay=3000&period=10000")
>>>>>>>>>>                .setBody(constant(".....................Liav
Camel
>>>>>>>>>> POC......................."))
>>>>>>>>>>                        .to("myProcessor");
>>>>>>>>>>
>>>>>>>>>>    }
>>>>>>>>>> }
>>>>>>>>>>
>>>>>>>>>> Here is my processor java file:
>>>>>>>>>> public class MyProcessor implements Processor {
>>>>>>>>>>          public void process(Exchange exchange) throws
Exception
>>>>>>>>>> {
>>>>>>>>>>              //WANT TO INITIATE A CALL TO http pROVIDER
END POINT
>>>>>>>>>> &
>>>>>>>>>> PASS
>>>>>>>>>> THE
>>>>>>>>>> 'FROM'
>>>>>>>>>>                  // PARAMETRS RECIEVED PROIRE TO
THE PROCESSOR
>>>>>>>>>> INVOKE.
>>>>>>>>>> }
>>>>>>>>>> }
>>>>>>>>>>
>>>>>>>>>> Thanks.
>>>>>>>>>> --
>>>>>>>>>> View this message in context:
>>>>>>>>>> http://www.nabble.com/How-do-i-call-an-HTTP-Provider-end-pont-from-the-process-method--tp21351142s22882p21351142.html
>>>>>>>>>> Sent from the Camel - Users mailing list archive
at Nabble.com.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>>
>>>>>>>>> /Claus Ibsen
>>>>>>>>> Apache Camel Committer
>>>>>>>>> Blog: http://davsclaus.blogspot.com/
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> View this message in context:
>>>>>>>> http://www.nabble.com/How-do-i-call-an-HTTP-Provider-end-pont-from-the-process-method--tp21351142s22882p21387207.html
>>>>>>>> Sent from the Camel - Users mailing list archive at Nabble.com.
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>>
>>>>>>> /Claus Ibsen
>>>>>>> Apache Camel Committer
>>>>>>> Blog: http://davsclaus.blogspot.com/
>>>>>>>
>>>>>>>
>>>>>>
>>>>>> --
>>>>>> View this message in context:
>>>>>> http://www.nabble.com/How-do-i-call-an-HTTP-Provider-end-pont-from-the-process-method--tp21351142s22882p21387318.html
>>>>>> Sent from the Camel - Users mailing list archive at Nabble.com.
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>>
>>>>> /Claus Ibsen
>>>>> Apache Camel Committer
>>>>> Blog: http://davsclaus.blogspot.com/
>>>>>
>>>>>
>>>>
>>>> --
>>>> View this message in context:
>>>> http://www.nabble.com/How-do-i-call-an-HTTP-Provider-end-pont-from-the-process-method--tp21351142s22882p21388391.html
>>>> Sent from the Camel - Users mailing list archive at Nabble.com.
>>>>
>>>>
>>>
>>>
>>>
>>> --
>>>
>>> /Claus Ibsen
>>> Apache Camel Committer
>>> Blog: http://davsclaus.blogspot.com/
>>>
>>>
>>
>> --
>> View this message in context:
>> http://www.nabble.com/How-do-i-call-an-HTTP-Provider-end-pont-from-the-process-method--tp21351142s22882p21389069.html
>> Sent from the Camel - Users mailing list archive at Nabble.com.
>>
>>
> 
> 
> 
> -- 
> 
> /Claus Ibsen
> Apache Camel Committer
> Blog: http://davsclaus.blogspot.com/
> 
> 

-- 
View this message in context: http://www.nabble.com/How-do-i-call-an-HTTP-Provider-end-pont-from-the-process-method--tp21351142s22882p21390941.html
Sent from the Camel - Users mailing list archive at Nabble.com.


Mime
View raw message