Hello all,
I’m running into a NPE when I try to walk a XSD using the xmlschema-walker module. I have
been able to use the walker module to go through other schemas, but most fail with this error.
Any pointers to what I am doing wrong?
Thanks,
Webster
== Test code
Run as Junit test within IDEA.
XmlSchemaCollection collection = new XmlSchemaCollection();
XmlSchema xmlSchema = collection.read(new InputStreamReader(PO_SCHEMA));
XmlSchemaVisitor xmlSchemaVisitor = new XmlSchemaVisitor() { // … noop };
XmlSchemaWalker walker = new XmlSchemaWalker(collection);
walker.addVisitor(xmlSchemaVisitor);
XmlSchemaElement root = xmlSchema.getElementByName("purchaseOrder");
walker.walk(root);
== Stacktrace
java.lang.NullPointerException
at org.apache.ws.commons.schema.utils.XmlSchemaNamedImpl.setName(XmlSchemaNamedImpl.java:125)
at org.apache.ws.commons.schema.utils.XmlSchemaNamedWithFormImpl.setName(XmlSchemaNamedWithFormImpl.java:113)
at org.apache.ws.commons.schema.XmlSchemaAttribute$2.run(XmlSchemaAttribute.java:146)
at org.apache.ws.commons.schema.utils.CollectionFactory.withSchemaModifiable(CollectionFactory.java:123)
at org.apache.ws.commons.schema.XmlSchemaAttribute.setName(XmlSchemaAttribute.java:140)
at org.apache.ws.commons.schema.walker.XmlSchemaScope.getAttribute(XmlSchemaScope.java:607)
at org.apache.ws.commons.schema.walker.XmlSchemaScope.createAttributeMap(XmlSchemaScope.java:637)
at org.apache.ws.commons.schema.walker.XmlSchemaScope.walk(XmlSchemaScope.java:316)
at org.apache.ws.commons.schema.walker.XmlSchemaScope.walk(XmlSchemaScope.java:151)
at org.apache.ws.commons.schema.walker.XmlSchemaScope.<init>(XmlSchemaScope.java:112)
at org.apache.ws.commons.schema.walker.XmlSchemaWalker.walk(XmlSchemaWalker.java:224)
== Schema
Cut from the XML Schema spec:
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:annotation>
<xsd:documentation xml:lang="en">
Purchase order schema for Example.com.
Copyright 2000 Example.com. All rights reserved.
</xsd:documentation>
</xsd:annotation>
<xsd:element name="purchaseOrder" type="PurchaseOrderType"/>
<xsd:element name="comment" type="xsd:string"/>
<xsd:complexType name="PurchaseOrderType">
<xsd:sequence>
<xsd:element name="shipTo" type="USAddress"/>
<xsd:element name="billTo" type="USAddress"/>
<xsd:element ref="comment" minOccurs="0"/>
<xsd:element name="items" type="Items"/>
</xsd:sequence>
<xsd:attribute name="orderDate" type="xsd:date"/>
</xsd:complexType>
<xsd:complexType name="USAddress">
<xsd:sequence>
<xsd:element name="name" type="xsd:string"/>
<xsd:element name="street" type="xsd:string"/>
<xsd:element name="city" type="xsd:string"/>
<xsd:element name="state" type="xsd:string"/>
<xsd:element name="zip" type="xsd:decimal"/>
</xsd:sequence>
<xsd:attribute name="country" type="xsd:NMTOKEN"
fixed="US"/>
</xsd:complexType>
<xsd:complexType name="Items">
<xsd:sequence>
<xsd:element name="item" minOccurs="0" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="productName" type="xsd:string"/>
<xsd:element name="quantity">
<xsd:simpleType>
<xsd:restriction base="xsd:positiveInteger">
<xsd:maxExclusive value="100"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="USPrice" type="xsd:decimal"/>
<xsd:element ref="comment" minOccurs="0"/>
<xsd:element name="shipDate" type="xsd:date" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="partNum" type="SKU" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
<!-- Stock Keeping Unit, a code for identifying products -->
<xsd:simpleType name="SKU">
<xsd:restriction base="xsd:string">
<xsd:pattern value="\d{3}-[A-Z]{2}"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>
|