camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Gert Vanthienen <gert.vanthie...@skynet.be>
Subject Re: XStream with JBI
Date Mon, 27 Oct 2008 10:07:21 GMT
Raul,

Just committed a fix for this issue.  Could you try building a -SNAPSHOT 
of the servicemix-camel component locally to ensure that this works for 
you? 

Thanks,

Gert

raulvk.soa wrote:
> There you go: https://issues.apache.org/activemq/browse/SM-1654.
>
> Is there really a necessity the servicemix-camel component puts the exchange
> in a specific JbiExchange? Can't we just use a generic Exchange, and place
> the limitation of XML messages only at the component? This way, the XML
> limitation would be eliminated. The JBI component should throw an exception
> if it receives a message (from within Camel, obviously) that contains
> non-XML content.
>
> Could this be a feasible solution?
>
>
>
> Gert Vanthienen wrote:
>   
>> L.S.,
>>
>> Could you open a JIRA issue for this on the servicemix-camel component?  
>> This use case should be supported without having to do any intermediate 
>> processing -- even though the original JBI Message uses XML, there's no 
>> reason why the payload has to remain an XML document once you're inside 
>> Camel.  We should get this to work with a simple 
>> from("jbi:..").unmarshal().to("ibatis:...").
>>
>> Thanks,
>>
>> Gert
>>
>> raulvk.soa wrote:
>>     
>>> XStream does not throw any exception (probably because it does its
>>> processing well and it returns the generated object). However, the object
>>> returned by XStream is not set as the IN message because it is not XML.
>>> When
>>> iBATIS receives the message, it throws an exception because the Body is
>>> NULL.
>>>
>>> I have created the following test to illustrate this behaviour:
>>>
>>>
>>>     	XStream xst = new XStream();
>>>     	xst.alias("Person", Person.class);
>>>     	XStreamDataFormat xstdf = new XStreamDataFormat();
>>>     	xstdf.setXStream(xst);
>>>
>>>
>>>     	from("jbi:service:http://www.mycompany.org/xstreamService")
>>>     		.convertBodyTo(String.class).process(new Processor() {
>>> 	    			public void process(Exchange exchange) throws Exception {
>>> 	    				System.out.println("11111111-------------------->>>>>>
" +
>>> exchange.getIn());
>>> 	    				if (exchange.getIn() != null)
>>> 	    					System.out.println("::::: Body: " +
>>> exchange.getIn().getBody());
>>> 	    				else
>>> 	    					System.out.println("::::: Body IS NULL");
>>> 	    			}
>>> 	    		})
>>> 	    		.unmarshal(xstdf).process(new Processor() {
>>> 	    			public void process(Exchange exchange) throws Exception {
>>> 	    				System.out.println("22222222-------------------->>>>>>
" +
>>> exchange.getIn());
>>> 	    				if (exchange.getIn() != null)
>>> 	    					System.out.println("::::: Body: " +
>>> exchange.getIn().getBody());
>>> 	    				else
>>> 	    					System.out.println("::::: Body IS NULL");
>>> 	    			}
>>> 	    		})
>>>
>>>
>>> Basically, this is what happens: 
>>>    - before XStream --> the in message is of type NormalisedMessageImpl,
>>> and
>>> the body is of type DOMSource.
>>>    - after XStream --> the in message is of type NormalisedMessageImpl,
>>> and
>>> the body is NULL.
>>>
>>> Basically, a solution that comes to mind is to convert the JbiExchange to
>>> a
>>> standard Camel Exchange... but where can I do this? I can't do this in a
>>> Processor, because it wont allow me to SUBSTITUTE the exchange itself....
>>>
>>> Any ideas?
>>>
>>>
>>>
>>> Gert Vanthienen wrote:
>>>   
>>>       
>>>> L.S.,
>>>>
>>>> What is the exception or error you are getting?  We should definitely 
>>>> support this use case out-of-the-box...
>>>>
>>>> Regards,
>>>>
>>>> Gert
>>>>
>>>> raulvk.soa wrote:
>>>>     
>>>>         
>>>>> Hi,
>>>>>
>>>>> I am using Camel embedded in ServiceMix. My camel route receives a JBI
>>>>> message, turns it into a Java Object by using XStream and then passes
>>>>> it
>>>>> on
>>>>> to iBATIS.
>>>>>
>>>>> However, I am facing problems with the XStream processing. I suspect
>>>>> that
>>>>> these are derived from the fact that the underlying Camel Exchange is
>>>>> actually a JbiExchange which only accepts XML as the in and out body
>>>>> messages.
>>>>>
>>>>> Therefore, I need to get rid of all the Jbi stuff and simply use a
>>>>> standard
>>>>> Camel Exchange which will allow me to set an Object as the in message.
>>>>>
>>>>> Is it possible to do so out of the box?
>>>>>
>>>>> Thanks!
>>>>>   
>>>>>       
>>>>>           
>>>> -----
>>>> ---
>>>> Gert Vanthienen
>>>> http://gertvanthienen.blogspot.com
>>>>
>>>>     
>>>>         
>>>   
>>>       
>>
>> -----
>> ---
>> Gert Vanthienen
>> http://gertvanthienen.blogspot.com
>>
>>     
>
>   


Mime
View raw message