# XSD Definition und javax.xml.bind.Binder.updateJAXB(Node arg0)



## bvidanovic (13. März 2008)

Hallo,
ich habe aktuell mit einem Problem in XSD und der Methode Binder.updateJAXB(Node arg0) zu kämpfen
XSD-Definition sieht folgendermaßen aus:

```
<xsd:complexType name="ElementRefType">
  <xsd:sequence maxOccurs="unbounded" minOccurs="0">
      <xsd:element name="Property" type="PropertyType" 
        minOccurs="0" maxOccurs="unbounded">
        <xsd:annotation>
          <xsd:documentation>
            Die Properties der Komponente ElementRefType. Werden in
            der aufgefuehrten Reihenfolge an den Constructor der
            Komponente uebergeben.
          </xsd:documentation>
        </xsd:annotation>
      </xsd:element>
      <xsd:attribute name="idref" type="xsd:string" use="required">
      <xsd:annotation>
        <xsd:documentation>
          ID der Implementierung der Komponente ElementRefType aus
          der Konfiguration.
        </xsd:documentation>
      </xsd:annotation>
    </xsd:attribute>
  </xsd:complexType>
    </xsd:sequence>
```
Die Definition in XML:

```
<ElementRef idref="ElementIdRef"/>
```
D.h. ohne weitere Unterelemente, denn sowohl "Sequence" als auch Unterelement "Property" sind optional.
Wenn ich das XML-Dokument aktualisiere und an den Binder übergebe, um den JAXB-Tree mittels updateJAXB(Node arg0) zu aktualisieren, bekomme ich eine NullPointerException, weil der Binder offensichtlich weitere Unterelemente von ElementRef erwartet.

Fehlerstack:


> java.lang.NullPointerException
> at com.sun.xml.bind.v2.runtime.reflect.Lister$CollectionLister.reset(Lister.java:269)
> at com.sun.xml.bind.v2.runtime.property.ArrayProperty.reset(ArrayProperty.java:34)
> at com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.reset(ClassBeanInfoImpl.java:211)
> ...



Die XML-Validierung in IBM RAD 7.0 hat mit dieser Schreibweise keine Probleme.

Sobald die Definition in XML folgendermaßen geändert wird:

```
<ElementRef idref="ElementIdRef">
          <mkp:Property name="nameDerProperty" type="typeDerProperty" value="valueDerProperty"/>
</ElementRef>
```
wird die JAXB-Darstellung durch den Binder fehlerfrei aktualisiert.
Das ist allerdings nicht gewollt.

Ich kann den Fehler mit allen anderen Elementen nachstellen, bei denen das Vorkommen der Unterelemente als optional definiert ist (minOccurs="0" maxOccurs="unbounded").
Sobald das optionale Unterelement aus dem XML hinausfliegt, hat IBM RAD 7.0 nichts dagegen aber der Binder sagt: NPE.

Verwendete Komponenten:


> java version "1.5.0"
> Java(TM) 2 Runtime Environment, Standard Edition (build pwi32devifx-20070608 (SR5+IY99712))
> IBM J9 VM (build 2.3, J2RE 1.5.0 IBM J9 2.3 Windows 2000 x86-32 j9vmwi3223-20070426 (JIT enabled)
> J9VM - 20070420_12448_lHdSMR
> ...



Bindererstellung und -konfiguration

```
jaxbContext = JAXBContext.newInstance(jaxbPackage);
        binder = jaxbContext.createBinder();
        try
        {
            binder.setProperty(
                "com.sun.xml.bind.namespacePrefixMapper", 
                new NamespacePrefixMapperImpl());
        }
        catch (PropertyException e)
        {
           e.printStackTrace();
        }
```
Hat jemand eine Idee. Muss Binder zusätzlich konfiguriert werden? Bug im Binder vielleicht?

Danke im Voraus.


----------



## zerix (13. März 2008)

Ich war mal so frei code-Tags und sowas einzufügen, damit es mal etwas übersichtlicher ist.

MFG

Sascha


----------



## bvidanovic (13. März 2008)

Hallo, Sascha!

Vielen Dank
Boris.


----------

