@XMLRootElement mit default Namespace

Status
Nicht offen für weitere Antworten.

Tho82

Mitglied
Hallo zusammen,

ich habe aus einem XSD File das wie folgt aussieht versucht, mit Jaxb Klassen zu generieren:

[HIGHLIGHT="xml"]<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="urn:com:test:interop"
xmlns:binxml="urn:com:text:binxml" elementFormDefault="qualified"
targetNamespace="urn:com:test:interop" binxml:uuid="fd69d395-22b6-3da6-b596-129e5ad57766">

...

<xsd:element name="freetext" binxml:msgtype="FREETXT" >
<xsd:complexType>
<xsd:sequence>
<xsd:element name="timestamp" type="TimestampType"/>
<xsd:element name="subject">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:maxLength value="60"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="text" type="TextType"/>
</xsd:sequence>
<xsd:attribute name="version" type="VersionType"/>
<xsd:attribute name="dir" use="optional" type="TextDirectionType" default="rtl"/>
</xsd:complexType>
</xsd:element>
[/HIGHLIGHT]

Die Klasse sieht nun aus wie folgt:

Code:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
    "timestamp",
    "subject",
    "text"
})
@XmlRootElement(name = "freetext")
public class Freetext {
...

Hier wird also kein Namespace definiert. Wenn ich nun versuche, XML zu unmarshallen, dann bekomme ich folgende Exception:

Code:
javax.xml.bind.UnmarshalException: unexpected element (uri:"urn:com:test:interop", local:"freetext"). Expected elements are (none)
	at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleEvent(UnmarshallingContext.java:556)

Irgendwie scheint jaxb den default namespace der XSD nicht umzusetzen. Ich habe manuell versucht, diesen einzufügen:

Code:
@XmlRootElement(name = "freetext", namespace = "urn:com:test:interop")

Dies führt zu derselben UnmarshalException. Ich weiss leider nicht, was ich noch probieren könnte. Hat jemand eine idee wie der default namespace (xmlns="urn:com:test:interop") umgesetzt wird in meine JavaKlasse damit das unmarshallen funktioniert?

Hab leider nichts gefunden was mir weiterhelfen könnte bei google :-(

Thx im Voraus..
 

Ebenius

Top Contributor
Hat es einen näheren Sinn, dass das Schema auch im TargetNamespace "urn:com:test:interop" steht (bezieht sich auf den Teil mit [noparse]...[/noparse] im Code; BB-Code funktioniert in Code-Blöcken nicht)?

Ebenius
 
Zuletzt bearbeitet:

Tho82

Mitglied
Das kann ich dir nicht beantworten, habe das File nur zugeschickt bekommen. Habe mittlerweile die Lösung aber selber gefunden:

Anstatt:
Code:
final JAXBContext context = JAXBContext.newInstance();

einfach:
Code:
final JAXBContext context = JAXBContext.newInstance("xml.jaxb");

wobei "xml.jaxb" das Package ist, indem sich die ObjectFactory.java und die package-info.java der von Jaxb generierten Klassen befindet. Die Namespace definition befindet sich in der package-info.java.
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben