10 Stimmen

JAXB: Wie kann ich Klassen so annotieren, dass sie zu verschiedenen Namespaces gehören?

Ich möchte JAXB-annotiert Klassen, die ein-/ausmarschiert nach verschiedene XML-Namensräume .

Was ich brauche, ist etwas wie:

<someRootElement xmlns="urn:my:ns1"
    xmlns:a="urn:my:ns2" xmlns:b="urn:my:ns3">

  <someElement/>
  <a:someElement/>
  <b:someElement/>

</someRootElement>

Wie kann man das machen?

Kann man das programmatisch machen? ( sans die Notwendigkeit von JAXB's .xjb Bindungen Datei ?)

12voto

andri Punkte 11065
@XmlRootElement(name="someRootElement", namespace = "urn:my:ns1")
class Test {
    @XmlElement(name="someElement", namespace="urn:my:ns1")
    String elem1 = "One";

    @XmlElement(name="someElement", namespace="urn:my:ns2")
    String elem2 = "Two";

    @XmlElement(name="someElement", namespace="urn:my:ns3")
    String elem3 = "Three";
}

Daraus ergibt sich das folgende XML:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<someRootElement xmlns="urn:my:ns1" xmlns:ns2="urn:my:ns2" xmlns:ns3="urn:my:ns3">
    <someElement>One</someElement>
    <ns2:someElement>Two</ns2:someElement>
    <ns3:someElement>Three</ns3:someElement>
</someRootElement>

Wenn Sie JAXB RI verwenden und die Standardeinstellung nicht mögen ns2 y ns3 Namespace-Präfixe zu verwenden, müssen Sie Ihre eigenen NamespacePrefixMapper .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X