Как изменить отображение Castor для удаления атрибутов "xmlns: xsi" и "xsi: type" из элемента в выводе XML? - PullRequest
4 голосов
/ 09 июня 2010

Как изменить отображение Castor

<?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>

, чтобы подавить атрибуты xmlns:xsi и xsi:type в элементе вывода XML?Например, вместо выходного 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>

я бы предпочел

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

, чтобы имя элемента подразумевало xsi:type.

1 Ответ

6 голосов
/ 10 июня 2010

Установите для свойства Castor Marshaller suppressXSIType значение false:

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

См. Настройка маршаллера в справочной документации Castor 1.3.1 .(Обратите внимание, что Таблица 1.10 Свойства маршаллера содержит только свойство suppressNamespaces, но методы setSuppressNamespaces() и setSuppressXSIType() оба существуют в классе Marshaller.)

...