bvidanovic
Grünschnabel
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:
Die Definition in XML:
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:
Die XML-Validierung in IBM RAD 7.0 hat mit dieser Schreibweise keine Probleme.
Sobald die Definition in XML folgendermaßen geändert wird:
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:
Bindererstellung und -konfiguration
Hat jemand eine Idee. Muss Binder zusätzlich konfiguriert werden? Bug im Binder vielleicht?
Danke im Voraus.
ich habe aktuell mit einem Problem in XSD und der Methode Binder.updateJAXB(Node arg0) zu kämpfen
XSD-Definition sieht folgendermaßen aus:
XML:
<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>
Code:
<ElementRef idref="ElementIdRef"/>
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)
at com.sun.xml.bind.v2.runtime.unmarshaller.StructureLoader.startElement(StructureLoader.java:142)
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext._startElement(UnmarshallingContext.java:367)
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.startElement(UnmarshallingContext.java:345)
at com.sun.xml.bind.v2.runtime.unmarshaller.InterningXmlVisitor.startElement(InterningXmlVisitor.java:35)
at com.sun.xml.bind.v2.runtime.unmarshaller.SAXConnector.startElement(SAXConnector.java:117)
at com.sun.xml.bind.unmarshaller.DOMScanner.visit(DOMScanner.java:224)
at com.sun.xml.bind.unmarshaller.DOMScanner.visit(DOMScanner.java:261)
at com.sun.xml.bind.unmarshaller.DOMScanner.visit(DOMScanner.java:230)
at com.sun.xml.bind.unmarshaller.DOMScanner.visit(DOMScanner.java:261)
at com.sun.xml.bind.unmarshaller.DOMScanner.visit(DOMScanner.java:230)
at com.sun.xml.bind.unmarshaller.DOMScanner.visit(DOMScanner.java:261)
at com.sun.xml.bind.unmarshaller.DOMScanner.visit(DOMScanner.java:230)
at com.sun.xml.bind.unmarshaller.DOMScanner.visit(DOMScanner.java:261)
at com.sun.xml.bind.unmarshaller.DOMScanner.visit(DOMScanner.java:230)
at com.sun.xml.bind.unmarshaller.DOMScanner.visit(DOMScanner.java:261)
at com.sun.xml.bind.unmarshaller.DOMScanner.visit(DOMScanner.java:230)
at com.sun.xml.bind.unmarshaller.DOMScanner.scan(DOMScanner.java:107)
at com.sun.xml.bind.unmarshaller.DOMScanner.scan(DOMScanner.java:85)
at com.sun.xml.bind.v2.runtime.BinderImpl.associativeUnmarshal(BinderImpl.java:139)
at com.sun.xml.bind.v2.runtime.BinderImpl.updateJAXB(BinderImpl.java:107)
at de.dsv.tools.ejb.db.XmlDocument.syncVonXML(XmlDocument.java:324)
at de.dsv.mokka.produktverwaltung.kundenprodukt.valid.XMLHelferTest.testKorrVonXML(XMLHelferTest.java:415)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:615)
at junit.framework.TestCase.runTest(TestCase.java:154)
at junit.framework.TestCase.runBare(TestCase.java:127)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:118)
at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:128)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
Die XML-Validierung in IBM RAD 7.0 hat mit dieser Schreibweise keine Probleme.
Sobald die Definition in XML folgendermaßen geändert wird:
Code:
<ElementRef idref="ElementIdRef">
<mkp:Property name="nameDerProperty" type="typeDerProperty" value="valueDerProperty"/>
</ElementRef>
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
JIT - 20070419_1806_r8
GC - 200704_19)
JCL - 20070608
IBM RAD 7.0.0.4
jaxb-api.jar 2.0
jaxb-impl.jar 2.0
Bindererstellung und -konfiguration
Code:
jaxbContext = JAXBContext.newInstance(jaxbPackage);
binder = jaxbContext.createBinder();
try
{
binder.setProperty(
"com.sun.xml.bind.namespacePrefixMapper",
new NamespacePrefixMapperImpl());
}
catch (PropertyException e)
{
e.printStackTrace();
}
Danke im Voraus.
Zuletzt bearbeitet von einem Moderator: