Sunday, October 4, 2015

DataWeave Xml input to Java object

DataWeave Xml input to Java object


This tutorial explains how to develop a DataWeave transformation input xml to Java Object.

Pre-requisite:

  1. Anypoint Studio 5.2.0
  2. Mule ESB Runtime 3.7.1
  3. xml input files.

Input XML File

<user>
<name>Annie</name>
<lastName>Point</lastName>
</user>

Mule Flow

Mule Source

<http:listener-config name="HTTP_Listener_Configuration" host="0.0.0.0" port="8081" doc:name="HTTP Listener Configuration"/>
<flow name="testweaveFlow">
<http:listener config-ref="HTTP_Listener_Configuration" path="/" metadata:id="cab0526f-779e-427c-9a33-be44f9b12696" doc:name="HTTP"/>
<dw:transform-message doc:name="Transform Message">
<dw:input-payload doc:sample="json.json"/>
<dw:set-payload><![CDATA[%dw 1.0
%type user = :object { class: "testweave.User" }
%output application/java
---
{
firstName: payload.user.name,
lastName: payload.user.lastName
} as :user]]></dw:set-payload>
</dw:transform-message>
<byte-array-to-string-transformer doc:name="Byte Array to String"/>
</flow>

In the transform code I created the Object type in the header
%type user = :object { class: "testweave.User"}
And the payload of the transform is converted to User Object using the transform logic as below.
{
firstName: payload.user.name,
lastName: payload.user.lastName
} as :user

 DataWeave

User.java

package testweave;
public class User {
private String firstName;
private String lastName;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return this.firstName+" "+this.lastName;
}
}

1 comment: