You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@servicemix.apache.org by "raulvk.soa" <ra...@gmail.com> on 2008/10/06 18:37:06 UTC

Re: Getting Camel fault exception


Hi everyone,

A fix was provided and the issue was closed on JIRA. However, we are
encountering another problem derived from the fix, and Camel is still not
able to work with JBI Faults...... 

Please see my comment on https://issues.apache.org/activemq/browse/SM-1589
for follow-up on this issue.

Thanks.



raulvk.soa wrote:
> 
> Hi,
> 
> Has anyone come across this same bug?
> Could someone please give me a hand to fix this? I would very much
> appreciate your help as we are pretty much stuck in our development until
> this bug is fixed....
> 
> Thanks!!
> 
> 
> raulvk.soa wrote:
>> 
>> 
>> Hi,
>> 
>> I have been trying to fix this bug. I have modified the
>> org.apache.servicemix.camel.JbiExchange.createMessage(String name) to the
>> following:
>> 
>> private JbiMessage createMessage(String name) {
>>         if (messageExchange != null) {
>>             try {
>>                 NormalizedMessage msg = messageExchange.getMessage(name);
>>                 if (msg == null) {
>>                 	if(name.equals("fault")) {
>>                 		msg = messageExchange.createFault();
>>                 		messageExchange.setFault((Fault) msg);
>>                 	}
>>                 	else {
>> 	                    msg = messageExchange.createMessage();
>> 	                    messageExchange.setMessage(msg, name);
>>                 	}
>>                 }
>>                 return new JbiMessage(msg);
>>             } catch (JBIException e) {
>>                 throw new RuntimeException(e);
>>             }
>>         } else {
>>             return new JbiMessage();
>>         }
>>     }
>> 
>> 
>> However, now I get the following exception when a Fault is received as a
>> response:
>> 
>> 18:26:41,053 | ERROR - org.apache.camel.processor.Logger - Failed
>> delivery for exchangeId: ID-XXX-B624E47AF0/4562-1222189666671/0-147. On
>> delivery attempt: 1 caught: java.lang.IllegalStateException: component is
>> not owner
>> java.lang.IllegalStateException: component is not owner
>>         at
>> org.apache.servicemix.jbi.messaging.MessageExchangeImpl.setMessage(MessageExchangeImpl.java:338)
>>         at
>> org.apache.servicemix.jbi.messaging.MessageExchangeImpl.setFault(MessageExchangeImpl.java:290)
>>         at
>> org.apache.servicemix.camel.JbiExchange.createMessage(JbiExchange.java:170)
>>         at
>> org.apache.servicemix.camel.JbiExchange.createFaultMessage(JbiExchange.java:158)
>>         at
>> org.apache.servicemix.camel.JbiExchange.createFaultMessage(JbiExchange.java:39)
>>         at
>> org.apache.camel.impl.DefaultExchange.getFault(DefaultExchange.java:251)
>>         at
>> org.apache.servicemix.camel.JbiExchange.getFault(JbiExchange.java:83)
>>         at
>> org.apache.servicemix.camel.JbiExchange.getFault(JbiExchange.java:39)
>>         at
>> org.apache.camel.impl.DefaultExchange.getFault(DefaultExchange.java:246)
>>         at
>> org.apache.servicemix.camel.JbiExchange.getFault(JbiExchange.java:78)
>>         at
>> org.apache.servicemix.camel.JbiExchange.getFault(JbiExchange.java:39)
>>         at
>> org.apache.servicemix.camel.ToJbiProcessor.process(ToJbiProcessor.java:98)
>>         at
>> org.apache.servicemix.camel.JbiEndpoint$1.process(JbiEndpoint.java:57)
>>         at
>> org.apache.camel.impl.converter.AsyncProcessorTypeConverter$ProcessorToAsyncProcessorBridge.process(AsyncProcessorTypeConverter.java:43)
>>         at
>> org.apache.camel.processor.SendProcessor.process(SendProcessor.java:75)
>>         .....................
>> 
>> 
>> Any suggestion as to why this is happening and how can I fix this bug,
>> which is really blocking our development?
>> 
>> Thank you.
>> 
>> 
>> 
>> raulvk.soa wrote:
>>> 
>>> 
>>> Hi,
>>> 
>>> I have found the corresponding JIRA issue
>>> (https://issues.apache.org/activemq/browse/SM-1589), but it has minor
>>> priority.
>>> 
>>> Honestly, I believe that the priority of this one should be very high,
>>> as it is preventing Camel and ServiceMix to interact correctly. In our
>>> scenario, we are have come across this bug and as far as I can imagine,
>>> there is really no workaround to this until it is fixed!
>>> 
>>> Raul.
>>> 
>>> 
>>> Gert Vanthienen wrote:
>>>> 
>>>> Garry,
>>>> 
>>>> As far as I can see, you are absolutely right about this.  Could you 
>>>> raise a JIRA issue for it, please?  Feel free to add a unit test and a 
>>>> patch off course, we welcome contributions ;)!
>>>> 
>>>> Regards,
>>>> 
>>>> Gert
>>>> 
>>>> Garry wrote:
>>>>> Hi,
>>>>>
>>>>> While doing fault handling with Camel, I've been getting an exception:
>>>>>
>>>>>   javax.jbi.messaging.MessagingException: Setting fault, but message
>>>>> is not
>>>>> a fault
>>>>>   
>>>>> In my version of org.apache.servicemix.camel.JbiExchange, around line
>>>>> 153,
>>>>> method 'createFaultMessage' calls 'createMessage' with argument
>>>>> "fault."
>>>>> Method 'createMessage' might then create a normal - not fault -
>>>>> message and
>>>>> set it on the exchange as a FAULT which will, if I'm looking at it
>>>>> correctly,
>>>>> trigger the above exception. Does this make sense?
>>>> 
>>>>>
>>>>> Thanks, Garry
>>>>>
>>>>>   
>>>> 
>>>> 
>>>> 
>>>> -----
>>>> ---
>>>> Gert Vanthienen
>>>> http://www.anova.be
>>>> 
>>> 
>>> 
>> 
>> 
> 
> 

