Custom Java
In the Graphical Data Mapping editor, you can use the Custom Java™ transform to enter Java code in a message map.
Overview
You can use a Custom Java transform to process elements that have a simple type, and the type matches a native Java type.
You can use a Custom Java transform to process input and outputs that are arrays or complex types. For more information, see Processing complex or repeating elements in a Custom Java transform.
Guidelines to design a Java method to transform simple types
The Java class that you provide to the map must have a static method that returns the appropriate type for the value of the output element, and takes parameters of the appropriate type for the wired inputs.
For example, the
following Java method can be
used in a Custom Java transform
that has three input elements, of types xs:string
, xs:decimal
,
and xs:boolean
, and the output element has a
xs:decimal
type:
public static BigDecimal calSomething(String memType, BigDecimal stdCost, boolean flag) {
BigDecimal actualCost = stdCost;
if (flag & memType.startsWith("gold")) {
BigDecimal discRate = new BigDecimal(0.9);
actualCost = actualCost.multiply(discRate);
}
return actualCost;
}
Guidelines to design a Java method to transform complex or repeating types
You can use a Custom Java transform to process
input and outputs that are arrays or complex types. The IBM® App Connect Enterprise Java plugin
API MbElement Java class
passes data only in a Custom Java
Transform. The Java DOM API
passes data in Custom Java Transforms and in Transform
condition expressions.
You can use the MbElement class in a Java method to pass a complex type, a wildcard xsd:any, or a wildcard xsd:anySimpleType.
Make a Java class visible
- In the Application development page, right-click the project where the map is defined.
- Select Managed included projects.
- Select the Java project, and then click OK.
Call a Java method
You can only configure one call to a Java method in a Custom Java transform. You can define more operations (java method or XPath expression) on the parameters that are required by the method.
You can configure the Java class, and a Java method in the General tab of the Properties page of the transform. The method that you specify defines the transformation logic that is applied by the Custom Java transform.
When you add a Java call in the General tab of the Properties page of a Custom Java transform in your map, an import is automatically added in the map to refer to the package qualified Java class, and a prefix based on the class name is added. All the public static methods in this Java class are then available in content assist when building expressions in other transforms.
For more information, see Mapping an element by using a Custom Java transform.
Define when the transform is applied at run time
You can define supplement connections between input elements and the Custom Java transform. You can then use any input element in a conditional expression that defines the condition under which the transform is applied. If the condition evaluates to true, the transform is applied.
To configure the conditional expression, you define an XPath expression or a Java expression in the Condition tab that is available in the Properties page of the transform.
To define the conditional expression, you can define an XPath expression or a call to a static method on an imported Java class. You can also create a complex expression that includes XPath, Java, and extension functions such as iib:getUserDefinedProperty("propertyname").
By default, if the Java method does not provide a value, the transform creates an element with an empty value. If you do not want an element to be created, you can add a conditional expression in the Condition tab.
For more information, see Configuring the properties of a transform, Defining an XPath conditional expression for a transform, and Defining a Java conditional expression for a transform.
Mappings between the schema type, the Java type, and the IBM App Connect Enterprise message assembly type
The following table shows the mappings between the schema type, the Java type, and the IBM App Connect Enterprise message assembly type:
Schema type | Java type | IBM App Connect Enterprise message assembly tree element type |
---|---|---|
xs:anyURI | java.lang.String | CHARACTER |
xs:base64Binary | byte[] | BLOB |
xs:boolean | boolean, java.lang.Boolean | BOOLEAN |
xs:byte | byte, java.lang.Byte | INTEGER |
xs:date | javax.xml.datatype.XMLGregorianCalendar | DATE |
xs:dateTime | javax.xml.datatype.XMLGregorianCalendar | TIMESTAMP |
xs:dayTimeDuration | javax.xml.datatype.Duration | INTERVAL |
xs:decimal | java.math.BigDecimal | DECIMAL |
xs:double | double, java.lang.Double | FLOAT |
xs:duration | javax.xml.datatype.Duration | INTERVAL |
xs:float | float, java.lang.Float | FLOAT |
xs:gDay | javax.xml.datatype.XMLGregorianCalendar | DATE |
xs:gMonth | javax.xml.datatype.XMLGregorianCalendar | DATE |
xs:gMonthDay | javax.xml.datatype.XMLGregorianCalendar | DATE |
xs:gYear | javax.xml.datatype.XMLGregorianCalendar | DATE |
xs:gYearMonth | javax.xml.datatype.XMLGregorianCalendar | DATE |
xs:hexBinary | byte[] | BLOB |
xs:int | int, java.lang.Integer | INTEGER |
xs:integer | java.math.BigInteger | DECIMAL |
xs:long | long, java.lang.Long | INTEGER |
xs:negativeInteger | java.math.BigInteger | DECIMAL |
xs:nonNegativeInteger | java.math.BigInteger | DECIMAL |
xs:nonPositiveInteger | java.math.BigInteger | DECIMAL |
xs:normalizedString | java.lang.String | CHARACTER |
xs:positiveInteger | java.math.BigInteger | DECIMAL |
xs:short | short, java.lang.Short | INTEGER |
xs:string | java.lang.String | CHARACTER |
xs:time | javax.xml.datatype.XMLGregorianCalendar | TIME |
xs:unsignedByte | Short | INTEGER |
xs:unsignedInt | Long | INTEGER |
xs:unsignedLong | java.math.BigInteger | DECIMAL |
xs:unsignedShort | Int | INTEGER |
xs:yearMonthDuration | javax.xml.datatype.Duration | INTERVAL |