You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "Geert Schuring (JIRA)" <ji...@apache.org> on 2015/04/30 14:48:07 UTC

[jira] [Created] (CAMEL-8723) Add desired message type to ProducerTemplate.sendBody methods

Geert Schuring created CAMEL-8723:
-------------------------------------

             Summary: Add desired message type to ProducerTemplate.sendBody methods
                 Key: CAMEL-8723
                 URL: https://issues.apache.org/jira/browse/CAMEL-8723
             Project: Camel
          Issue Type: New Feature
          Components: camel-core
    Affects Versions: 2.15.1
            Reporter: Geert Schuring
             Fix For: 2.16.0


Using Pojo Messaging annotations, Camel automatically uses the Type Converter system to unmarshall XML messages to JAXB objects in the following scenario:

{code:java}
public class CamelPojoDemo {
	
    @Produce(uri = "amq:camelpojodemo.reply")
    private ProducerTemplate producer;
	
    @Consume(uri = "amq:camelpojodemo.request")
    public void trigger(UpdateMarketDataMessage message) {
    	String result = "Processed prices: " + message.getMarketData().getPrices().size();
    	producer.sendBody(result);
    }
}
{code}

However, handing the producer a JAXB object and expecting it to marshall it to XML before sending it does not seem possible in the current API.

I would like to propose to add the following method to the ProducerTemplate:

{code}

  /**
     * Sends the body to the default endpoint after converting it to the given type
     * <br/><br/>
     * <p/><b>Notice:</b> that if the processing of the exchange failed with an Exception
     * it is thrown from this method as a {@link org.apache.camel.CamelExecutionException} with
     * the caused exception wrapped.
     *
     * @param body the payload to send
     * @param type the type which the body should be converted to before sending
     * @throws CamelExecutionException if the processing of the exchange failed
     */
    void sendBody(Object body, Class type) throws CamelExecutionException;

{code}

This would allow users to send a JAXB object and instruct Camel to use its Type Converter system to marshall the object to XML:

{code}
producer.sendBody(jaxbObject, String.class);
{code}

Note: The sendBody, sendBodyAndHeader and sendBodyAndProperty methods are all overloaded several times which could mean quite a number of new methods. 



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)