-- 
View this message in context: http://www.nabble.com/Getting-Camel-fault-exception-tp19401580p19841534.html
Sent from the ServiceMix - User mailing list archive at Nabble.com.


Re: Getting Camel fault exception

Posted by "raulvk.soa" <ra...@gmail.com>.

Well, I believe that after sending the MessageExchange through the JBI
DeliveryChannel, when the reply comes back, the underlying MessageExchange
on the JbiExchange is not set to the reply.

I believe that is the reason why the servicemix-camel component attempts to
create a new Fault message, because it doesn't find one in the JbiExchange
due to the fact that the underlying MessageExchange is still the request
one...

Therefore, there needs to be a mechanism to set the MessageExchange on the
JbiExchange, isn't it?

Am I completely off course here?




gnodet wrote:
> 
> Not sure.  Why would you want to overwrite the MessageExchange ? The
> exact same object is used when the response is received, so I don't
> really see the point.
> 
> 

-- 
View this message in context: http://www.nabble.com/Getting-Camel-fault-exception-tp19401580p19895713.html
Sent from the ServiceMix - User mailing list archive at Nabble.com.


Re: Getting Camel fault exception

Posted by Guillaume Nodet <gn...@gmail.com>.
Not sure.  Why would you want to overwrite the MessageExchange ? The
exact same object is used when the response is received, so I don't
really see the point.

