JAXB: определенный префикс пространства имен для всех элементов - PullRequest
2 голосов
/ 01 марта 2012

У меня та же проблема:

JAXB: нужен префикс пространства имен для всех элементов

однако я должен использовать определенное пространство имен. Затем я изменяю package-info.java на:

@XmlSchema(
namespace = "www.example.com/a",
elementFormDefault = XmlNsForm.UNQUALIFIED,
xmlns={@XmlNs(prefix="pre", namespaceURI="www.example.com/a")})

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

Я выполняю пример:

public class Test {
public static void main(String[] args) 
        throws JAXBException, XMLStreamException, FactoryConfigurationError {
    ObjectFactory o = new ObjectFactory();
    Login l = o.createLogin();
    l.setPassword("abc");
    l.setUsername("abc");
    JAXBContext jc = JAXBContext.newInstance(l.getClass());

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

Однако, мой результат имеет префикс «ns2» вместо «pre», как я установил в package-info:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns2:Login xmlns:ns2="www.example.com/a">
    <username>abc</username>
    <password>abc</password>
</ns2:Login>

Тогда я попробовал ярлык, выполнив: Marshaller m = jc.createMarshaller (); m.setProperty (Marshaller.JAXB_FORMATTED_OUTPUT, true);

    XMLStreamWriter xmlStreamWriter = XMLOutputFactory.newInstance()
             .createXMLStreamWriter(System.out);
        xmlStreamWriter.setPrefix("pre", "www.example.com/a");

    m.marshal(l, xmlStreamWriter);

Если в одной руке он добавляет префикс. С другой стороны, пространство имен не включено в xml: abcabc

Я ожидал чего-то вроде: азбука азбука

UPDATE:

Я мог бы найти ответ на другой вопрос:

Что случилось с JAXB NamespacePrefixMapper в JDK6u18

Мне нужен JABX RI. Расширяя NamespacePrefixMapper и добавляя его в masherller, я могу сгенерировать xml с правильным префиксом.

...