java - JAXB unmarshall unordered elements with multiple occurrences of one of them -


i have xml:

<package>   <metadata>     <title>title</title>     <language>en</language>     <meta name="cover" />   </metadata> </package> 

another examples of correct xml's:

    <package>       <metadata>         <language>en</language>         <title>title</title>       </metadata>     </package>      <package>       <metadata>         <meta name="content" />         <language>en</language>         <meta name="cover" />         <title>title</title>       </metadata>     </package> 

and want unmarshall java class using jaxb library. difficulty amount of "meta" element can 0 multiple , order of elements "title" "language" , "meta"s can random.

my class looks like:

@xmlrootelement(name = "package") @xmlaccessortype(xmlaccesstype.field) public class test {     @xmlelement(name = "metadata", required = true)     public metadata metadata;      @xmlaccessortype(xmlaccesstype.field)     @xmltype(proporder={})     public static class metadata {         @xmlelement(name = "title", required = true)         public string title;          @xmlelement(name = "language", required = true)         public string language;          @xmlelement(name = "meta", required = false)         public list<meta> metas;     }      @xmlaccessortype(xmlaccesstype.field)     public static class meta {        @xmlattribute(name = "name", required = true)        public string name;     } } 

it matches schema:

<?xml version="1.0" encoding="utf-8" standalone="yes"?> <xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/xmlschema">    <xs:element name="package" type="test"/>    <xs:complextype name="test">     <xs:sequence>       <xs:element name="metadata" type="metadata"/>     </xs:sequence>   </xs:complextype>    <xs:complextype name="metadata">     <xs:sequence>       <xs:element name="title" type="xs:string"/>       <xs:element name="language" type="xs:string"/>       <xs:element name="meta" type="meta" minoccurs="0" maxoccurs="unbounded"/>     </xs:sequence>   </xs:complextype>    <xs:complextype name="meta">     <xs:sequence/>     <xs:attribute name="name" type="xs:string" use="required"/>   </xs:complextype> </xs:schema> 

when unmarshall document error:

org.xml.sax.saxparseexception: cos-all-limited.2: {max occurs} of element in 'all' model group must 0 or 1. value 'unbounded' element 'meta' invalid. 

if remove attribute @xmltype(proporder={}) matches schema:

<?xml version="1.0" encoding="utf-8" standalone="yes"?> <xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/xmlschema">    <xs:element name="package" type="test"/>    <xs:complextype name="test">     <xs:sequence>       <xs:element name="metadata" type="metadata"/>     </xs:sequence>   </xs:complextype>    <xs:complextype name="metadata">     <xs:sequence>       <xs:element name="title" type="xs:string"/>       <xs:element name="language" type="xs:string"/>       <xs:element name="meta" type="meta" minoccurs="0" maxoccurs="unbounded"/>     </xs:sequence>   </xs:complextype>    <xs:complextype name="meta">     <xs:sequence/>     <xs:attribute name="name" type="xs:string" use="required"/>   </xs:complextype> </xs:schema> 

and error if order of properties different:

invalid content found starting element 'language'. 1 of '{title}' expected. 

i can not change xml files, can modify classes and/or annotations. generate schema classes dynamically, schema can adjust.

any ideas how achieve desirable behaviour?


Comments

Popular posts from this blog

toolbar - How to add link to user registration inside toobar in admin joomla 3 custom component -

linux - disk space limitation when creating war file -