On Wed, Oct 8, 2008 at 9:59 PM, raulvk <ra...@atosorigin.com> wrote:
>
>
> Yes, you are right. Just two remarks about that:
>
>  1) I doubt that Camel processors ever actually look into the JBI
> MessageExchange. They just look into the out, in, and fault messages
> AFAIK... Do you agree?
>
>  2) On my version of the code, I have created a new public setter on
> JbiExchange that allows us to overwrite the current MessageExchange with the
> response. Does this seem logical? In fact, this new setter doesn't only just
> set the MessageExchange, but also sets the in, out and fault messages on the
> JbiExchange by extracting them from the MessageExchange, in order to keep
> everything consistent.
>
> Does this seem OK?
>
> Thanks!
>
>
>
>
> gnodet wrote:
>>
>> The problem is that if we don't set the fault on the exchange, i fear
>> it will never really end up on the exchange.
>> The createFault() method does not associate the fault to the exchange.
>>
>> On Wed, Oct 8, 2008 at 8:26 PM, raulvk.soa <ra...@gmail.com> wrote:
>>>
>>> Hi everyone,
>>>
>>> Nice conversation with myself... ;)
>>>
>>> I have been looking into this problem and it seems that when a JBI Fault
>>> is
>>> received as a result of an InOut Exchange, a Fault Message will be
>>> initialized on the JbiExchange (which is Camel's representation of the
>>> actual JBI Exchange). The intention is to fill this new Fault Message
>>> with
>>> the content of the received Fault.
>>>
>>> Everything is OK and rational up until here. However, when the new Fault
>>> message is initialized, the servicemix-camel component attempts to SET
>>> the
>>> Fault message on the underlying MessageExchange as well, thus resulting
>>> in
>>> the "java.lang.IllegalStateException: component is not owner" exception,
>>> evidently because it is not within the consumer's scope to set a Fault!
>>>
>>> I guess this attempt to set the Fault on the JBI Message is done with
>>> good
>>> intention.... To keep the whole Camel Exchange consistent. However, it is
>>> not logically correct in practice.
>>>
>>> So my question is, in the createMessage(...) method of the
>>> org.apache.servicemix.camel.JbiExchange class, would it be safe to
>>> comment
>>> out the messageExchange.setFault() statement, to stop it from trying to
>>> set
>>> the Fault on the underlying MessageExchange?? Or could this have some
>>> negative impact elsewhere?
>>>
>>> The final result would be the following:
>>>
>>>
>>>  private JbiMessage createMessage(String name) {
>>>        if (messageExchange != null) {
>>>            try {
>>>                NormalizedMessage msg = messageExchange.getMessage(name);
>>>                if (msg == null) {
>>>                    if ("fault".equals(name)) {
>>>                        Fault f = messageExchange.createFault();
>>>                        //messageExchange.setFault(f);
>>>                        msg = f;
>>>                    } else {
>>>                        msg = messageExchange.createMessage();
>>>                        messageExchange.setMessage(msg, name);
>>>                    }
>>>                }
>>>                return new JbiMessage(msg);
>>>            } catch (JBIException e) {
>>>                throw new RuntimeException(e);
>>>            }
>>>        } else {
>>>            return new JbiMessage();
>>>        }
>>>    }
>>>
>>>
>>> Many thanks!!
>>>
>>>
>>>
>>> raulvk.soa wrote:
>>>>
>>>>
>>>> Hi everyone,
>>>>
>>>> A fix was provided and the issue was closed on JIRA. However, we are
>>>> encountering another problem derived from the fix, and Camel is still
>>>> not
>>>> able to work with JBI Faults......
>>>>
>>>> Please see my comment on
>>>> https://issues.apache.org/activemq/browse/SM-1589
>>>> for follow-up on this issue.
>>>>
>>>> Thanks.
>>>>
>>>>
>>>>
>>>> raulvk.soa wrote:
>>>>>
>>>>> Hi,
>>>>>
>>>>> Has anyone come across this same bug?
>>>>> Could someone please give me a hand to fix this? I would very much
>>>>> appreciate your help as we are pretty much stuck in our development
>>>>> until
>>>>> this bug is fixed....
>>>>>
>>>>> Thanks!!
>>>>>
>>>>>
>>>>> raulvk.soa wrote:
>>>>>>
>>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> I have been trying to fix this bug. I have modified the
>>>>>> org.apache.servicemix.camel.JbiExchange.createMessage(String name) to
>>>>>> the following:
>>>>>>
>>>>>> private JbiMessage createMessage(String name) {
>>>>>>         if (messageExchange != null) {
>>>>>>             try {
>>>>>>                 NormalizedMessage msg =
>>>>>> messageExchange.getMessage(name);
>>>>>>                 if (msg == null) {
>>>>>>                     if(name.equals("fault")) {
>>>>>>                             msg = messageExchange.createFault();
>>>>>>                             messageExchange.setFault((Fault) msg);
>>>>>>                     }
>>>>>>                     else {
>>>>>>                         msg = messageExchange.createMessage();
>>>>>>                         messageExchange.setMessage(msg, name);
>>>>>>                     }
>>>>>>                 }
>>>>>>                 return new JbiMessage(msg);
>>>>>>             } catch (JBIException e) {
>>>>>>                 throw new RuntimeException(e);
>>>>>>             }
>>>>>>         } else {
>>>>>>             return new JbiMessage();
>>>>>>         }
>>>>>>     }
>>>>>>
>>>>>>
>>>>>> However, now I get the following exception when a Fault is received as
>>>>>> a
>>>>>> response:
>>>>>>
>>>>>> 18:26:41,053 | ERROR - org.apache.camel.processor.Logger - Failed
>>>>>> delivery for exchangeId: ID-XXX-B624E47AF0/4562-1222189666671/0-147.
>>>>>> On
>>>>>> delivery attempt: 1 caught: java.lang.IllegalStateException: component
>>>>>> is not owner
>>>>>> java.lang.IllegalStateException: component is not owner
>>>>>>         at
>>>>>> org.apache.servicemix.jbi.messaging.MessageExchangeImpl.setMessage(MessageExchangeImpl.java:338)
>>>>>>         at
>>>>>> org.apache.servicemix.jbi.messaging.MessageExchangeImpl.setFault(MessageExchangeImpl.java:290)
>>>>>>         at
>>>>>> org.apache.servicemix.camel.JbiExchange.createMessage(JbiExchange.java:170)
>>>>>>         at
>>>>>> org.apache.servicemix.camel.JbiExchange.createFaultMessage(JbiExchange.java:158)
>>>>>>         at
>>>>>> org.apache.servicemix.camel.JbiExchange.createFaultMessage(JbiExchange.java:39)
>>>>>>         at
>>>>>> org.apache.camel.impl.DefaultExchange.getFault(DefaultExchange.java:251)
>>>>>>         at
>>>>>> org.apache.servicemix.camel.JbiExchange.getFault(JbiExchange.java:83)
>>>>>>         at
>>>>>> org.apache.servicemix.camel.JbiExchange.getFault(JbiExchange.java:39)
>>>>>>         at
>>>>>> org.apache.camel.impl.DefaultExchange.getFault(DefaultExchange.java:246)
>>>>>>         at
>>>>>> org.apache.servicemix.camel.JbiExchange.getFault(JbiExchange.java:78)
>>>>>>         at
>>>>>> org.apache.servicemix.camel.JbiExchange.getFault(JbiExchange.java:39)
>>>>>>         at
>>>>>> org.apache.servicemix.camel.ToJbiProcessor.process(ToJbiProcessor.java:98)
>>>>>>         at
>>>>>> org.apache.servicemix.camel.JbiEndpoint$1.process(JbiEndpoint.java:57)
>>>>>>         at
>>>>>> org.apache.camel.impl.converter.AsyncProcessorTypeConverter$ProcessorToAsyncProcessorBridge.process(AsyncProcessorTypeConverter.java:43)
>>>>>>         at
>>>>>> org.apache.camel.processor.SendProcessor.process(SendProcessor.java:75)
>>>>>>         .....................
>>>>>>
>>>>>>
>>>>>> Any suggestion as to why this is happening and how can I fix this bug,
>>>>>> which is really blocking our development?
>>>>>>
>>>>>> Thank you.
>>>>>>
>>>>>>
>>>>>>
>>>>>> raulvk.soa wrote:
>>>>>>>
>>>>>>>
>>>>>>> Hi,
>>>>>>>
>>>>>>> I have found the corresponding JIRA issue
>>>>>>> (https://issues.apache.org/activemq/browse/SM-1589), but it has minor
>>>>>>> priority.
>>>>>>>
>>>>>>> Honestly, I believe that the priority of this one should be very
>>>>>>> high,
>>>>>>> as it is preventing Camel and ServiceMix to interact correctly. In
>>>>>>> our
>>>>>>> scenario, we are have come across this bug and as far as I can
>>>>>>> imagine,
>>>>>>> there is really no workaround to this until it is fixed!
>>>>>>>
>>>>>>> Raul.
>>>>>>>
>>>>>>>
>>>>>>> Gert Vanthienen wrote:
>>>>>>>>
>>>>>>>> Garry,
>>>>>>>>
>>>>>>>> As far as I can see, you are absolutely right about this.  Could you
>>>>>>>> raise a JIRA issue for it, please?  Feel free to add a unit test and
>>>>>>>> a
>>>>>>>> patch off course, we welcome contributions ;)!
>>>>>>>>
>>>>>>>> Regards,
>>>>>>>>
>>>>>>>> Gert
>>>>>>>>
>>>>>>>> Garry wrote:
>>>>>>>>> Hi,
>>>>>>>>>
>>>>>>>>> While doing fault handling with Camel, I've been getting an
>>>>>>>>> exception:
>>>>>>>>>
>>>>>>>>>   javax.jbi.messaging.MessagingException: Setting fault, but
>>>>>>>>> message
>>>>>>>>> is not
>>>>>>>>> a fault
>>>>>>>>>
>>>>>>>>> In my version of org.apache.servicemix.camel.JbiExchange, around
>>>>>>>>> line
>>>>>>>>> 153,
>>>>>>>>> method 'createFaultMessage' calls 'createMessage' with argument
>>>>>>>>> "fault."
>>>>>>>>> Method 'createMessage' might then create a normal - not fault -
>>>>>>>>> message and
>>>>>>>>> set it on the exchange as a FAULT which will, if I'm looking at it
>>>>>>>>> correctly,
>>>>>>>>> trigger the above exception. Does this make sense?
>>>>>>>>
>>>>>>>>>
>>>>>>>>> Thanks, Garry
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> -----
>>>>>>>> ---
>>>>>>>> Gert Vanthienen
>>>>>>>> http://www.anova.be
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>
>>> --
>>> View this message in context:
>>> http://www.nabble.com/Getting-Camel-fault-exception-tp19401580p19884604.html
>>> Sent from the ServiceMix - User mailing list archive at Nabble.com.
>>>
>>>
>>
>>
>>
>> --
>> Cheers,
>> Guillaume Nodet
>> ------------------------
>> Blog: http://gnodet.blogspot.com/
>> ------------------------
>> Open Source SOA
>> http://open.iona.com
>>
>>
>
> --
> View this message in context: http://www.nabble.com/Getting-Camel-fault-exception-tp19401580p19886435.html
> Sent from the ServiceMix - User mailing list archive at Nabble.com.
>
>



