I'm using IBM's Websphere to develop/deploy a webservices application that accepts strings (xml docs) as arguments. I need to validate the incoming documents against a schema. When I run the code below I get a null pointer exception from the XML parser. I know I should update to a newer version of xerces but when I download the 2.0.2 bin zip there is no xerces.jar file in there...just a xercesImpl.jar. I'm not familiar with how to upgrade my parser with a newer version of a parser ...anyways here is the code....btw both the source and schema validate fine and the schema does validate against the source document in a Microsoft environment....WHAT DO I DO NOW? AND if I run a less complex document against a less complex schema then it works.. try{ String methodnamespace = new String( "MesApi/Schemas/version1.0/ReceiveInventory"); String url = new String( "http://localhost:8080/meswebservice/schemas/ReceiveInventory.xsd"); String sxml = new XMLDataTest().getXMLData("RecInventory.XML"); //this just loads the request xml from a directory and returns the xml as a string...test purposes only
//Create the Sax parser; SAXParser myparser = new SAXParser(); //set the parser to validate myparser.setFeature("http://xml.org/sax/features/validation",true); //tell the parser what schema and what namespace to match it to... String myprop = new String( "http://apache.org/xml/properties/schema/external-schemaLocation"); String mySchema = methodnamespace + " " + url; myparser.setProperty(myprop, mySchema); //create/set the content handler ReceiveInventoryContentHandler MethodContent = new ReceiveInventoryContentHandler(); //Set the content handler myparser.setContentHandler(MethodContent); //Set the Error handler myparser.setErrorHandler(new MESErrorHandler()); //Parse the string myparser.parse(new InputSource(new java.io.StringReader(sxml))); System.out.println("no errors"); } catch.... Here is the source document... <request xmlns="MesApi/Schemas/version1.0/ReceiveInventory" server ='myserver' database='mydatabase' clientmachinename='xxx' requestid ='scooby'> <actualreceipt printloadticket="1"> <supply_order_nbr>MP28214</supply_order_nbr> <supply_order_release_nbr></supply_order_release_nbr> <supply_order_line_nbr>00001</supply_order_line_nbr> <supply_order_line_receipt_nbr>00001</supply_order_line_receipt_nbr> <mmm_facility_code>HT</mmm_facility_code> <mmm_id_nbr>34300000030</mmm_id_nbr> <receiptcomplete>0</receiptcomplete> <receipt_datetime>2002-02-26T01:01:01</receipt_datetime> <receipt_qty mesunittype ="ITEMSUPPLIER">137.222222</receipt_qty> <receipt_uom>sqyd</receipt_uom> <carriername>billybobtrucking</carriername> <shipment_mode_code>R</shipment_mode_code> <packing_list_nbr>8675309</packing_list_nbr> <comment>This is your comment blahblahblahb</comment> <inventorydetails> <material> <run_nbr>77777</run_nbr> <batch_nbr>909809</batch_nbr> <unit_nbr>302457</unit_nbr> <material_qty mesunittype ="REPORTING">100</material_qty> <load> <load_id>XX00094</load_id> <storage_loc_nbr>TEST</storage_loc_nbr> <qc_status_code>R</qc_status_code> <adjustment_qty mesunittype ="REPORTING">100</adjustment_qty> </load> </material> </inventorydetails> </actualreceipt> </request> Here is the schema... <xsd:schema targetNamespace="MesApi/Schemas/version1.0/ReceiveInventory" elementFormDefault="qualified" xmlns:src= "MesApi/Schemas/version1.0/ReceiveInventory" xmlns:xsd= "http://www.w3.org/2001/XMLSchema"> <xsd:attributeGroup name="connections"> <xsd:attribute name="server" type="xsd:string" use="optional"/> <xsd:attribute name="database" type="xsd:string" use="optional" /> <xsd:attribute name="requestid" type="xsd:string" use= "optional"/> <xsd:attribute name="siteid" type="xsd:string" use="optional"/> </xsd:attributeGroup> <!-- Define the inventory quantity rules. All quantity elements must have an mesunittype attribute --> <!-- Extend the simple type to include an attribute --> <xsd:complexType name='mesquantity'> <xsd:simpleContent> <xsd:extension base="xsd:double"> <xsd:attribute name="mesunittype" type= "src:unitofmeasure" use="required"/> </xsd:extension> </xsd:simpleContent> </xsd:complexType> <!-- Restrict the simple type to be greater than zero --> <xsd:complexType name='qtygreaterthanzero'> <xsd:simpleContent> <xsd:restriction base="src:mesquantity"> <xsd:minInclusive value="0.000001"/> </xsd:restriction> </xsd:simpleContent> </xsd:complexType> <!-- Define a type that restricts mesquantity to be zero or greater --> <xsd:complexType name='qtyzeroandgreater'> <xsd:simpleContent> <xsd:restriction base="src:mesquantity"> <xsd:minInclusive value="0"/> </xsd:restriction> </xsd:simpleContent> </xsd:complexType> <!-- Define all of the enumeration values for mesunittype --> <xsd:simpleType name='unitofmeasure'> <xsd:restriction base='xsd:string'> <xsd:enumeration value="REPORTING"/> <xsd:enumeration value="INVENTORY"/> <xsd:enumeration value="COMMONPURCHASING"/> <xsd:enumeration value="ITEMSUPPLIER"/> </xsd:restriction> </xsd:simpleType> <!--Define the root element --> <xsd:element name="request" type="src:requestdata"/> <xsd:complexType name="requestdata"> <xsd:sequence> <xsd:element name='actualreceipt' type='src:actualreceipttype' minOccurs='1' maxOccurs='unbounded'/> </xsd:sequence> <xsd:attributeGroup ref="src:connections"/> <xsd:attribute name="clientmachinename" type="xsd:string" use= "optional"/> <xsd:attribute name="printloadticket" type="xsd:boolean" use= "optional"/> </xsd:complexType> <xsd:complexType name='actualreceipttype'> <xsd:sequence> <xsd:element name='supply_order_nbr' minOccurs='1' maxOccurs='1'> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:maxLength value="10" /> </xsd:restriction> </xsd:simpleType> </xsd:element> <xsd:element name='supply_order_release_nbr' minOccurs='1' maxOccurs='1'> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:maxLength value="3" /> </xsd:restriction> </xsd:simpleType> </xsd:element> <xsd:element name='supply_order_line_nbr' minOccurs='1' maxOccurs='1' type='xsd:positiveInteger'/> <xsd:element name='supply_order_line_receipt_nbr' minOccurs= '1' maxOccurs='1' type='xsd:positiveInteger'/> <xsd:element name='mmm_facility_code' minOccurs='1' maxOccurs= '1'> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:maxLength value="8" /> </xsd:restriction> </xsd:simpleType> </xsd:element> <xsd:element name='mmm_id_nbr' minOccurs='1' maxOccurs='1'> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:maxLength value="11" /> </xsd:restriction> </xsd:simpleType> </xsd:element> <xsd:element name='receiptcomplete' minOccurs='1' maxOccurs= '1' type='xsd:boolean'/> <xsd:element name='receipt_datetime' minOccurs='1' maxOccurs= '1' type='xsd:dateTime'/> <xsd:element name='receipt_qty' minOccurs='1' maxOccurs='1' type="src:qtygreaterthanzero"/> <xsd:element name='receipt_uom' minOccurs='1' maxOccurs='1'> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:maxLength value="10" /> </xsd:restriction> </xsd:simpleType> </xsd:element> <xsd:element name='entered_receipt_qty' minOccurs='0' maxOccurs='1' type="src:qtygreaterthanzero"/> <xsd:element name='entered_receipt_uom' minOccurs='0' maxOccurs='1'> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:maxLength value="10" /> </xsd:restriction> </xsd:simpleType> </xsd:element> <xsd:element name='carriername' minOccurs='1' maxOccurs='1'> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:maxLength value="40" /> </xsd:restriction> </xsd:simpleType> </xsd:element> <xsd:element name='shipment_mode_code' minOccurs='1' maxOccurs ='1'> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:maxLength value="2" /> </xsd:restriction> </xsd:simpleType> </xsd:element> <xsd:element name='packing_list_nbr' minOccurs='1' maxOccurs= '1'> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:maxLength value="11" /> </xsd:restriction> </xsd:simpleType> </xsd:element> <xsd:element name='comment' minOccurs='0' maxOccurs='1' type= 'xsd:string'/> <xsd:element name='item_dimension_set_id' minOccurs='0' maxOccurs='1' type='xsd:long'/> <xsd:element name='inventorydetails' minOccurs='1' maxOccurs= 'unbounded' type='src:inventorydetailstype'/> </xsd:sequence> <xsd:attribute name="printloadticket" type="xsd:boolean"/> </xsd:complexType> <xsd:complexType name='inventorydetailstype'> <xsd:sequence> <xsd:element name='material' minOccurs='1' maxOccurs= 'unbounded' type='src:materialtype'/> </xsd:sequence> </xsd:complexType> <xsd:complexType name='materialtype'> <xsd:sequence> <xsd:element name='run_nbr' minOccurs='1' maxOccurs='1'> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:maxLength value="10" /> </xsd:restriction> </xsd:simpleType> </xsd:element> <xsd:element name='batch_nbr' minOccurs='1' maxOccurs='1' > <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:maxLength value="10" /> </xsd:restriction> </xsd:simpleType> </xsd:element> <xsd:element name='unit_nbr' minOccurs='1' maxOccurs='1'> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:maxLength value="10" /> </xsd:restriction> </xsd:simpleType> </xsd:element> <xsd:element name='material_qty' minOccurs='1' maxOccurs= '1' type="src:qtyzeroandgreater"/> <xsd:element name='load' minOccurs='1' maxOccurs= 'unbounded' type='src:loadtype'/> </xsd:sequence> </xsd:complexType> <xsd:complexType name='loadtype'> <xsd:sequence> <xsd:element name='load_id' minOccurs='1' maxOccurs='1'> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:maxLength value="8" /> </xsd:restriction> </xsd:simpleType> </xsd:element> <xsd:element name='storage_loc_nbr' minOccurs='1' maxOccurs='1' > <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:maxLength value="10" /> </xsd:restriction> </xsd:simpleType> </xsd:element> <xsd:element name='qc_status_code' minOccurs='1' maxOccurs='1'> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:maxLength value="2" /> </xsd:restriction> </xsd:simpleType> </xsd:element> <xsd:element name='adjustment_qty' minOccurs='0' maxOccurs='1' type="src:qtygreaterthanzero"/> </xsd:sequence> </xsd:complexType> </xsd:schema> -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>