Details
-
Type:
New Feature
-
Status: Resolved
-
Priority:
Major
-
Resolution: Resolved
-
Affects Version/s: 2.15.1
-
Fix Version/s: 2.18.0
-
Component/s: camel-core
-
Labels:
-
Estimated Complexity:Moderate
Description
Using Pojo Messaging annotations, Camel automatically uses the Type Converter system to unmarshall XML messages to JAXB objects in the following scenario:
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); } }
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:
/**
* 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;
This would allow users to send a JAXB object and instruct Camel to use its Type Converter system to marshall the object to XML:
producer.sendBody(jaxbObject, String.class);
Note: The sendBody, sendBodyAndHeader and sendBodyAndProperty methods are all overloaded several times which could mean quite a number of new methods.
Attachments
Issue Links
- relates to
-
CAMEL-9602 ProducerTemplateBuilder
-
- Resolved
-