简体   繁体   中英

How can I add namespace prefix to XML using XStream in Spring Batch

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>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM