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.