JAXB: квалифицированные атрибуты отключают пространство имен по умолчанию xmlns=?

Когда я использую @XmlSchema(attributeFormDefault = XmlNsForm.QUALIFIED, ...)

or@XmlAttribute(namespace = "sample.com/y", ...)

JAXB игнорирует @XmlSchema(namespace = "sample.com/x", ...)

и вместо:

<a xmlns="sample.com/y" xmlns:ns0="sample.com/y">
  <b ns0:att=""/>
</a>

генерирует что-то вроде:

<ns1:a xmlns:ns1="sample.com/x" xmlns:ns0="sample.com/y">
  <ns1:b ns0:att=""/>
</ns1:a>

Это ожидаемое поведение? Есть ли способ исправить это?


person Ali Shakiba    schedule 24.07.2011    source источник


Ответы (1)


EclipseLink JAXB (MOXy) обрабатывает квалификацию префикса для элементов по-разному в зависимости от квалификации формы атрибута (как показано ниже).

Квалификация пространства имен не является неправильной, но я согласен с тем, что использование пространства имен по умолчанию лучше, когда это возможно. Вы можете отслеживать ход решения этой проблемы, используя следующую ошибку:

А

package forum6808921;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class A {

    private String b;

    public String getB() {
        return b;
    }

    public void setB(String b) {
        this.b = b;
    }

}

Демо

package forum6808921;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(A.class);

        A a = new A();
        a.setB("Hello World");

        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(a, System.out);
    }

}

информация о пакете без атрибута attributeFormDefault

@XmlSchema(
        namespace = "sample.com/x"
        , elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED
        )
package forum6808921;

import javax.xml.bind.annotation.*;

Вывод:

<?xml version="1.0" encoding="UTF-8"?>
<a xmlns="sample.com/x">
   <b>Hello World</b>
</a>

информация о пакете с установленным атрибутом FormDefault

@XmlSchema(
        namespace = "sample.com/x"
        , elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED
        , attributeFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED
        )
package forum6808921;

import javax.xml.bind.annotation.*;

Вывод:

<?xml version="1.0" encoding="UTF-8"?>
<ns0:a xmlns:ns0="sample.com/x">
   <ns0:b>Hello World</ns0:b>
</ns0:a>
person bdoughan    schedule 25.07.2011
comment
Спасибо за подтверждение проблемы. - person Ali Shakiba; 26.07.2011