public interface MessageCreator
EventTypeXSDConstants} - Contains constants that should be used for populating message headers maps.
,
EventTypeXSDConstants#buildCustomHeaderKey(String)} - Used for building customer header map keys.
,
Message#getHeaders()} - Used for accessing all message headers. There are three categories of EDA headers
in the Camel Message:
1) Standard headers, i.e. the header elements described in the Envelope
schema, such as: Type, Start,
End, EventID, etc.
2) Custom headers, i.e. the children of the CustomHeaders
element
3) Filterable properties, i.e. all elements from the body, which are annotated as filterable in the event type
schema.
,
Message#getHeader(String)} - Used for accessing a specific message header.
1) Standard headers can be accessed by using the EventTypeXSDConstants.STANDARD_HEADER_XXX
constants,
e.g. Message.getHeader(EventTypeXSDConstants.STANDARD_HEADER_TYPE) will return
{http://namespaces.softwareag.com/EDA/WebM/Sample/InventoryMgmt/1.0}PartInventoryLow.
2) Custom headers can be accessed by using the {@link EventTypeXSDConstants#buildCustomHeaderKey(String)} method,
e.g. Message.getHeader(EventTypeXSDConstants.buildCustomHeaderKey("MyHeader")) will return MyValue.
3) Filterable properties can be accessed by following the convention below:
3.1) If the filterable element is a child of the root element use: Message.getHeader("elementName")
,
e.g.: Message.getHeader("InventoryLevel") will return 2.
3.2) If the filterable element is a child of a complex element use:
Message.getHeader("elementName" + EventTypeXSDConstants.FILTERABLE_PROPS_PATH_SEPARATOR + "elementName")
, e.g.: Message.getHeader("Part" + EventTypeXSDConstants.FILTERABLE_PROPS_PATH_SEPARATOR + "ItemID") will
return itemID.
,
Message#getHeader(String, Class)} - Used for accessing a specific message header and casting it to the
right Java type, usually java.lang.String. For example Message.getHeader(EventTypeXSDConstants.STANDARD_HEADER_TYPE,
String.class) returns a string object which you don't have to cast explicitly like in the Message#getHeader(String)
method.
,
Message#getBody()} - Used for accessing the message body. In the example above Message.getBody()
will return:
<PartInventoryLow xmlns="http://namespaces.softwareag.com/EDA/WebM/Sample/InventoryMgmt/1.0">
<Part>
<ItemID>itemID</ItemID>
<ItemName>itemName</ItemName>
<Model>model</Model>
<Color>color</Color>
<Shape>shape</Shape>
</Part>
<InventoryLevel>2</InventoryLevel>
<DesiredInventoryLevel>1</DesiredInventoryLevel>
</PartInventoryLow>
Modifier and Type | Method and Description |
---|---|
java.util.Map<java.lang.String,java.lang.Object> |
createHeadersMap()
Creates a map that can hold event headers and is optimize to be used with Camel messages.
|
org.apache.camel.Message |
createMessage(java.lang.Object bodyAsPOJO,
java.util.Map<java.lang.String,java.lang.Object> headers)
Creates a Camel message object from the specified event body and headers.
|
org.apache.camel.Message |
createMessage(java.lang.String eventAsXMLString)
Creates a Camel message object from the specified event.
|
org.apache.camel.Message |
createMessage(java.lang.String bodyAsXMLString,
java.util.Map<java.lang.String,java.lang.Object> headers)
Creates a Camel message object from the specified event body and headers.
|
org.apache.camel.Message |
createMessageExtractFilterableProperties(java.lang.Object bodyAsPOJO,
java.util.Map<java.lang.String,java.lang.Object> headers)
Creates a Camel message object from the specified event body and headers.
|
org.apache.camel.Message |
createMessageExtractFilterableProperties(java.lang.String bodyAsXMLString,
java.util.Map<java.lang.String,java.lang.Object> headers)
Creates a Camel message object from the specified event body and headers.
|
java.lang.String |
dateToString(long timeInMillis)
Converts a Java date represented in milliseconds to a string that can be used with events.
|
java.lang.String |
generateEventID()
Generates a pseudo unique event ID.
|
org.apache.camel.Message createMessage(java.lang.String eventAsXMLString) throws NervException
Please note that using this method will lead to a serious performance degradation as XML and XSD parsing is
involved. Consider using one of createMessage(String, Map)
,
createMessage(Object, Map)
for better performance.
The newly created message is built the following way:
Message.getHeaders()
, Message.getHeader(String)
, and Message.getHeader(String, Class)
.Message.getHeaders()
, Message.getHeader(String)
, and Message.getHeader(String, Class)
.Message.getBody()
.Sample input:
<eda:Event xmlns:eda="http://namespaces.softwareag.com/EDA/Event"> <eda:Header> <eda:Type>{http://namespaces.softwareag.com/EDA/WebM/Sample/InventoryMgmt/1.0}PartInventoryLow</eda:Type> <eda:Start>2012-04-05T17:09:33.112+03:00</eda:Start> <eda:End>2012-04-05T17:09:44.112+03:00</eda:End> <eda:Kind>Event</eda:Kind> <eda:CustomHeaders> <eda:MyHeader>MyValue</eda:MyHeader> </eda:CustomHeaders> </eda:Header> <eda:Body> <PartInventoryLow xmlns="http://namespaces.softwareag.com/EDA/WebM/Sample/InventoryMgmt/1.0"> <Part> <ItemID>itemID</ItemID> <ItemName>itemName</ItemName> <Model>model</Model> <Color>color</Color> <Shape>shape</Shape> </Part> <InventoryLevel>2</InventoryLevel> <DesiredInventoryLevel>1</DesiredInventoryLevel> </PartInventoryLow> </eda:Body> </eda:Event>
Usage:
String eventAsXMLString = "<Event>... some valid event as an XML string like the one above ...</Event>"; Message message = MessageCreator.createMessage(eventAsXMLString);
eventAsXMLString
- - The event in the form of an XML string. Cannot be null or an empty string.NervException
- If the specified event is null or empty. Also if one or more of the required
headers, like the event type, are missing or event body is not present.org.apache.camel.Message createMessage(java.lang.String bodyAsXMLString, java.util.Map<java.lang.String,java.lang.Object> headers) throws NervException
The newly created message is built the following way:
Message.getHeaders()
and
Message.getHeader(String)
.Message.getBody()
after the message is
created.Sample input:
<PartInventoryLow xmlns="http://namespaces.softwareag.com/EDA/WebM/Sample/InventoryMgmt/1.0"> <Part> <ItemID>itemID</ItemID> <ItemName>itemName</ItemName> <Model>model</Model> <Color>color</Color> <Shape>shape</Shape> </Part> <InventoryLevel>2</InventoryLevel> <DesiredInventoryLevel>1</DesiredInventoryLevel> </PartInventoryLow>
Usage:
Map<String, Object> headers = MessageCreator.createHeadersMap(); headers.put(EventTypeXSDConstants.STANDARD_HEADER_TYPE
, "{http://namespaces.softwareag.com/EDA/WebM/Sample/InventoryMgmt/1.0}PartInventoryLow<"); headers.put(EventTypeXSDConstants.buildCustomHeaderKey("MyHeader"), "MyValue"); headers.put("Part" + EventTypeXSDConstants.FILTERABLE_PROPS_PATH_SEPARATOR + "ItemID", "itemID"); headers.put("Part" + EventTypeXSDConstants.FILTERABLE_PROPS_PATH_SEPARATOR + "ItemName", "itemName"); headers.put("InventoryLevel", "2"); String bodyAsXMLString = "... some valid event body as an XML string like the one above ..."; Message message = MessageCreator.createMessage(bodyAsXMLString, headers);
bodyAsXMLString
- - The event in the form of an XML string. Cannot be null.headers
- - A map containing all event headers and filterable properties. Please note that this method does
not perform any processing of the body thus it will not extract filterable properties from it. The user is
responsible for providing all required headers and filterable properties prior to invoking this method. Cannot be
null or empty.NervException
- If the specified event body or headers map is null or the map is empty. Also if
one or more of the required headers, like the event type, are missing.org.apache.camel.Message createMessage(java.lang.Object bodyAsPOJO, java.util.Map<java.lang.String,java.lang.Object> headers) throws NervException
The newly created message is built the following way:
Message.getHeaders()
and
Message.getHeader(String)
.Message.getBody()
after the message is created. In order to convert it back to a Java object you'll
have to unmarshal the output of the Message.getBody()
method with XML Binding.Usage:
Map<String, Object> headers = MessageCreator.createHeadersMap(); headers.put(EventTypeXSDConstants.STANDARD_HEADER_TYPE
, "{http://namespaces.softwareag.com/EDA/WebM/Sample/InventoryMgmt/1.0}PartInventoryLow"); headers.put(EventTypeXSDConstants.buildCustomHeaderKey("MyHeader"), "MyValue"); headers.put("Part" + EventTypeXSDConstants.FILTERABLE_PROPS_PATH_SEPARATOR + "ItemID", "itemID"); headers.put("Part" + EventTypeXSDConstants.FILTERABLE_PROPS_PATH_SEPARATOR + "ItemName", "itemName"); headers.put("InventoryLevel", "2"); PartInventoryLowType bodyAsPOJO = new PartInventoryLowType(); // A valid Java object which contains annotations for XML Binding. Message message = MessageCreator.createMessage(bodyAsPOJO, headers);
bodyAsPOJO
- - The event body in the form of a Java object. Cannot be null. Also the class of this
object should contain annotations for XML Binding so this method is capable of marshalling it to an XML string
library.headers
- - A map containing all event headers and filterable properties. Please note that this method does
not perform any processing of the body thus it will not extract filterable properties from it. The user is
responsible for providing all required headers and filterable properties prior to invoking this method.NervException
- If the specified event body or headers map is null or the map is empty. Also if
one or more of the required headers, like the event type, are missing.org.apache.camel.Message createMessageExtractFilterableProperties(java.lang.String bodyAsXMLString, java.util.Map<java.lang.String,java.lang.Object> headers) throws NervException
The newly created message is built the following way:
Message.getHeaders()
and Message.getHeader(String)
.Message.getBody()
after the message is
created.Sample input:
<PartInventoryLow xmlns="http://namespaces.softwareag.com/EDA/WebM/Sample/InventoryMgmt/1.0"> <Part> <ItemID>itemID</ItemID> <ItemName>itemName</ItemName> <Model>model</Model> <Color>color</Color> <Shape>shape</Shape> </Part> <InventoryLevel>2</InventoryLevel> <DesiredInventoryLevel>1</DesiredInventoryLevel> </PartInventoryLow>
Usage:
Afterwards the header property "InventoryLevel" is set to "2", "Part$ItemID" is set to "itemID", and "Part$ItemName" is set to "itemName".Map<String, Object> headers = MessageCreator.createHeadersMap(); headers.put(EventTypeXSDConstants.STANDARD_HEADER_TYPE
, "{http://namespaces.softwareag.com/EDA/WebM/Sample/InventoryMgmt/1.0}PartInventoryLow<"); headers.put(EventTypeXSDConstants.buildCustomHeaderKey("MyHeader"), "MyValue"); String bodyAsXMLString = "... some valid event body as an XML string like the one above ..."; Message message = MessageCreator.createMessageExtractFilterableProperties(bodyAsXMLString, headers);
bodyAsXMLString
- - The event in the form of an XML string. Cannot be null.headers
- - A map containing all event headers and filterable properties. Filterable properties set may be
overwritten. The user is responsible for providing all required headers prior to invoking this method.
Cannot be null or empty.NervException
- If the specified event body or headers map is null or the map is empty. Also if
one or more of the required headers, like the event type, are missing.org.apache.camel.Message createMessageExtractFilterableProperties(java.lang.Object bodyAsPOJO, java.util.Map<java.lang.String,java.lang.Object> headers) throws NervException
The newly created message is built the following way:
Message.getHeaders()
and Message.getHeader(String)
.Message.getBody()
after the message is created. In order to convert it back to a Java object you'll
have to unmarshal the output of the Message.getBody()
method with XML Binding.Usage:
Map<String, Object> headers = MessageCreator.createHeadersMap(); headers.put(EventTypeXSDConstants.STANDARD_HEADER_TYPE
, "{http://namespaces.softwareag.com/EDA/WebM/Sample/InventoryMgmt/1.0}PartInventoryLow<"); headers.put(EventTypeXSDConstants.buildCustomHeaderKey("MyHeader"), "MyValue"); PartInventoryLowType bodyAsPOJO = new PartInventoryLowType(); // A valid Java object which contains annotations for XML Binding. Message message = MessageCreator.createMessageExtractFilterableProperties(bodyAsPOJO, headers);
bodyAsPOJO
- - The event body in the form of a Java object. Cannot be null. Also the class of this
object should contain annotations for XML Binding so this method is capable of marshalling it to an XML string
library.headers
- - A map containing all event headers and filterable properties. Filterable properties set may be
overwritten. The user is responsible for providing all required headers prior to invoking this method.
Cannot be null or empty.NervException
- If the specified event body or headers map is null or the map is empty. Also if
one or more of the required headers, like the event type, are missing.java.lang.String generateEventID()
Usage:
Map<String, Object> headers = MessageCreator.createHeadersMap(); headers.put(EventTypeXSDConstants.STANDARD_HEADER_TYPE, "{http://namespaces.softwareag.com/EDA/WebM/Sample/InventoryMgmt/1.0}PartInventoryLow"); headers.put(EventTypeXSDConstants.STANDARD_HEADER_EVENTID, MessageCreator.generateEventID()); headers.put("Part$ItemID", "itemID"); headers.put("Part$ItemName", "itemName"); headers.put("InventoryLevel", "2"); PartInventoryLowType bodyAsPOJO = new PartInventoryLowType(); // A valid Java object which contains annotations for XML Binding. Message message = MessageCreator.createMessage(bodyAsXMLString, headers);By default createMessage generates a uniqueeventID
automatically, but it can be explicitly overwritten by using the coding example above.
java.util.Map<java.lang.String,java.lang.Object> createHeadersMap()
java.lang.String dateToString(long timeInMillis)
timeInMillis
- - The Java date represented in milliseconds that has to be formatted
and converted to a string.