Jaxb unmarshalling (xml to object) и marshalling (object to xml), xmls немного отличаются

Используя JAXB, я пробовал демаршалировать (из XML в объект) и сортировать (из объекта в XML). Я заметил, что есть небольшая разница в форматировании xml, хотя технически я чувствую, что оба они одинаковы.

Исходный xml выглядит следующим образом:

<?xml version="1.0"?>
<Sites>
<Site id="101" name="NY-01" location="New York" xmlns="http://example.ipsoft.com/coding.xsd">
    <Hosts>
        <Host id="1001">
           <Host_Name>srv001001</Host_Name>
           <IP_address>10.1.2.3</IP_address>
           <OS>Windows</OS>
           <Load_avg_1min>1.3</Load_avg_1min>
           <Load_avg_5min>2.5</Load_avg_5min>
           <Load_avg_15min>1.2</Load_avg_15min>
        </Host>

    </Hosts>
</Site>
</Sites>

После маршалинга объекта в xml результат будет выглядеть так:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Sites xmlns:ns2="http://example.ipsoft.com/coding.xsd">
    <ns2:Site location="New York" name="NY-01" id="101">
        <ns2:Hosts>
            <ns2:Host id="1001">
                <ns2:Host_Name>srv001001</ns2:Host_Name>
                <ns2:IP_address>10.1.2.3</ns2:IP_address>
                <ns2:OS>Windows</ns2:OS>
                <ns2:Load_avg_1min>1.3</ns2:Load_avg_1min>
                <ns2:Load_avg_5min>2.5</ns2:Load_avg_5min>
                <ns2:Load_avg_15min>1.2</ns2:Load_avg_15min>
            </ns2:Host>

</Sites>

Как сделать как исходный xml-код, так и конечный вывод одинаковыми?


person jrpalla    schedule 27.02.2014    source источник
comment
возможный дубликат stackoverflow.com/questions/8057733/, хотя ответа на этот вопрос еще нет   -  person Max Fichtelmann    schedule 27.02.2014


Ответы (1)


Документы XML имеют эквивалентную квалификацию пространства имен.

Когда JAXB объявляет имя по умолчанию

Когда вы указываете следующую аннотацию уровня пакета @XmlSchema, тогда реализация JAXB обычно использует пространство имен по умолчанию:

@XmlSchema(
    namespace = "http://example.ipsoft.com/coding.xsd"",
    elementFormDefault = XmlNsForm.QUALIFIED)
package example;

import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;

Почему JAXB не использует здесь пространство имен по умолчанию

В вашем XML-документе не все ваши XML-элементы квалифицированы пространством имен (Site есть, но Sites нет), поэтому JAXB не сохраняет префикс, означающий отсутствие пространства имен вместо пространства имен по умолчанию.

<Sites>
    <Site id="101" name="NY-01" location="New York" xmlns="http://example.ipsoft.com/coding.xsd">
person bdoughan    schedule 05.03.2014