You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@xmlbeans.apache.org by Henrique <hj...@gmail.com> on 2011/07/13 15:10:45 UTC

Strange binding behaviour

Hi everybody!

I  need to bind a XML doc like this:

<?xml version="1.0" encoding="UTF-8"?>
<mapping>
  <em>
    <tag>PEOPLE</tag>
    <tag>INDIVIDUAL</tag>
    <base_ns>http://www.semanticweb.org/ontologies/2011/1/Familia.owl#
</base_ns>
    <local_name>Pessoa</local_name>
  </em>
<em>
    <tag>PEOPLE</tag>
    <tag>COLLECTIVE</tag>
    <base_ns>http://www.semanticweb.org/ontologies/2011/1/Familia.owl#
</base_ns>
    <local_name>Familia</local_name>
  </em>
</mapping>

<em> can repeat unbound, the same with <tag>.
And I have this schema:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
  <xs:element name="mapping">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" ref="em"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="em">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" ref="tag"/>
        <xs:element ref="base_ns"/>
        <xs:element ref="local_name"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="tag" type="xs:NCName"/>
  <xs:element name="base_ns" type="xs:anyURI"/>
  <xs:element name="local_name" type="xs:NCName"/>
</xs:schema>

Now, XMLBeans generates the right Java classes as far as I can see. The
problem is this:

//assume mapFilePath point to xml file above
MappingDocument xmlDoc = MappingDocument.Factory.parse(new
File(mapFilePath));

for(EmDocument.Em em : xmlDoc.getMapping().getEmList()) {

//This always prints: 1
System.out.println(em.getTagList().size());

}

So, basically, no matter how many <tag> elements I have on the XML, somehow
XMLBeans only gets one! But it works fine with <em> elements...
I've tried to group <tag> inside a <tags> element:
<tags>
    <tag>PEOPLE</tag>
    <tag>INDIVIDUAL</tag>
</tags>

with corresponding schema changes, but it strangely displays the exact same
behaviour. It only gets one <tag>... As a matter of fact, in this last case,
if I do em.getTags() I get null!

If someone could shed some light on this I'd be most grateful!

Cheers,
Henrique Nunes

Re: Strange binding behaviour

Posted by Henrique <hj...@gmail.com>.
Hi Jacob!

Thanks for your answer. Anyway, it was my bad...
I debugged my way into reading the actual xml file and it was an old version
that somehow was getting read instead of the newer one. I cleaned my project
and all was good.

So XMLBeans is working fine :)

I appreciate the help. Thanks.

Cheers,
Henrique


On Wed, Jul 13, 2011 at 15:55, Jacob Danner <ja...@gmail.com> wrote:

> Have you tried validating the instance. The easiest way to do so might be
> to add a call to xmlDoc.validate(xmloptions) after having set the error
> listener.
> Can you let us know what the outcome of validation is?
> Thanks,
> -jacobd
> On Jul 13, 2011 6:11 AM, "Henrique" <hj...@gmail.com> wrote:
> > Hi everybody!
> >
> > I need to bind a XML doc like this:
> >
> > <?xml version="1.0" encoding="UTF-8"?>
> > <mapping>
> > <em>
> > <tag>PEOPLE</tag>
> > <tag>INDIVIDUAL</tag>
> > <base_ns>http://www.semanticweb.org/ontologies/2011/1/Familia.owl#
> > </base_ns>
> > <local_name>Pessoa</local_name>
> > </em>
> > <em>
> > <tag>PEOPLE</tag>
> > <tag>COLLECTIVE</tag>
> > <base_ns>http://www.semanticweb.org/ontologies/2011/1/Familia.owl#
> > </base_ns>
> > <local_name>Familia</local_name>
> > </em>
> > </mapping>
> >
> > <em> can repeat unbound, the same with <tag>.
> > And I have this schema:
> >
> > <?xml version="1.0" encoding="UTF-8"?>
> > <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
> > elementFormDefault="qualified">
> > <xs:element name="mapping">
> > <xs:complexType>
> > <xs:sequence>
> > <xs:element maxOccurs="unbounded" ref="em"/>
> > </xs:sequence>
> > </xs:complexType>
> > </xs:element>
> >
> > <xs:element name="em">
> > <xs:complexType>
> > <xs:sequence>
> > <xs:element maxOccurs="unbounded" ref="tag"/>
> > <xs:element ref="base_ns"/>
> > <xs:element ref="local_name"/>
> > </xs:sequence>
> > </xs:complexType>
> > </xs:element>
> >
> > <xs:element name="tag" type="xs:NCName"/>
> > <xs:element name="base_ns" type="xs:anyURI"/>
> > <xs:element name="local_name" type="xs:NCName"/>
> > </xs:schema>
> >
> > Now, XMLBeans generates the right Java classes as far as I can see. The
> > problem is this:
> >
> > //assume mapFilePath point to xml file above
> > MappingDocument xmlDoc = MappingDocument.Factory.parse(new
> > File(mapFilePath));
> >
> > for(EmDocument.Em em : xmlDoc.getMapping().getEmList()) {
> >
> > //This always prints: 1
> > System.out.println(em.getTagList().size());
> >
> > }
> >
> > So, basically, no matter how many <tag> elements I have on the XML,
> somehow
> > XMLBeans only gets one! But it works fine with <em> elements...
> > I've tried to group <tag> inside a <tags> element:
> > <tags>
> > <tag>PEOPLE</tag>
> > <tag>INDIVIDUAL</tag>
> > </tags>
> >
> > with corresponding schema changes, but it strangely displays the exact
> same
> > behaviour. It only gets one <tag>... As a matter of fact, in this last
> case,
> > if I do em.getTags() I get null!
> >
> > If someone could shed some light on this I'd be most grateful!
> >
> > Cheers,
> > Henrique Nunes
>

