IBM Integration Bus, Version 9.0.0.8 Operating Systems: AIX, HP-Itanium, Linux, Solaris, Windows, z/OS

See information about the latest product version

Accessing elements in a message tree from a JavaCompute node

Access the contents of a message, for reading or writing, using the structure and arrangement of the elements in the tree that the parser creates from the input bit stream.

Follow the relevant parent and child relationships from the top of the tree downwards until you reach the required element.

The message tree is passed to a JavaCompute node as an argument of the evaluate method. The argument is an MbMessageAssembly object. MbMessageAssembly contains four message objects:
  • Message
  • Local Environment
  • Global Environment
  • Exception List
These objects are read-only, except for Global Environment. If you try to write to the read-only objects, an MbReadOnlyException is issued.

Alternatively, use JAXB Java™ objects with getter and setter methods; see Using JAXB with a JavaCompute node.

This topic contains the following information about accessing elements in a message tree:

Traversing the element tree

The following table shows the Java methods that you can use to access element trees, and the equivalent ESQL field type constant for each point in the tree.
Java accessor from MbMessageAssembly ESQL field type constant
getMessage().getRootElement() InputRoot
getMessage().getRootElement().getLastChild() InputBody
getLocalEnvironment().getRootElement() InputLocalEnvironment
getGlobalEnvironment().getRootElement() Environment
getExceptionList().getRootElement() InputExceptionList
Use the following methods to traverse a message tree from an element of type MbElement:
getParent()
returns the parent of the current element
getPreviousSibling()
returns the previous sibling of the current element
getNextSibling()
returns the next sibling of the current element
getFirstChild()
returns the first child of the current element
getLastChild()
returns the last child of the current element

Alternatively, use a Document Object Model (DOM) object, and use the DOM API to navigate and manipulate the elements.

MBMessage provides the following methods:
getDOMDocument()
obtains a W3C org.w3c.dom.Document object for the message body.
createDOMDocument()
obtains a W3C org.w3c.dom.Document object for the message body.
MbElement provides the following method:
getDOMNode()
obtains a W3C org.w3c.dom.Node object for the message element.

The following example shows a simple XML message and the logical tree that would be created from the message. The message has been sent using WebSphere® MQ. The logical tree diagram also shows the methods to call in order to navigate around the tree.

<document>
  <chapter title='Introduction'>
    Some text
  </chapter>
</document>

The diagram shows the methods that you can call to navigate around a message tree and is described in the surrounding text.

The tree used in this diagram is the one that is created by parsing the previous XML example.
  • From the Root part of the tree, calling getFirstChild() navigates to Properties. Also from Root, calling getLastChild() returns XML.
  • From Properties, calling getParent() returns Root, and calling getNextSibling() returns MQMD.
  • From MQMD, calling getPreviousSibling() returns Properties, calling getParent() returns Root, and calling getNextSibling() returns XML.
  • From XML, calling getPreviousSibling() returns MQMD, calling getParent() returns Root, calling getFirstChild() returns document, and calling getLastChild() also returns document.
  • From document, calling getParent() returns XML, calling getFirstChild() returns chapter, and calling getLastChild() also returns chapter.
  • From chapter, calling getParent() returns document, calling getFirstChild() returns title, and calling getLastChild() returns the child that contains the message data "Some text.".
The following Java code accesses the chapter element in the logical tree for an XML message that does not contain white spaces. The XML parser retains white space in the parsed tree, but the XMLNS and XMLNSC parsers do not.
MbElement root = assembly.getMessage().getRootElement();
MbElement chapter = root.getLastChild().getFirstChild().getFirstChild();

Accessing information about an element

Use the following methods to return information about the referenced element:
getName()
returns the element name as a java.lang.String
getValue()
returns the element value
getType()
returns the generic type, which is one of the following types:
  • NAME: an element of this type has a name, but no value.
  • VALUE: an element of this type has a value, but no name.
  • NAME/VALUE: an element of this type has both a value and a name.
getSpecificType()
returns the parser-specific type of the element
getNamespace()
returns the namespace URI of this element

ac30330_.htm | Last updated Friday, 21 July 2017