Re: Facing problem when validating XML with multiple root node Schema

Hi all,

I am posting a set of sample XMLs which needs to be validated by the schema - 

1- <?xml version="1.0" encoding="WINDOWS-1256" ?><Response><Head
er><FusionInfo><Process ID="0" Name="processName"/><Activity ID="0"
Name="processName"/><TransactionID>61020040044</Transactio
nID></FusionInfo><DepartmentInfo><Sender><Id>140</Id><Description>DNRD</Description></Sender><Receiver><Id>180</Id><Descriptio
n>DMC</Description></Receiver><Transaction><Type>2</Type><ProcessType>SynSingle_PR</ProcessType><Date>2004-10-06
09:16:31</Dat
e><ReferenceNumber>ReferenceNumber
0</ReferenceNumber></Transaction></DepartmentInfo></Header><Body><Process><Id>EMCS-005</Id>
<Description>Acknowledgement</Description><Status>1</Status><Comments>OK</Comments></Process><AcknowledgementInfo><Committed>T
rue</Committed><Duplicate>False</Duplicate></AcknowledgementInfo></Body></Response>

2 - <Request><Header><FusionInfo><Process ID="0" Name="processName"/><
Activity ID="0"
Name="processName"/><TransactionID>61020040044</TransactionID></FusionInfo><DepartmentInfo><Sender><Id>140</Id
><Description>DNRD</Description></Sender><Receiver><Id>180</Id><Description>DMC</Description></Receiver><Transaction><Type>1</
Type><ProcessType>SynSingle_PR</ProcessType><Date>2004-10-06
09:16:32</Date><ReferenceNumber>ReferenceNumber 0</ReferenceNumbe
r></Transaction></DepartmentInfo></Header><Body><Process><Id>EMCS-002</Id><Description>Medical
Certificate Result</Description
><Status>1</Status><Comments>OK</Comments></Process><ApplicantInfo><Applicant><PersonType>2</PersonType><PersonNumber>20120037
072838</PersonNumber><ApplicantNameEN>FREDRIEK
XAVIER</ApplicantNameEN><Status>1</Status><Comments>Updated
Successfully</Comme
nts></Applicant><Applicant><PersonType>2</PersonType><PersonNumber>20120042150681</PersonNumber><ApplicantNameEN>SAM
OSWALD</Applica
ntNameEN><Status>1</Status><Comments>Updated
Successfully</Comments></Applicant></ApplicantInfo></Body></Request>

Thanks for the interest.

I want to point a few more details. 

- The Operating System is Sun OS 5.0. No problems on Windows.

- The XML is being streamed over a HTTP connections, received by a
Servlet and routed to certain helper classes for further processed.

- A standalone pseudo code written with the same logical steps happens
to validate the XML without any errors in both OS. In this I am
parsing a XML string as compared to an input stream in the latter
case.

Thanks,
Vineet.