-- 
Cheers,
Guillaume Nodet
------------------------
Blog: http://gnodet.blogspot.com/
------------------------
Open Source SOA
http://open.iona.com

Re: Getting Camel fault exception

Posted by raulvk <ra...@atosorigin.com>.

Yes, you are right. Just two remarks about that:

  1) I doubt that Camel processors ever actually look into the JBI
MessageExchange. They just look into the out, in, and fault messages
AFAIK... Do you agree? 

  2) On my version of the code, I have created a new public setter on
JbiExchange that allows us to overwrite the current MessageExchange with the
response. Does this seem logical? In fact, this new setter doesn't only just
set the MessageExchange, but also sets the in, out and fault messages on the
JbiExchange by extracting them from the MessageExchange, in order to keep
everything consistent.

Does this seem OK?

Thanks!




gnodet wrote:
> 
> The problem is that if we don't set the fault on the exchange, i fear
> it will never really end up on the exchange.
> The createFault() method does not associate the fault to the exchange.
> 
> On Wed, Oct 8, 2008 at 8:26 PM, raulvk.soa <ra...@gmail.com> wrote:
>>
>> Hi everyone,
>>
>> Nice conversation with myself... ;)
>>
>> I have been looking into this problem and it seems that when a JBI Fault
>> is
>> received as a result of an InOut Exchange, a Fault Message will be
>> initialized on the JbiExchange (which is Camel's representation of the
>> actual JBI Exchange). The intention is to fill this new Fault Message
>> with
>> the content of the received Fault.
>>
>> Everything is OK and rational up until here. However, when the new Fault
>> message is initialized, the servicemix-camel component attempts to SET
>> the
>> Fault message on the underlying MessageExchange as well, thus resulting
>> in
>> the "java.lang.IllegalStateException: component is not owner" exception,
>> evidently because it is not within the consumer's scope to set a Fault!
>>
>> I guess this attempt to set the Fault on the JBI Message is done with
>> good
>> intention.... To keep the whole Camel Exchange consistent. However, it is
>> not logically correct in practice.
>>
>> So my question is, in the createMessage(...) method of the
>> org.apache.servicemix.camel.JbiExchange class, would it be safe to
>> comment
>> out the messageExchange.setFault() statement, to stop it from trying to
>> set
>> the Fault on the underlying MessageExchange?? Or could this have some
>> negative impact elsewhere?
>>
>> The final result would be the following:
>>
>>
>>  private JbiMessage createMessage(String name) {
>>        if (messageExchange != null) {
>>            try {
>>                NormalizedMessage msg = messageExchange.getMessage(name);
>>                if (msg == null) {
>>                    if ("fault".equals(name)) {
>>                        Fault f = messageExchange.createFault();
>>                        //messageExchange.setFault(f);
>>                        msg = f;
>>                    } else {
>>                        msg = messageExchange.createMessage();
>>                        messageExchange.setMessage(msg, name);
>>                    }
>>                }
>>                return new JbiMessage(msg);
>>            } catch (JBIException e) {
>>                throw new RuntimeException(e);
>>            }
>>        } else {
>>            return new JbiMessage();
>>        }
>>    }
>>
>>
>> Many thanks!!
>>
>>
>>
>> raulvk.soa wrote:
>>>
>>>
>>> Hi everyone,
>>>
>>> A fix was provided and the issue was closed on JIRA. However, we are
>>> encountering another problem derived from the fix, and Camel is still
>>> not
>>> able to work with JBI Faults......
>>>
>>> Please see my comment on
>>> https://issues.apache.org/activemq/browse/SM-1589
>>> for follow-up on this issue.
>>>
>>> Thanks.
>>>
>>>
>>>
>>> raulvk.soa wrote:
>>>>
>>>> Hi,
>>>>
>>>> Has anyone come across this same bug?
>>>> Could someone please give me a hand to fix this? I would very much
>>>> appreciate your help as we are pretty much stuck in our development
>>>> until
>>>> this bug is fixed....
>>>>
>>>> Thanks!!
>>>>
>>>>
>>>> raulvk.soa wrote:
>>>>>
>>>>>
>>>>> Hi,
>>>>>
>>>>> I have been trying to fix this bug. I have modified the
>>>>> org.apache.servicemix.camel.JbiExchange.createMessage(String name) to
>>>>> the following:
>>>>>
>>>>> private JbiMessage createMessage(String name) {
>>>>>         if (messageExchange != null) {
>>>>>             try {
>>>>>                 NormalizedMessage msg =
>>>>> messageExchange.getMessage(name);
>>>>>                 if (msg == null) {
>>>>>                     if(name.equals("fault")) {
>>>>>                             msg = messageExchange.createFault();
>>>>>                             messageExchange.setFault((Fault) msg);
>>>>>                     }
>>>>>                     else {
>>>>>                         msg = messageExchange.createMessage();
>>>>>                         messageExchange.setMessage(msg, name);
>>>>>                     }
>>>>>                 }
>>>>>                 return new JbiMessage(msg);
>>>>>             } catch (JBIException e) {
>>>>>                 throw new RuntimeException(e);
>>>>>             }
>>>>>         } else {
>>>>>             return new JbiMessage();
>>>>>         }
>>>>>     }
>>>>>
>>>>>
>>>>> However, now I get the following exception when a Fault is received as
>>>>> a
>>>>> response:
>>>>>
>>>>> 18:26:41,053 | ERROR - org.apache.camel.processor.Logger - Failed
>>>>> delivery for exchangeId: ID-XXX-B624E47AF0/4562-1222189666671/0-147.
>>>>> On
>>>>> delivery attempt: 1 caught: java.lang.IllegalStateException: component
>>>>> is not owner
>>>>> java.lang.IllegalStateException: component is not owner
>>>>>         at
>>>>> org.apache.servicemix.jbi.messaging.MessageExchangeImpl.setMessage(MessageExchangeImpl.java:338)
>>>>>         at
>>>>> org.apache.servicemix.jbi.messaging.MessageExchangeImpl.setFault(MessageExchangeImpl.java:290)
>>>>>         at
>>>>> org.apache.servicemix.camel.JbiExchange.createMessage(JbiExchange.java:170)
>>>>>         at
>>>>> org.apache.servicemix.camel.JbiExchange.createFaultMessage(JbiExchange.java:158)
>>>>>         at
>>>>> org.apache.servicemix.camel.JbiExchange.createFaultMessage(JbiExchange.java:39)
>>>>>         at
>>>>> org.apache.camel.impl.DefaultExchange.getFault(DefaultExchange.java:251)
>>>>>         at
>>>>> org.apache.servicemix.camel.JbiExchange.getFault(JbiExchange.java:83)
>>>>>         at
>>>>> org.apache.servicemix.camel.JbiExchange.getFault(JbiExchange.java:39)
>>>>>         at
>>>>> org.apache.camel.impl.DefaultExchange.getFault(DefaultExchange.java:246)
>>>>>         at
>>>>> org.apache.servicemix.camel.JbiExchange.getFault(JbiExchange.java:78)
>>>>>         at
>>>>> org.apache.servicemix.camel.JbiExchange.getFault(JbiExchange.java:39)
>>>>>         at
>>>>> org.apache.servicemix.camel.ToJbiProcessor.process(ToJbiProcessor.java:98)
>>>>>         at
>>>>> org.apache.servicemix.camel.JbiEndpoint$1.process(JbiEndpoint.java:57)
>>>>>         at
>>>>> org.apache.camel.impl.converter.AsyncProcessorTypeConverter$ProcessorToAsyncProcessorBridge.process(AsyncProcessorTypeConverter.java:43)
>>>>>         at
>>>>> org.apache.camel.processor.SendProcessor.process(SendProcessor.java:75)
>>>>>         .....................
>>>>>
>>>>>
>>>>> Any suggestion as to why this is happening and how can I fix this bug,
>>>>> which is really blocking our development?
>>>>>
>>>>> Thank you.
>>>>>
>>>>>
>>>>>
>>>>> raulvk.soa wrote:
>>>>>>
>>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> I have found the corresponding JIRA issue
>>>>>> (https://issues.apache.org/activemq/browse/SM-1589), but it has minor
>>>>>> priority.
>>>>>>
>>>>>> Honestly, I believe that the priority of this one should be very
>>>>>> high,
>>>>>> as it is preventing Camel and ServiceMix to interact correctly. In
>>>>>> our
>>>>>> scenario, we are have come across this bug and as far as I can
>>>>>> imagine,
>>>>>> there is really no workaround to this until it is fixed!
>>>>>>
>>>>>> Raul.
>>>>>>
>>>>>>
>>>>>> Gert Vanthienen wrote:
>>>>>>>
>>>>>>> Garry,
>>>>>>>
>>>>>>> As far as I can see, you are absolutely right about this.  Could you
>>>>>>> raise a JIRA issue for it, please?  Feel free to add a unit test and
>>>>>>> a
>>>>>>> patch off course, we welcome contributions ;)!
>>>>>>>
>>>>>>> Regards,
>>>>>>>
>>>>>>> Gert
>>>>>>>
>>>>>>> Garry wrote:
>>>>>>>> Hi,
>>>>>>>>
>>>>>>>> While doing fault handling with Camel, I've been getting an
>>>>>>>> exception:
>>>>>>>>
>>>>>>>>   javax.jbi.messaging.MessagingException: Setting fault, but
>>>>>>>> message
>>>>>>>> is not
>>>>>>>> a fault
>>>>>>>>
>>>>>>>> In my version of org.apache.servicemix.camel.JbiExchange, around
>>>>>>>> line
>>>>>>>> 153,
>>>>>>>> method 'createFaultMessage' calls 'createMessage' with argument
>>>>>>>> "fault."
>>>>>>>> Method 'createMessage' might then create a normal - not fault -
>>>>>>>> message and
>>>>>>>> set it on the exchange as a FAULT which will, if I'm looking at it
>>>>>>>> correctly,
>>>>>>>> trigger the above exception. Does this make sense?
>>>>>>>
>>>>>>>>
>>>>>>>> Thanks, Garry
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> -----
>>>>>>> ---
>>>>>>> Gert Vanthienen
>>>>>>> http://www.anova.be
>>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>
>>>
>>
>> --
>> View this message in context:
>> http://www.nabble.com/Getting-Camel-fault-exception-tp19401580p19884604.html
>> Sent from the ServiceMix - User mailing list archive at Nabble.com.
>>
>>
> 
> 
> 
> -- 
> Cheers,
> Guillaume Nodet
> ------------------------
> Blog: http://gnodet.blogspot.com/
> ------------------------
> Open Source SOA
> http://open.iona.com
> 
> 