Re: Strange binding behaviour

Posted by Jacob Danner <ja...@gmail.com>.
Have you tried validating the instance. The easiest way to do so might be to
add a call to xmlDoc.validate(xmloptions) after having set the error
listener.
Can you let us know what the outcome of validation is?
Thanks,
-jacobd
On Jul 13, 2011 6:11 AM, "Henrique" <hj...@gmail.com> wrote:
> Hi everybody!
>
> I need to bind a XML doc like this:
>
> <?xml version="1.0" encoding="UTF-8"?>
> <mapping>
> <em>
> <tag>PEOPLE</tag>
> <tag>INDIVIDUAL</tag>
> <base_ns>http://www.semanticweb.org/ontologies/2011/1/Familia.owl#
> </base_ns>
> <local_name>Pessoa</local_name>
> </em>
> <em>
> <tag>PEOPLE</tag>
> <tag>COLLECTIVE</tag>
> <base_ns>http://www.semanticweb.org/ontologies/2011/1/Familia.owl#
> </base_ns>
> <local_name>Familia</local_name>
> </em>
> </mapping>
>
> <em> can repeat unbound, the same with <tag>.
> And I have this schema:
>
> <?xml version="1.0" encoding="UTF-8"?>
> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
> elementFormDefault="qualified">
> <xs:element name="mapping">
> <xs:complexType>
> <xs:sequence>
> <xs:element maxOccurs="unbounded" ref="em"/>
> </xs:sequence>
> </xs:complexType>
> </xs:element>
>
> <xs:element name="em">
> <xs:complexType>
> <xs:sequence>
> <xs:element maxOccurs="unbounded" ref="tag"/>
> <xs:element ref="base_ns"/>
> <xs:element ref="local_name"/>
> </xs:sequence>
> </xs:complexType>
> </xs:element>
>
> <xs:element name="tag" type="xs:NCName"/>
> <xs:element name="base_ns" type="xs:anyURI"/>
> <xs:element name="local_name" type="xs:NCName"/>
> </xs:schema>
>
> Now, XMLBeans generates the right Java classes as far as I can see. The
> problem is this:
>
> //assume mapFilePath point to xml file above
> MappingDocument xmlDoc = MappingDocument.Factory.parse(new
> File(mapFilePath));
>
> for(EmDocument.Em em : xmlDoc.getMapping().getEmList()) {
>
> //This always prints: 1
> System.out.println(em.getTagList().size());
>
> }
>
> So, basically, no matter how many <tag> elements I have on the XML,
somehow
> XMLBeans only gets one! But it works fine with <em> elements...
> I've tried to group <tag> inside a <tags> element:
> <tags>
> <tag>PEOPLE</tag>
> <tag>INDIVIDUAL</tag>
> </tags>
>
> with corresponding schema changes, but it strangely displays the exact
same
> behaviour. It only gets one <tag>... As a matter of fact, in this last
case,
> if I do em.getTags() I get null!
>
> If someone could shed some light on this I'd be most grateful!
>
> Cheers,
> Henrique Nunes