On Thu, 14 Oct 2004 10:39:31 +0400, Vineet Chopra <incivinci@gmail.com> wrote:
> Hi all,
> 
> I will make things more clear -
> 
> Can anybody point out the problem -
> 
> I have a multiple root node schema. And I am validation my XML against
> this schema using JDOM with XercesJ parser. Code sections as follows -
> 
> ===========================================================
> if(new Boolean(CommonsUtil.readProps(Globals.SERVICE_ID,
> "xmlSchemaValidation")).booleanValue()){
> log.debug("Started validating XML against defined schema");
> builder.setValidation(true);
> XMLParseErrorHandler errorHandler = new XMLParseErrorHandler(xml);
> builder.setErrorHandler(errorHandler);
> builder.setFeature("http://apache.org/xml/features/validation/schema", true);
> builder.setProperty("http://apache.org/xml/properties/schema/external-noNamespaceSchemaLocation",
> CommonsUtil.readProps(Globals.SERVICE_ID, "xmlSchemaLocation"));
> 
> }else{
> log.debug("XML Schema Validation switched off");
> }
> Document doc = builder.build(src);
> 
> ===========================================================
> The parser validates one XML with root node "Response" but gives the
> following error while validating XML with root node "Request" -
> 
> Error: cvc-elt.1: Cannot find the declaration of element 'Request'. at
> line 1, co
> lumn 10 in entity null
> 
> I know that the error description suggests that there is no definition
> for the tag "Request" in the schema. But I have cross checked the
> schema and the XML with XMLSpy, no problem in that.
> 
> Here is the schema, though a long one -
> 
> <?xml version="1.0" encoding="UTF-8"?>
> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
> elementFormDefault="qualified">
>        <xs:element name="Activity">
>                <xs:complexType>
>                        <xs:attribute name="ID" type="xs:string" use="required"/>
>                        <xs:attribute name="Name" type="xs:string" use="required"/>
>                </xs:complexType>
>        </xs:element>
>        <xs:element name="Applicant">
>                <xs:complexType>
>                        <xs:all>
>                                <xs:element ref="ApplicantNameAR" minOccurs="0"/>
>                                <xs:element ref="ApplicantNameEN" minOccurs="0"/>
>                                <xs:element ref="BirthPlaceAR" minOccurs="0"/>
>                                <xs:element ref="BirthPlaceEN" minOccurs="0"/>
>                                <xs:element ref="Comments" minOccurs="0"/>
>                                <xs:element ref="DOB" minOccurs="0"/>
>                                <xs:element ref="EmiratesId" minOccurs="0"/>
>                                <xs:element ref="EmiratesID" minOccurs="0"/>
>                                <xs:element ref="EmiratesDescAR" minOccurs="0"/>
>                                <xs:element ref="EmiratesDescEN" minOccurs="0"/>
>                                <xs:element ref="JobId" minOccurs="0"/>
>                                <xs:element ref="JobDescAR" minOccurs="0"/>
>                                <xs:element ref="JobDescEN" minOccurs="0"/>
>                                <xs:element ref="McValidityDate" minOccurs="0"/>
>                                <xs:element ref="McStatus" minOccurs="0"/>
>                                <xs:element ref="NationalityId" minOccurs="0"/>
>                                <xs:element ref="NationalityDescAR" minOccurs="0"/>
>                                <xs:element ref="NationalityDescEN" minOccurs="0"/>
>                                <xs:element ref="POBox" minOccurs="0"/>
>                                <xs:element ref="PersonType" minOccurs="0"/>
>                                <xs:element ref="PersonNumber" minOccurs="0"/>
>                                <xs:element ref="Passport" minOccurs="0"/>
>                                <xs:element ref="PassportNb" minOccurs="0"/>
>                                <xs:element ref="Sex" minOccurs="0"/>
>                                <xs:element ref="Sponsor" minOccurs="0"/>
>                                <xs:element ref="Status" minOccurs="0"/>
>                        </xs:all>
>                </xs:complexType>
>        </xs:element>
>        <xs:element name="AcknowledgementInfo">
>                <xs:complexType>
>                        <xs:all>
>                                <xs:element ref="Committed"/>
>                                <xs:element ref="Duplicate"/>
>                        </xs:all>
>                </xs:complexType>
>        </xs:element>
>        <xs:element name="ApplicantInfo">
>                <xs:complexType>
>                        <xs:sequence>
>                                <xs:element ref="Applicant" maxOccurs="unbounded"/>
>                        </xs:sequence>
>                </xs:complexType>
>        </xs:element>
>        <xs:element name="ApplicantNameAR" type="xs:string"/>
>        <xs:element name="ApplicantNameEN" type="xs:string"/>
>        <xs:element name="AreaId" type="xs:string"/>
>        <xs:element name="AreaDescAR" type="xs:string"/>
>        <xs:element name="AreaDescEN" type="xs:string"/>
>        <xs:element name="BirthPlaceAR" type="xs:string"/>
>        <xs:element name="BirthPlaceEN" type="xs:string"/>
>        <xs:element name="Building" type="xs:string"/>
>        <xs:element name="Body">
>                <xs:complexType>
>                        <xs:all>
>                                <xs:element ref="Process"/>
>                                <xs:element ref="ApplicantInfo" minOccurs="0"/>
>                                <xs:element ref="AcknowledgementInfo" minOccurs="0"/>
>                        </xs:all>
>                </xs:complexType>
>        </xs:element>
>        <xs:element name="CityId" type="xs:string"/>
>        <xs:element name="CityDescAR" type="xs:string"/>
>        <xs:element name="CityDescEN" type="xs:string"/>
>        <xs:element name="Committed" type="xs:string"/>
>        <xs:element name="Contact1" type="xs:string"/>
>        <xs:element name="Contact2" type="xs:string"/>
>        <xs:element name="Comments" type="xs:string"/>
>        <xs:element name="DOB" type="xs:string"/>
>        <xs:element name="Duplicate" type="xs:string"/>
>        <xs:element name="Date" type="xs:string"/>
>        <xs:element name="DepartmentInfo">
>                <xs:complexType>
>                        <xs:all>
>                                <xs:element ref="Sender"/>
>                                <xs:element ref="Receiver"/>
>                                <xs:element ref="Transaction"/>
>                        </xs:all>
>                </xs:complexType>
>        </xs:element>
>        <xs:element name="Description" type="xs:string"/>
>        <xs:element name="EmiratesDescAR" type="xs:string"/>
>        <xs:element name="EmiratesDescEN" type="xs:string"/>
>        <xs:element name="ExpiryDate" type="xs:string"/>
>        <xs:element name="EmiratesId" type="xs:string"/>
>        <xs:element name="EmiratesID" type="xs:string"/>
>        <xs:element name="FlatNumber" type="xs:string"/>
>        <xs:element name="FusionInfo">
>                <xs:complexType>
>                        <xs:all>
>                                <xs:element ref="Activity"/>
>                                <xs:element ref="Process"/>
>                                <xs:element ref="TransactionID"/>
>                        </xs:all>
>                </xs:complexType>
>        </xs:element>
>        <xs:element name="Header">
>                <xs:complexType>
>                        <xs:all>
>                                <xs:element ref="DepartmentInfo"/>
>                                <xs:element ref="FusionInfo"/>
>                        </xs:all>
>                </xs:complexType>
>        </xs:element>
>        <xs:element name="Id">
>                <xs:simpleType>
>                        <xs:restriction base="xs:string">
>                                <xs:enumeration value="140"/>
>                                <xs:enumeration value="180"/>
>                                <xs:enumeration value="EMCS-001"/>
>                                <xs:enumeration value="EMCS-002"/>
>                                <xs:enumeration value="EMCS-003"/>
>                                <xs:enumeration value="EMCS-004"/>
>                                <xs:enumeration value="EMCS-005"/>
>                        </xs:restriction>
>                </xs:simpleType>
>        </xs:element>
>        <xs:element name="IssueDate" type="xs:string"/>
>        <xs:element name="JobDescAR" type="xs:string"/>
>        <xs:element name="JobDescEN" type="xs:string"/>
>        <xs:element name="JobId" type="xs:string"/>
>        <xs:element name="McValidityDate" type="xs:string"/>
>        <xs:element name="McStatus" type="xs:string"/>
>        <xs:element name="NameAR" type="xs:string"/>
>        <xs:element name="NameEN" type="xs:string"/>
>        <xs:element name="NationalityId" type="xs:string"/>
>        <xs:element name="NationalityDescAR" type="xs:string"/>
>        <xs:element name="NationalityDescEN" type="xs:string"/>
>        <xs:element name="Number" type="xs:string"/>
>        <xs:element name="POBox" type="xs:string"/>
>        <xs:element name="Passport">
>                <xs:complexType>
>                        <xs:all>
>                                <xs:element ref="ExpiryDate"/>
>                                <xs:element ref="IssueDate"/>
>                                <xs:element ref="Number"/>
>                        </xs:all>
>                </xs:complexType>
>        </xs:element>
>        <xs:element name="PassportNb" type="xs:string"/>
>        <xs:element name="PersonNumber" type="xs:string"/>
>        <xs:element name="PersonType" type="xs:string"/>
>        <xs:element name="Process">
>                <xs:complexType>
>                        <xs:all>
>                                <xs:element ref="Comments" minOccurs="0"/>
>                                <xs:element ref="Id" minOccurs="0"/>
>                                <xs:element ref="Description" minOccurs="0"/>
>                                <xs:element ref="Status" minOccurs="0"/>
>                        </xs:all>
>                        <xs:attribute name="ID" type="xs:string" use="optional"/>
>                        <xs:attribute name="Name" type="xs:string" use="optional"/>
>                </xs:complexType>
>        </xs:element>
>        <xs:element name="ProcessType" type="xs:string"/>
>        <xs:element name="Receiver">
>                <xs:complexType>
>                        <xs:all>
>                                <xs:element ref="Id"/>
>                                <xs:element ref="Description"/>
>                        </xs:all>
>                </xs:complexType>
>        </xs:element>
>        <xs:element name="ReferenceNumber" type="xs:string"/>
>        <xs:element name="Response">
>                <xs:complexType>
>                        <xs:all>
>                                <xs:element ref="Header"/>
>                                <xs:element ref="Body"/>
>                        </xs:all>
>                </xs:complexType>
>        </xs:element>
>        <xs:element name="Request">
>                <xs:complexType>
>                        <xs:all>
>                                <xs:element ref="Header"/>
>                                <xs:element ref="Body"/>
>                        </xs:all>
>                </xs:complexType>
>        </xs:element>
>        <xs:element name="Status" type="xs:string"/>
>        <xs:element name="Sex" type="xs:string"/>
>        <xs:element name="Sponsor">
>                <xs:complexType>
>                        <xs:all>
>                                <xs:element ref="AreaId"/>
>                                <xs:element ref="AreaDescAR"/>
>                                <xs:element ref="AreaDescEN"/>
>                                <xs:element ref="Building"/>
>                                <xs:element ref="CityId"/>
>                                <xs:element ref="CityDescAR"/>
>                                <xs:element ref="CityDescEN"/>
>                                <xs:element ref="Contact1"/>
>                                <xs:element ref="Contact2"/>
>                                <xs:element ref="EmiratesId"/>
>                                <xs:element ref="EmiratesDescAR"/>
>                                <xs:element ref="EmiratesDescEN"/>
>                                <xs:element ref="FlatNumber"/>
>                                <xs:element ref="NameAR"/>
>                                <xs:element ref="NameEN"/>
>                                <xs:element ref="SponsorType"/>
>                                <xs:element ref="SponsorNumber"/>
>                                <xs:element ref="Street"/>
>                        </xs:all>
>                </xs:complexType>
>        </xs:element>
>        <xs:element name="SponsorType" type="xs:string"/>
>        <xs:element name="SponsorNumber" type="xs:string"/>
>        <xs:element name="Street" type="xs:string"/>
>        <xs:element name="Sender">
>                <xs:complexType>
>                        <xs:all>
>                                <xs:element ref="Id"/>
>                                <xs:element ref="Description"/>
>                        </xs:all>
>                </xs:complexType>
>        </xs:element>
>        <xs:element name="Transaction">
>                <xs:complexType>
>                        <xs:all>
>                                <xs:element ref="Type"/>
>                                <xs:element ref="ProcessType"/>
>                                <xs:element ref="Date"/>
>                                <xs:element ref="ReferenceNumber"/>
>                        </xs:all>
>                </xs:complexType>
>        </xs:element>
>        <xs:element name="TransactionID" type="xs:string"/>
>        <xs:element name="Type" type="xs:string"/>
> </xs:schema>
> 
> Thanks once again.
> 
> 
> 
> 
> On Tue, 12 Oct 2004 16:50:41 +0400, Vineet Chopra <incivinci@gmail.com> wrote:
> > Hello,
> >
> > I am facing a problem while validating an XML document against a
> > schema, using JDOM with XercesJ parser.
> >
> > Description -
> >
> > My code is consuming XML messages sent over HTTP Connection. I want to
> > validate the XML messages before parsing the same. For this I have
> > created a single Schema which defines all incoming XML messages. The
> > resultant schema has multiple root nodes.
> >
> > The code validates one root node for an incoming XML mesaage but fails
> > to validate root nodes of another XML messages.
> >
> > The error which I get is
> >
> > Error: cvc-elt.1: Cannot find the declaration of element 'Request'. at
> > line 1, column 10 in entity null
> >
> > The schema does contain a definition for the tag "Request". I have
> > cross checked it umpteen times.
> >
> > I shall be thankful if you throw some light on this.
> >
> > Vineet Chopra
> >
>

Received on Saturday, 16 October 2004 16:25:43 UTC