-- 
View this message in context: http://www.nabble.com/Getting-Camel-fault-exception-tp19401580p19886435.html
Sent from the ServiceMix - User mailing list archive at Nabble.com.


Re: Getting Camel fault exception

Posted by Guillaume Nodet <gn...@gmail.com>.
The problem is that if we don't set the fault on the exchange, i fear
it will never really end up on the exchange.
The createFault() method does not associate the fault to the exchange.

On Wed, Oct 8, 2008 at 8:26 PM, raulvk.soa <ra...@gmail.com> wrote:
>
> Hi everyone,
>
> Nice conversation with myself... ;)
>
> I have been looking into this problem and it seems that when a JBI Fault is
> received as a result of an InOut Exchange, a Fault Message will be
> initialized on the JbiExchange (which is Camel's representation of the
> actual JBI Exchange). The intention is to fill this new Fault Message with
> the content of the received Fault.
>
> Everything is OK and rational up until here. However, when the new Fault
> message is initialized, the servicemix-camel component attempts to SET the
> Fault message on the underlying MessageExchange as well, thus resulting in
> the "java.lang.IllegalStateException: component is not owner" exception,
> evidently because it is not within the consumer's scope to set a Fault!
>
> I guess this attempt to set the Fault on the JBI Message is done with good
> intention.... To keep the whole Camel Exchange consistent. However, it is
> not logically correct in practice.
>
> So my question is, in the createMessage(...) method of the
> org.apache.servicemix.camel.JbiExchange class, would it be safe to comment
> out the messageExchange.setFault() statement, to stop it from trying to set
> the Fault on the underlying MessageExchange?? Or could this have some
> negative impact elsewhere?
>
> The final result would be the following:
>
>
>  private JbiMessage createMessage(String name) {
>        if (messageExchange != null) {
>            try {
>                NormalizedMessage msg = messageExchange.getMessage(name);
>                if (msg == null) {
>                    if ("fault".equals(name)) {
>                        Fault f = messageExchange.createFault();
>                        //messageExchange.setFault(f);
>                        msg = f;
>                    } else {
>                        msg = messageExchange.createMessage();
>                        messageExchange.setMessage(msg, name);
>                    }
>                }
>                return new JbiMessage(msg);
>            } catch (JBIException e) {
>                throw new RuntimeException(e);
>            }
>        } else {
>            return new JbiMessage();
>        }
>    }
>
>
> Many thanks!!
>
>
>
> raulvk.soa wrote:
>>
>>
>> Hi everyone,
>>
>> A fix was provided and the issue was closed on JIRA. However, we are
>> encountering another problem derived from the fix, and Camel is still not
>> able to work with JBI Faults......
>>
>> Please see my comment on https://issues.apache.org/activemq/browse/SM-1589
>> for follow-up on this issue.
>>
>> Thanks.
>>
>>
>>
>> raulvk.soa wrote:
>>>
>>> Hi,
>>>
>>> Has anyone come across this same bug?
>>> Could someone please give me a hand to fix this? I would very much
>>> appreciate your help as we are pretty much stuck in our development until
>>> this bug is fixed....
>>>
>>> Thanks!!
>>>
>>>
>>> raulvk.soa wrote:
>>>>
>>>>
>>>> Hi,
>>>>
>>>> I have been trying to fix this bug. I have modified the
>>>> org.apache.servicemix.camel.JbiExchange.createMessage(String name) to
>>>> the following:
>>>>
>>>> private JbiMessage createMessage(String name) {
>>>>         if (messageExchange != null) {
>>>>             try {
>>>>                 NormalizedMessage msg =
>>>> messageExchange.getMessage(name);
>>>>                 if (msg == null) {
>>>>                     if(name.equals("fault")) {
>>>>                             msg = messageExchange.createFault();
>>>>                             messageExchange.setFault((Fault) msg);
>>>>                     }
>>>>                     else {
>>>>                         msg = messageExchange.createMessage();
>>>>                         messageExchange.setMessage(msg, name);
>>>>                     }
>>>>                 }
>>>>                 return new JbiMessage(msg);
>>>>             } catch (JBIException e) {
>>>>                 throw new RuntimeException(e);
>>>>             }
>>>>         } else {
>>>>             return new JbiMessage();
>>>>         }
>>>>     }
>>>>
>>>>
>>>> However, now I get the following exception when a Fault is received as a
>>>> response:
>>>>
>>>> 18:26:41,053 | ERROR - org.apache.camel.processor.Logger - Failed
>>>> delivery for exchangeId: ID-XXX-B624E47AF0/4562-1222189666671/0-147. On
>>>> delivery attempt: 1 caught: java.lang.IllegalStateException: component
>>>> is not owner
>>>> java.lang.IllegalStateException: component is not owner
>>>>         at
>>>> org.apache.servicemix.jbi.messaging.MessageExchangeImpl.setMessage(MessageExchangeImpl.java:338)
>>>>         at
>>>> org.apache.servicemix.jbi.messaging.MessageExchangeImpl.setFault(MessageExchangeImpl.java:290)
>>>>         at
>>>> org.apache.servicemix.camel.JbiExchange.createMessage(JbiExchange.java:170)
>>>>         at
>>>> org.apache.servicemix.camel.JbiExchange.createFaultMessage(JbiExchange.java:158)
>>>>         at
>>>> org.apache.servicemix.camel.JbiExchange.createFaultMessage(JbiExchange.java:39)
>>>>         at
>>>> org.apache.camel.impl.DefaultExchange.getFault(DefaultExchange.java:251)
>>>>         at
>>>> org.apache.servicemix.camel.JbiExchange.getFault(JbiExchange.java:83)
>>>>         at
>>>> org.apache.servicemix.camel.JbiExchange.getFault(JbiExchange.java:39)
>>>>         at
>>>> org.apache.camel.impl.DefaultExchange.getFault(DefaultExchange.java:246)
>>>>         at
>>>> org.apache.servicemix.camel.JbiExchange.getFault(JbiExchange.java:78)
>>>>         at
>>>> org.apache.servicemix.camel.JbiExchange.getFault(JbiExchange.java:39)
>>>>         at
>>>> org.apache.servicemix.camel.ToJbiProcessor.process(ToJbiProcessor.java:98)
>>>>         at
>>>> org.apache.servicemix.camel.JbiEndpoint$1.process(JbiEndpoint.java:57)
>>>>         at
>>>> org.apache.camel.impl.converter.AsyncProcessorTypeConverter$ProcessorToAsyncProcessorBridge.process(AsyncProcessorTypeConverter.java:43)
>>>>         at
>>>> org.apache.camel.processor.SendProcessor.process(SendProcessor.java:75)
>>>>         .....................
>>>>
>>>>
>>>> Any suggestion as to why this is happening and how can I fix this bug,
>>>> which is really blocking our development?
>>>>
>>>> Thank you.
>>>>
>>>>
>>>>
>>>> raulvk.soa wrote:
>>>>>
>>>>>
>>>>> Hi,
>>>>>
>>>>> I have found the corresponding JIRA issue
>>>>> (https://issues.apache.org/activemq/browse/SM-1589), but it has minor
>>>>> priority.
>>>>>
>>>>> Honestly, I believe that the priority of this one should be very high,
>>>>> as it is preventing Camel and ServiceMix to interact correctly. In our
>>>>> scenario, we are have come across this bug and as far as I can imagine,
>>>>> there is really no workaround to this until it is fixed!
>>>>>
>>>>> Raul.
>>>>>
>>>>>
>>>>> Gert Vanthienen wrote:
>>>>>>
>>>>>> Garry,
>>>>>>
>>>>>> As far as I can see, you are absolutely right about this.  Could you
>>>>>> raise a JIRA issue for it, please?  Feel free to add a unit test and a
>>>>>> patch off course, we welcome contributions ;)!
>>>>>>
>>>>>> Regards,
>>>>>>
>>>>>> Gert
>>>>>>
>>>>>> Garry wrote:
>>>>>>> Hi,
>>>>>>>
>>>>>>> While doing fault handling with Camel, I've been getting an
>>>>>>> exception:
>>>>>>>
>>>>>>>   javax.jbi.messaging.MessagingException: Setting fault, but message
>>>>>>> is not
>>>>>>> a fault
>>>>>>>
>>>>>>> In my version of org.apache.servicemix.camel.JbiExchange, around line
>>>>>>> 153,
>>>>>>> method 'createFaultMessage' calls 'createMessage' with argument
>>>>>>> "fault."
>>>>>>> Method 'createMessage' might then create a normal - not fault -
>>>>>>> message and
>>>>>>> set it on the exchange as a FAULT which will, if I'm looking at it
>>>>>>> correctly,
>>>>>>> trigger the above exception. Does this make sense?
>>>>>>
>>>>>>>
>>>>>>> Thanks, Garry
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> -----
>>>>>> ---
>>>>>> Gert Vanthienen
>>>>>> http://www.anova.be
>>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>
>>>
>>
>>
>
> --
> View this message in context: http://www.nabble.com/Getting-Camel-fault-exception-tp19401580p19884604.html
> Sent from the ServiceMix - User mailing list archive at Nabble.com.
>
>



