# @XMLRootElement mit default Namespace



## Tho82 (9. Mrz 2009)

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:


```
@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:


```
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:


```
@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 (9. Mrz 2009)

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


----------



## Tho82 (9. Mrz 2009)

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

Anstatt: 

```
final JAXBContext context = JAXBContext.newInstance();
```

einfach: 

```
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.


----------



## MySelV (9. Mrz 2009)

Danke. Exakt das gleiche Problem ist auch das von mir im vorherigen Threat


----------

