Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How change Castor mapping to remove "xmlns:xsi" and "xsi:type" attributes from element in XML output?

How do I change the Castor mapping

<?xml version="1.0"?>
<!DOCTYPE mapping PUBLIC "-//EXOLAB/Castor Mapping DTD Version 1.0//EN"
                         "http://castor.org/mapping.dtd">

<mapping>
    <class name="java.util.ArrayList" auto-complete="true">
        <map-to xml="ArrayList" />
    </class>
    <class name="com.db.spgit.abstrack.ws.response.UserResponse">
        <map-to xml="UserResponse" />
        <field name="id" type="java.lang.String">
            <bind-xml name="id" node="element" />
        </field>
        <field name="deleted" type="boolean">
            <bind-xml name="deleted" node="element" />
        </field>
        <field name="name" type="java.lang.String">
            <bind-xml name="name" node="element" />
        </field>
        <field name="typeId" type="java.lang.Integer">
            <bind-xml name="typeId" node="element" />
        </field>
        <field name="regionId" type="java.lang.Integer">
            <bind-xml name="regionId" node="element" />
        </field>
        <field name="regionName" type="java.lang.String">
            <bind-xml name="regionName" node="element" />
        </field>
    </class>
</mapping>

to suppress the xmlns:xsi and xsi:type attributes in the element of the XML output? For example, instead of the output XML

<?xml version="1.0" encoding="UTF-8"?> 
<ArrayList>
    <UserResponse xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="UserResponse">
        <name>Tester</name>
        <typeId>1</typeId>
        <regionId>2</regionId>
        <regionName>US</regionName>
    </UserResponse>
</ArrayList>

I'd prefer

<?xml version="1.0" encoding="UTF-8"?> 
<ArrayList>
    <UserResponse>
        <name>Tester</name>
        <typeId>1</typeId>
        <regionId>2</regionId>
        <regionName>US</regionName>
    </UserResponse>
</ArrayList>

such that the element name implies the xsi:type.

like image 291
Derek Mahar Avatar asked Jun 09 '10 16:06

Derek Mahar


1 Answers

Set the Castor Marshaller property suppressXSIType to false:

Marshaller marshaller = new Marshaller(w);
marshaller.setSuppressXSIType(true);

See Configuring the Marshaller in the Castor 1.3.1 Reference Documentation. (Note that Table 1.10 Marshaller properties lists only property suppressNamespaces, but methods setSuppressNamespaces() and setSuppressXSIType() both exist in class Marshaller.)

like image 111
Derek Mahar Avatar answered Sep 27 '22 16:09

Derek Mahar