DataWeave Xml input to Java object
Pre-requisite:
- Anypoint Studio 5.2.0
- Mule ESB Runtime 3.7.1
- 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;
}
}
|