-- 
Cheers,
Guillaume Nodet
------------------------
Blog: http://gnodet.blogspot.com/
------------------------
Open Source SOA
http://open.iona.com

Re: Getting Camel fault exception

Posted by "raulvk.soa" <ra...@gmail.com>.
Hi everyone, 

Nice conversation with myself... ;)

I have been looking into this problem and it seems that when a JBI Fault is
received as a result of an InOut Exchange, a Fault Message will be
initialized on the JbiExchange (which is Camel's representation of the
actual JBI Exchange). The intention is to fill this new Fault Message with
the content of the received Fault.

Everything is OK and rational up until here. However, when the new Fault
message is initialized, the servicemix-camel component attempts to SET the
Fault message on the underlying MessageExchange as well, thus resulting in
the "java.lang.IllegalStateException: component is not owner" exception,
evidently because it is not within the consumer's scope to set a Fault!

I guess this attempt to set the Fault on the JBI Message is done with good
intention.... To keep the whole Camel Exchange consistent. However, it is
not logically correct in practice.

So my question is, in the createMessage(...) method of the
org.apache.servicemix.camel.JbiExchange class, would it be safe to comment
out the messageExchange.setFault() statement, to stop it from trying to set
the Fault on the underlying MessageExchange?? Or could this have some
negative impact elsewhere?

