Ok - I have been struggling with this for over two weeks now and am about to 
pull out my hair. I have scrubbed discussion groups, websites for help but alas 
I come up with nothing. I am trying to validate an XML file against the XSD 
schema and running into some problems. The XML I would like to validate is the 
payload of a web service SOAP message. I am using the SAXParserFactory to 
generate my parser and I am doing the following in my code to set up the parser:



System.setProperty("javax.xml.validation.SchemaFactory:http://www.w3.org/2001/XMLSchema";,
 "org.apache.xerces.jaxp.validation.XMLSchemaFactory");



SAXParserFactory parserFactory = SAXParserFactory.newInstance(); 
parserFactory.setNamespaceAware(true);

parserFactory.setValidating(false);

parserFactory.setFeature("http://apache.org/xml/features/validation/schema";, 
true); parserFactory.setFeature("http://xml.org/sax/features/validation";, true);



SchemaFactory schemaFactory =  
SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema";);

StreamSource soapSchemaSource = new StreamSource(new 
ClassPathResource(soapSchemaVersion).getInputStream());

soapSchemaSource.setSystemId("http://schemas.xmlsoap.org/soap/envelope/";);



StreamSource schemaSource = new StreamSource(new 
ClassPathResource("arm-internal.xsd").getInputStream());

schemaSource.setSystemId("http://service.arm.hud.gov/";);



parserFactory.setSchema(schemaFactory.newSchema(new Source[] {schemaSource, 
soapSchemaSource}));



XMLReader reader = parserFactory.newSAXParser().getXMLReader();

ArmHandler handler = new ArmHandler();

reader.setErrorHandler(handler);

reader.parse(new InputSource(payload));



I get no errors setting up my schema but yet when I try to parse a XML file 
using the schema specified in newSchema, I get the following exception:



"org.xml.sax.SAXParseException: s4s-elt-character: Non-whitespace characters 
are not allowed in schema elements other than 'xs:appinfo' and 
'xs:documentation'. Saw 'OpenDNS'"



It is followed by a stack trace.

My schema actually imports 2 external schemas and when I specify their schema 
location as a URL, not a local file, it works but i can not rely on that 
because I do not have access to the internet.



I can attach my XML and XSD files but there is no place to do so. I will add 
them at the end.



Here are my questions/issues:



1. How do I solve the problem above from happening other than relying on the 
internet to find the schema.

2. When I do modify my XML file, the above exception is corrected but then I 
get an error saying it can not resolve the soapenv namespace.

3. Ultimately what I am interested in is getting the parser to validate my XML 
correctly. It is intentionally flawed - there is a bug in our system I am 
trying to correct. We were previously using XMLValidator (from Spring) but it 
has no ability to configure/customize so I switched to use the SAXParser. 
Ultimately, I need the validator to complain when an element is missing. In my 
XML below, I am missing the required element of referenceId but the parser does 
not complain about it. Incidentally, it does not matter if I supply the 
namespace or not in my XML file since I am specifying the XSD in the 
application code in terms of it validating the XML correctly.



Thank you so much

Brenda



Here they are inline:

XSD:



<xs:schema xmlns="http://service.arm.hud.gov/";

            xmlns:xop="http://www.w3.org/2004/08/xop/include";

            xmlns:xmime="http://www.w3.org/2005/05/xmlmime";

            attributeFormDefault="unqualified" elementFormDefault="unqualified"

            targetNamespace="http://service.arm.hud.gov/"; 
xmlns:xs="http://www.w3.org/2001/XMLSchema";>

            <xs:import namespace="http://www.w3.org/2004/08/xop/include"; 
schemaLocation="xop-include.xsd"/>

            <xs:import namespace="http://www.w3.org/2005/05/xmlmime"; 
