You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "Babak Vahdat (Issue Comment Edited) (JIRA)" <ji...@apache.org> on 2012/03/03 18:41:57 UTC

[jira] [Issue Comment Edited] (CAMEL-4797) DataFormat - unmarshal should allow to return Message or Exchange to make it more flexible

    [ https://issues.apache.org/jira/browse/CAMEL-4797?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13221651#comment-13221651 ] 

Babak Vahdat edited comment on CAMEL-4797 at 3/3/12 5:40 PM:
-------------------------------------------------------------

As I'm not really sure if I understand it correctly, is the following what we intend by UnmarshalProcessor:

{code}
            Object result = dataFormat.unmarshal(exchange, stream);
            if (result instanceof Exchange) {
                Exchange anotherExchange = (Exchange) result;
                if (exchange == anotherExchange) {
                    // only check to see if the body of the out message has been properly set
                    Message message = exchange.getOut();
                    ObjectHelper.notNull(message.getBody(), "body", message);
                } else {
                    // copy the out message along with it's possibly set headers, attachments, etc.
                    exchange.setOut(anotherExchange.getOut().copy());
                }
            } else if (result instanceof Message) {
                Message message = (Message) result;
                ObjectHelper.notNull(message.getBody(), "body", message);
                exchange.setOut((Message) result);
            } else {
                out.setBody(result);
            }
{code}

Or am I completely with wrong thoughts by this ticket?
                
      was (Author: bvahdat):
    As I'm not really sure if I understand it correctly, is the following what we intend by UnmarshalProcessor:

{code}
            Object result = dataFormat.unmarshal(exchange, stream);
            if (result instanceof Exchange) {
                Exchange anotherExchange = (Exchange) result;
                if (exchange == anotherExchange) {
                    // only check to see if the body of the out message has been properly set
                    Message message = exchange.getOut();
                    ObjectHelper.notNull(message.getBody(), "body", message);
                } else {
                    // copy the out message along with it's possibly set headers, attachments, etc.
                    exchange.setOut(anotherExchange.getOut().copy());
                }
            } else if (result instanceof Message) {
                Message message = exchange.getOut();
                ObjectHelper.notNull(message.getBody(), "body", message);
                exchange.setOut((Message) result);
            } else {
                out.setBody(result);
            }
{code}

Or am I completely with wrong thoughts by this ticket?
                  
> DataFormat - unmarshal should allow to return Message or Exchange to make it more flexible
> ------------------------------------------------------------------------------------------
>
>                 Key: CAMEL-4797
>                 URL: https://issues.apache.org/jira/browse/CAMEL-4797
>             Project: Camel
>          Issue Type: Improvement
>          Components: camel-core
>            Reporter: Claus Ibsen
>             Fix For: 2.10.0
>
>
> The API of the unmarshal on DataFormat is
> {code}
>     Object unmarshal(Exchange exchange, InputStream stream) throws Exception;
> {code}
> The Object returned is by default the message body. But we should allow end user to return also a
> - org.apache.camel.Message
> - org.apache.camel.Exchange
> If its a Message then use the message returned.
> If its a Exchange then copy the results from the exchange to the current exchange (normally it would be the same instance, so its a noop operation)
> We supports this for the splitter, where people can return a List<Message> in the split expression etc.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira