I am using XStreamMarshaller of Spring batch to generate XML, how can I add prefix namespace to nodes?
<bean id="userUnmarshaller"
class="org.springframework.oxm.xstream.XStreamMarshaller">
<property name="aliases">
<util:map id="aliases">
<entry key="user" value="com.app.User" />
</util:map>
</property>
</bean>
My Java Object :
package com.app;
public class User {
int id;
String username;
String password;
int age;
//... getter and setter methods
}
I get now something like that :
<?xml version="1.0" encoding="UTF-8"?>
<users>
<user>
<id>1</id>
<username>app</username>
<password>password</password>
<age>30</age>
</user>
</users>
but my need is :
<?xml version="1.0" encoding="UTF-8"?>
<ns1:users>
<ns2:user>
<ns2:id>1</ns2:id>
<ns2:username>app</ns2:username>
<ns2:password>password</ns2:password>
<ns2:age>30</ns2:age>
</ns2:user>
</ns1:users>
I tried to add xstream alias annotation to User.java, but it doesn't seems to work. I really appreciate any help you can provide, Thank you
Try below code where I have updated property rootTagName and aliases entry key as shown below:
<bean id="itemWriter" class="org.springframework.batch.item.xml.StaxEventItemWriter">
<property name="resource" value="file:xml/outputs/users.xml" />
<property name="marshaller" ref="userUnmarshaller" />
<property name="rootTagName" value="ns1:users" />
</bean>
<bean id="userUnmarshaller" class="org.springframework.oxm.xstream.XStreamMarshaller">
<property name="aliases">
<util:map id="aliases">
<entry key="ns2:user" value="com.mkyong.User" />
</util:map>
</property>
</bean>