Re: xmlsbeans 2.5 does not check sequence order ?

Jerry Sy <[email protected]> Wed, 04 May 2011 11:44:25 -0700
Newsgroups gmane.text.xml.xmlbeans.user
Message-ID <[email protected]>
read about xmlbeans validation here

http://xmlbeans.apache.org/docs/2.0.0/guide/conValidationWithXmlBeans.html

I test using this code

String testschema = "<?xml version=\"1.0\"
encoding=\"UTF-8\"?>\n" +

"<xsd:schema\n" +

"
targetNamespace=\"http://www.colis-logistique.com/i-net/wsapi\" \n"
+

"
xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" \n" +

" elementFormDefault=\"qualified\">\n" +

" <xsd:element
name=\"DeclareParcelsAndCustomsResponse\">\n" +

" <xsd:complexType>\n" +

" <xsd:sequence>\n" +

" <xsd:element name=\"Version\"
type=\"xsd:string\" minOccurs=\"1\" maxOccurs=\"1\"/>\n" +

" <xsd:element name=\"Timestamp\"
type=\"xsd:string\" minOccurs=\"1\" maxOccurs=\"1\"/>\n" +

" <xsd:element name=\"AckCode\"
type=\"xsd:string\" minOccurs=\"1\" maxOccurs=\"1\"/>\n" +

" <xsd:element name=\"HMacBase64Code\"
type=\"xsd:string\" minOccurs=\"1\" maxOccurs=\"1\"/>\n" +

" </xsd:sequence>\n" +

" </xsd:complexType>\n" +

" </xsd:element>\n" +

"</xsd:schema> ";

String testxml =
"<wsap:DeclareParcelsAndCustomsResponse
xmlns:wsap=\"http://www.colis-logistique.com/i-net/wsapi\" >\n"
+

"
<wsap:Timestamp>2011-05-02T16:57:33.136Z</wsap:Timestamp>\n"
+

"
<wsap:AckCode>SUCCESS</wsap:AckCode>\n" +

"
<wsap:HMacBase64Code>ZjY5MDdlYWI4MGQxMGQ3MjM5OTExZmVmNjQ1NjY3ZDY3NTVkYmQ5MGQ4YTViM2JlOTE1OWU3ODFjZGJlYjIxNg==</wsap:HMacBase64Code>\n"
+

"</wsap:DeclareParcelsAndCustomsResponse> ";

SchemaTypeSystem sts1 = XmlBeans.compileXsd(new
XmlObject[]{XmlObject.Factory.parse(testschema)},

XmlBeans.getBuiltinTypeSystem(),null);

XmlObject x1 =
sts1.parse(testxml,sts1.findDocumentType(new
QName("http://www.colis-logistique.com/i-net/wsapi" ,"DeclareParcelsAndCustomsResponse")),null);

XmlOptions xo = new XmlOptions();

ArrayList<XmlValidationError> errorlist = new
ArrayList<XmlValidationError>();

xo.setErrorListener(errorlist);

if (!x1.validate(xo)) {

for (XmlValidationError e:errorlist) {

System.out.println(e.getMessage());

}

}

and get this output

Expected element
'Version@http://www.colis-logistique.com/i-net/wsapi ' instead of
'Timestamp@http://www.colis-logistique.com/i-net/wsapi ' here in
element
DeclareParcelsAndCustomsResponse@http://www.colis-logistique.com/i-net/wsapi

Expected element
'Version@http://www.colis-logistique.com/i-net/wsapi ' instead of
'AckCode@http://www.colis-logistique.com/i-net/wsapi ' here in
element
DeclareParcelsAndCustomsResponse@http://www.colis-logistique.com/i-net/wsapi

Expected element
'Version@http://www.colis-logistique.com/i-net/wsapi ' instead of
'HMacBase64Code@http://www.colis-logistique.com/i-net/wsapi ' here in
element
DeclareParcelsAndCustomsResponse@http://www.colis-logistique.com/i-net/wsapi

Expected element
'Version@http://www.colis-logistique.com/i-net/wsapi ' before the end
of the content in element
DeclareParcelsAndCustomsResponse@http://www.colis-logistique.com/i-net/wsapi

using your code, you can do ans.validate(<xmloption>)

Jerry

On 11/11/2011 11:46 AM, [email protected] wrote:

Hello,

I parse a xml string, but
wmlsbeans
does not see that the version element is not present ! I am
expecting an
exception like I have one when there is a syntax error in the
xml string.

So my problems with xmlsbeans 2.5
are
:

- xmlsbeans does not throw an
exception when an element of a sequence is not here ?

- xmlsbeans does not throw an
exception when an element of a sequence is not at the right
position
?

- xmlsbeans does not throw
an exception when an element of a sequence is not declared in
the XSD ?

My java code is :

DeclareParcelsAndCustomsResponseDocument
ansDoc
= DeclareParcelsAndCustomsResponseDocument.Factory.parse(answer);

DeclareParcelsAndCustomsResponseDocument.DeclareParcelsAndCustomsResponse
ans
= ansDoc.getDeclareParcelsAndCustomsResponse() ;

XSD Source

===========

<?xml version="1.0"
encoding="UTF-8"?>

<xsd:schema

targetNamespace="http://www.colis-logistique.com/i-net/wsapi"

xmlns:xsd="http://www.w3.org/2001/XMLSchema"

elementFormDefault="qualified">

<xsd:element
name="DeclareParcelsAndCustomsResponse">

<xsd:complexType>

<xsd:sequence>

<xsd:element
name="Version" type="xsd:string" minOccurs="1"
maxOccurs="1"/>

<xsd:element
name="Timestamp" type="xsd:string" minOccurs="1"
maxOccurs="1"/>

<xsd:element
name="AckCode" type="xsd:string" minOccurs="1"
maxOccurs="1"/>

<xsd:element
name="HMacBase64Code" type="xsd:string" minOccurs="1"
maxOccurs="1"/>

</xsd:sequence>

</xsd:complexType>

</xsd:element>

</xsd:schema>

XML String

=========

<wsap:DeclareParcelsAndCustomsResponse
xmlns:wsap="http://www.colis-logistique.com/i-net/wsapi" >

<wsap:Timestamp>2011-05-02T16:57:33.136Z</wsap:Timestamp>

<wsap:AckCode>SUCCESS</wsap:AckCode>

<wsap:HMacBase64Code>ZjY5MDdlYWI4MGQxMGQ3MjM5OTExZmVmNjQ1NjY3ZDY3NTVkYmQ5MGQ4YTViM2JlOTE1OWU3ODFjZGJlYjIxNg==</wsap:HMacBase64Code>

</wsap:DeclareParcelsAndCustomsResponse>

validate xsd .xml => OK :
There
is no VERSION : I agree with this.

But, I do not have the same
behavior
in my own java code ?

Any idea ?

Thanks,

PHL

_______________________________________________________

Philippe LEGAY

TELINTRANS

Direction Production

Département Intégration des Projets

E-Mail : [email protected]

Tel : (+33) 01 56 30 74 24

P
Afin de contribuer au respect de l'environnement, merci de
n'imprimer ce
courriel que si nécessaire.