You are viewing a plain text version of this content. The canonical link for it is here.
Posted to j-dev@xerces.apache.org by "Brenda Coulson (JIRA)" <xe...@xml.apache.org> on 2009/10/16 18:50:31 UTC

[jira] Created: (XERCESJ-1399) Error validating XML file with SAXParser - 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'.

Error validating XML file with SAXParser - 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'.
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

                 Key: XERCESJ-1399
                 URL: https://issues.apache.org/jira/browse/XERCESJ-1399
             Project: Xerces2-J
          Issue Type: Bug
          Components: SAX
    Affects Versions: 2.9.0
         Environment: Spring Framework 2.5.5
CXF 2.1.3
Java 1.5
            Reporter: Brenda Coulson


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>





-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: j-dev-unsubscribe@xerces.apache.org
For additional commands, e-mail: j-dev-help@xerces.apache.org


[jira] Resolved: (XERCESJ-1399) Error validating XML file with SAXParser - 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'.

Posted by "Michael Glavassevich (JIRA)" <xe...@xml.apache.org>.
     [ https://issues.apache.org/jira/browse/XERCESJ-1399?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Michael Glavassevich resolved XERCESJ-1399.
-------------------------------------------

    Resolution: Invalid

Please don't use JIRA to ask questions. Instead, please post your question to the Xerces-J users list [1] and you'll probably need to include more information to get a useful answer.  The error message you've shown complains about "OpenDNS" appearing in some document, yet doesn't appear in any of the data you've shown.  Such text doesn't just appear magically.  There's some other document involved here that you haven't posted.

[1] http://xerces.apache.org/mail.html#xerces-j-user

> Error validating XML file with SAXParser - 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'.
> ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: XERCESJ-1399
>                 URL: https://issues.apache.org/jira/browse/XERCESJ-1399
>             Project: Xerces2-J
>          Issue Type: Bug
>          Components: SAX
>    Affects Versions: 2.9.0
>         Environment: Spring Framework 2.5.5
> CXF 2.1.3
> Java 1.5
>            Reporter: Brenda Coulson
>
> 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>

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: j-dev-unsubscribe@xerces.apache.org
For additional commands, e-mail: j-dev-help@xerces.apache.org