The final result would be the following:


 private JbiMessage createMessage(String name) {
        if (messageExchange != null) {
            try {
                NormalizedMessage msg = messageExchange.getMessage(name);
                if (msg == null) {
                    if ("fault".equals(name)) {
                        Fault f = messageExchange.createFault();
                        //messageExchange.setFault(f);
                        msg = f;
                    } else {
                        msg = messageExchange.createMessage();
                        messageExchange.setMessage(msg, name);
                    }
                }
                return new JbiMessage(msg);
            } catch (JBIException e) {
                throw new RuntimeException(e);
            }
        } else {
            return new JbiMessage();
        }
    }


Many thanks!!



raulvk.soa wrote:
> 
> 
> Hi everyone,
> 
> A fix was provided and the issue was closed on JIRA. However, we are
> encountering another problem derived from the fix, and Camel is still not
> able to work with JBI Faults...... 
> 
> Please see my comment on https://issues.apache.org/activemq/browse/SM-1589
> for follow-up on this issue.
> 
> Thanks.
> 
> 
> 
> raulvk.soa wrote:
>> 
>> Hi,
>> 
>> Has anyone come across this same bug?
>> Could someone please give me a hand to fix this? I would very much
>> appreciate your help as we are pretty much stuck in our development until
>> this bug is fixed....
>> 
>> Thanks!!
>> 
>> 
>> raulvk.soa wrote:
>>> 
>>> 
>>> Hi,
>>> 
>>> I have been trying to fix this bug. I have modified the
>>> org.apache.servicemix.camel.JbiExchange.createMessage(String name) to
>>> the following:
>>> 
>>> private JbiMessage createMessage(String name) {
>>>         if (messageExchange != null) {
>>>             try {
>>>                 NormalizedMessage msg =
>>> messageExchange.getMessage(name);
>>>                 if (msg == null) {
>>>                 	if(name.equals("fault")) {
>>>                 		msg = messageExchange.createFault();
>>>                 		messageExchange.setFault((Fault) msg);
>>>                 	}
>>>                 	else {
>>> 	                    msg = messageExchange.createMessage();
>>> 	                    messageExchange.setMessage(msg, name);
>>>                 	}
>>>                 }
>>>                 return new JbiMessage(msg);
>>>             } catch (JBIException e) {
>>>                 throw new RuntimeException(e);
>>>             }
>>>         } else {
>>>             return new JbiMessage();
>>>         }
>>>     }
>>> 
>>> 
>>> However, now I get the following exception when a Fault is received as a
>>> response:
>>> 
>>> 18:26:41,053 | ERROR - org.apache.camel.processor.Logger - Failed
>>> delivery for exchangeId: ID-XXX-B624E47AF0/4562-1222189666671/0-147. On
>>> delivery attempt: 1 caught: java.lang.IllegalStateException: component
>>> is not owner
>>> java.lang.IllegalStateException: component is not owner
>>>         at
>>> org.apache.servicemix.jbi.messaging.MessageExchangeImpl.setMessage(MessageExchangeImpl.java:338)
>>>         at
>>> org.apache.servicemix.jbi.messaging.MessageExchangeImpl.setFault(MessageExchangeImpl.java:290)
>>>         at
>>> org.apache.servicemix.camel.JbiExchange.createMessage(JbiExchange.java:170)
>>>         at
>>> org.apache.servicemix.camel.JbiExchange.createFaultMessage(JbiExchange.java:158)
>>>         at
>>> org.apache.servicemix.camel.JbiExchange.createFaultMessage(JbiExchange.java:39)
>>>         at
>>> org.apache.camel.impl.DefaultExchange.getFault(DefaultExchange.java:251)
>>>         at
>>> org.apache.servicemix.camel.JbiExchange.getFault(JbiExchange.java:83)
>>>         at
>>> org.apache.servicemix.camel.JbiExchange.getFault(JbiExchange.java:39)
>>>         at
>>> org.apache.camel.impl.DefaultExchange.getFault(DefaultExchange.java:246)
>>>         at
>>> org.apache.servicemix.camel.JbiExchange.getFault(JbiExchange.java:78)
>>>         at
>>> org.apache.servicemix.camel.JbiExchange.getFault(JbiExchange.java:39)
>>>         at
>>> org.apache.servicemix.camel.ToJbiProcessor.process(ToJbiProcessor.java:98)
>>>         at
>>> org.apache.servicemix.camel.JbiEndpoint$1.process(JbiEndpoint.java:57)
>>>         at
>>> org.apache.camel.impl.converter.AsyncProcessorTypeConverter$ProcessorToAsyncProcessorBridge.process(AsyncProcessorTypeConverter.java:43)
>>>         at
>>> org.apache.camel.processor.SendProcessor.process(SendProcessor.java:75)
>>>         .....................
>>> 
>>> 
>>> Any suggestion as to why this is happening and how can I fix this bug,
>>> which is really blocking our development?
>>> 
>>> Thank you.
>>> 
>>> 
>>> 
>>> raulvk.soa wrote:
>>>> 
>>>> 
>>>> Hi,
>>>> 
>>>> I have found the corresponding JIRA issue
>>>> (https://issues.apache.org/activemq/browse/SM-1589), but it has minor
>>>> priority.
>>>> 
>>>> Honestly, I believe that the priority of this one should be very high,
>>>> as it is preventing Camel and ServiceMix to interact correctly. In our
>>>> scenario, we are have come across this bug and as far as I can imagine,
>>>> there is really no workaround to this until it is fixed!
>>>> 
>>>> Raul.
>>>> 
>>>> 
>>>> Gert Vanthienen wrote:
>>>>> 
>>>>> Garry,
>>>>> 
>>>>> As far as I can see, you are absolutely right about this.  Could you 
>>>>> raise a JIRA issue for it, please?  Feel free to add a unit test and a 
>>>>> patch off course, we welcome contributions ;)!
>>>>> 
>>>>> Regards,
>>>>> 
>>>>> Gert
>>>>> 
>>>>> Garry wrote:
>>>>>> Hi,
>>>>>>
>>>>>> While doing fault handling with Camel, I've been getting an
>>>>>> exception:
>>>>>>
>>>>>>   javax.jbi.messaging.MessagingException: Setting fault, but message
>>>>>> is not
>>>>>> a fault
>>>>>>   
>>>>>> In my version of org.apache.servicemix.camel.JbiExchange, around line
>>>>>> 153,
>>>>>> method 'createFaultMessage' calls 'createMessage' with argument
>>>>>> "fault."
>>>>>> Method 'createMessage' might then create a normal - not fault -
>>>>>> message and
>>>>>> set it on the exchange as a FAULT which will, if I'm looking at it
>>>>>> correctly,
>>>>>> trigger the above exception. Does this make sense?
>>>>> 
>>>>>>
>>>>>> Thanks, Garry
>>>>>>
>>>>>>   
>>>>> 
>>>>> 
>>>>> 
>>>>> -----
>>>>> ---
>>>>> Gert Vanthienen
>>>>> http://www.anova.be
>>>>> 
>>>> 
>>>> 
>>> 
>>> 
>> 
>> 
> 
> 

-- 
View this message in context: http://www.nabble.com/Getting-Camel-fault-exception-tp19401580p19884604.html
Sent from the ServiceMix - User mailing list archive at Nabble.com.