schemaLocation="xmime.xsd"/>



      <xs:simpleType name="nonNegativeInt">

            <xs:restriction base="xs:int">

                  <xs:minInclusive value="0"/>

            </xs:restriction>

      </xs:simpleType>

      <xs:simpleType name="zeroOrOne">

            <xs:restriction base="xs:int">

                  <xs:minInclusive value="0"/>

                  <xs:maxInclusive value="1"/>

            </xs:restriction>

      </xs:simpleType>

      <xs:simpleType name="threeDigitNumber">

            <xs:restriction base="xs:int">

                  <xs:totalDigits value="3"/>

            </xs:restriction>

      </xs:simpleType>

      <xs:element name="processingSuccessful" type="xs:boolean"/>

      <xs:element name="submissionRequestStatus" type="nonNegativeInt"/>

      <xs:element name="processingErrorDescription" type="xs:string"/>

      <xs:element name="agcName" type="xs:string"/>

      <xs:element name="message" type="xs:string"/>

      <xs:element name="systemName" type="threeDigitNumber"/>

      <xs:element name="id" type="xs:int"/>

      <xs:element name="longDesc" type="xs:string"/>

      <xs:element name="name" type="xs:string"/>

      <xs:element name="shortDesc" type="xs:string"/>

      <xs:element name="agcHcsId" type="nonNegativeInt"/>

      <xs:element name="referenceId" type="nonNegativeInt"/>

      <xs:element name="submissionId" type="xs:long"/>

      <xs:element name="statusDate" type="xs:dateTime"/>

      <xs:element name="subFlag" type="zeroOrOne"/>

      <xs:element name="getSubmissionInfoResponse">

            <xs:complexType>

                  <xs:sequence>

                        <xs:element minOccurs="1" ref="statusDate"/>

                        <xs:element minOccurs="1" ref="statusMessage"/>

                  </xs:sequence>

            </xs:complexType>

      </xs:element>

      <xs:element name="statusMessage">

            <xs:simpleType>

                  <xs:restriction base="xs:string">

                        <xs:pattern value="NOT FOUND"/>

                        <xs:pattern value="RECEIVED"/>

                        <xs:pattern value="PROCESSING"/>

                        <xs:pattern value="DONE"/>

                        <xs:pattern value="ERROR[:][\s\S]*"/>

                  </xs:restriction>

            </xs:simpleType>

      </xs:element>

      <xs:element name="pingResponse">

            <xs:simpleType>

                  <xs:restriction base="xs:string">

                        <xs:pattern value="ARM Service Version 3[.]1.*"/>

                  </xs:restriction>

            </xs:simpleType>

      </xs:element>

      <xs:element name="getReferenceResponse">

            <xs:complexType>

                  <xs:sequence>

                        <xs:element minOccurs="0" ref="referenceItem" 
maxOccurs="unbounded"/>

                  </xs:sequence>

            </xs:complexType>

      </xs:element>

      <xs:element name="getReference">

            <xs:complexType>

                  <xs:sequence>

                        <xs:element minOccurs="1" ref="agcHcsId"/>

                        <xs:element minOccurs="1" ref="referenceId"/>

                  </xs:sequence>

            </xs:complexType>

      </xs:element>

      <xs:element name="ping">

            <xs:complexType>

                  <xs:sequence>

                        <xs:element minOccurs="1" ref="agcHcsId"/>

                  </xs:sequence>

            </xs:complexType>

      </xs:element>

      <xs:element name="throwFault">

            <xs:complexType>

                  <xs:sequence>

                        <xs:element minOccurs="1" ref="agcHcsId"/>

                  </xs:sequence>

            </xs:complexType>

      </xs:element>

      <xs:element name="getSubmissionInfo">

            <xs:complexType>

                  <xs:sequence>

                        <xs:element minOccurs="1" ref="agcHcsId"/>

                        <xs:element minOccurs="1" ref="submissionId"/>

                  </xs:sequence>

            </xs:complexType>

      </xs:element>

      <xs:element name="postSubmission">

            <xs:complexType>

                  <xs:sequence>

                        <xs:element minOccurs="1" ref="submissionHeader"/>

                        <xs:element minOccurs="1" ref="submissionData"/>

                  </xs:sequence>

            </xs:complexType>

      </xs:element>

      <xs:element name="postSubmissionResponse">

            <xs:complexType>

                  <xs:sequence>

                        <xs:element minOccurs="1" ref="submissionId"/>

                  </xs:sequence>

            </xs:complexType>

      </xs:element>

      <xs:element name="submissionData">

            <xs:complexType mixed="true">

                  <xs:sequence minOccurs="0">

                        <xs:element ref="xop:Include"/>

                  </xs:sequence>

                  <xs:attribute ref="xmime:contentType" use="optional" 
fixed="text/xml"/>

                  <xs:anyAttribute 
namespace="http://www.w3.org/2004/11/xmlmime"; processContents="skip"/>

            </xs:complexType>

      </xs:element>

      <xs:element name="submissionHeader">

            <xs:complexType>

                  <xs:sequence>

                        <xs:element minOccurs="1" ref="agcHcsId"/>

                        <xs:element minOccurs="1" ref="agcName"/>

                        <xs:element minOccurs="1" ref="systemName"/>

                        <xs:element minOccurs="1" ref="subFlag"/>

                  </xs:sequence>

            </xs:complexType>

      </xs:element>

      <xs:element name="referenceItem">

            <xs:complexType>

                  <xs:sequence>

                        <xs:element minOccurs="1" ref="id"/>

                        <xs:element minOccurs="1" ref="longDesc"/>

                        <xs:element minOccurs="1" ref="name"/>

                        <xs:element minOccurs="1" ref="shortDesc"/>

                  </xs:sequence>

            </xs:complexType>

      </xs:element>

</xs:schema>



XML File:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";>

   <soapenv:Header/>

   <soapenv:Body>

      <getReference>

        <agcHcsId>80000</agcHcsId>

      </getReference>

   </soapenv:Body>

</soapenv:Envelope>



Reply via email to