xml - Jaxb and unmarshalling included XSD -


i have 2 xsds 1 xsd contains element can contain elements second one. basically, xsd 1 has element "etta" can contain element xsd 2.

i used xjc generate classes, , when deserialized, meta element contains elements xsd 2 jaxbelements instead of actual classes generated xsd 2. included both sets of classes program, , package-info correct.

this how defined xsd. imagine problem "any" element.

<xs:schema xmlns="ns1" elementformdefault="qualified"            xmlns:ns1="ns2"            targetnamespace="ns1" xmlns:xs="http://www.w3.org/2001/xmlschema">      <xs:import  namespace="ns2" schemalocation="./ns2.xsd" />      <xs:complextype name="meta">         <xs:sequence>             <xs:any  namespace="ns2" minoccurs="1" maxoccurs="unbounded"/>         </xs:sequence>     </xs:complextype> ... </xs:schema> 

so want element mean "here goes 1 or more elements defined in xsd2" , jaxb unmarshall it.

how should change xsd jaxb deserialize contents of meta using elements xsd2?

--edit-

this xjc generated meta class:

@xmlaccessortype(xmlaccesstype.field) @xmltype(name = "meta", proporder = {     "any" }) public class meta     extends baseobject {      @xmlanyelement(lax = true)     protected list<object> any;      public list<object> getany() {         if (any == null) {             = new arraylist<object>();         }         return this.any;     }  } 

-- edit original xsd2 (changed ns match question) --

<xs:schema xmlns="ns2" elementformdefault="qualified" targetnamespace="syncml:ns2" xmlns:xs="http://www.w3.org/2001/xmlschema">     <xs:element name="metinf">         <xs:complextype>             <xs:sequence>                 <xs:element minoccurs="0" maxoccurs="1" ref="fieldlevel" />                 <xs:element minoccurs="0" maxoccurs="1" ref="format" />                 <xs:element minoccurs="0" maxoccurs="1" ref="type" />                 <xs:element minoccurs="0" maxoccurs="1" ref="mark" />                 <xs:element minoccurs="0" maxoccurs="1" ref="size" />                 <xs:element minoccurs="0" maxoccurs="1" ref="anchor" />                 <xs:element minoccurs="0" maxoccurs="1" ref="version" />                 <xs:element minoccurs="0" maxoccurs="1" ref="nextnonce" />                 <xs:element minoccurs="0" maxoccurs="1" ref="maxmsgsize" />                 <xs:element minoccurs="0" maxoccurs="1" ref="maxobjsize" />                 <xs:element minoccurs="0" maxoccurs="unbounded" ref="emi" />                 <xs:element minoccurs="0" maxoccurs="1" ref="mem" />             </xs:sequence>         </xs:complextype>     </xs:element>     <xs:element name="fieldlevel">         <xs:complextype />     </xs:element>     <xs:element name="format" type="xs:string" />     <xs:element name="type" type="xs:string" />     <xs:element name="mark" type="xs:string" />     <xs:element name="size" type="xs:string" />     <xs:element name="anchor">         <xs:complextype>             <xs:sequence>                 <xs:element minoccurs="0" maxoccurs="1" ref="last" />                 <xs:element ref="next" />             </xs:sequence>         </xs:complextype>     </xs:element>     <xs:element name="last" type="xs:string" />     <xs:element name="next" type="xs:string" />     <xs:element name="version" type="xs:string" />     <xs:element name="nextnonce" type="xs:string" />     <xs:element name="maxmsgsize" type="xs:string" />     <xs:element name="maxobjsize" type="xs:string" />     <xs:element name="emi" type="xs:string" />     <xs:element name="mem">         <xs:complextype>             <xs:sequence>                 <xs:element minoccurs="0" maxoccurs="1" ref="sharedmem" />                 <xs:element ref="freemem" />                 <xs:element ref="freeid" />             </xs:sequence>         </xs:complextype>     </xs:element>     <xs:element name="freeid" type="xs:string" />     <xs:element name="freemem" type="xs:string" />     <xs:element name="sharedmem">         <xs:complextype />     </xs:element> </xs:schema> 

-- how meta being used in xsd1:

<xs:element name="targetref" type="xs:string" />   <xs:element name="verdtd" type="xs:string" />   <xs:element name="verproto" type="xs:string" />   <xs:element name="item">     <xs:complextype>       <xs:sequence>         <xs:element minoccurs="0" maxoccurs="1" ref="target" />         <xs:element minoccurs="0" maxoccurs="1" ref="source" />         <xs:element minoccurs="0" maxoccurs="1" ref="sourceparent" />         <xs:element minoccurs="0" maxoccurs="1" ref="targetparent" />         <xs:element minoccurs="0" maxoccurs="1" ref="meta" />         <xs:element minoccurs="0" maxoccurs="1" ref="data" />         <xs:element minoccurs="0" maxoccurs="1" ref="moredata" />       </xs:sequence>     </xs:complextype>   </xs:element>   <xs:element name="meta" type="xs:string" />   <xs:element name="correlator" type="xs:string" />   <xs:element name="data" type="xs:string" /> 

how sth. this:

inserting possible elements second xsd sequence while defining minoccurs , maxoccurs in sequence instead of elements themselves. (the code here - example 2)

<xs:element name="meta">     <xs:complextype>         <xs:sequence minoccurs="1" maxoccurs="unbounded">             <xs:element name="elements" type="ns1:typea"/>             <xs:element name="from" type="ns1:typeb"/>             <xs:element name="ns2" type="ns1:typec"/>         </xs:sequence>     </xs:complextype> </xs:element> 

another option require changing second xsd little bit:

instead of line 2-4 looking this:

<xs:element name="metinf">     <xs:complextype>         <xs:sequence> 

they have this:

        <xs:complextype name="metinf">             <xs:sequence> 

and ns1.xsd this:

<xs:schema      xmlns="ns1"     elementformdefault="qualified"     targetnamespace="ns1"      xmlns:xs="http://www.w3.org/2001/xmlschema"     xmlns:ns1="ns2">  <xs:import  namespace="ns2" schemalocation="ns2.xsd" />  <xs:complextype name="meta">     <xs:sequence>         <xs:element name="metainf" type="ns1:metinf" minoccurs="1" maxoccurs="unbounded"/>     </xs:sequence> </xs:complextype> 

when running xjc firstschema.xsd , ns2.xsd in same directory following classes generated:

ns2/anchor.java ns2/fieldlevel.java ns2/mem.java ns2/metinf.java ns2/objectfactory.java ns2/sharedmem.java ns2/package-info.java ns1/meta.java ns1/objectfactory.java ns1/package-info.java 

the meta class firstschema.xsd looks this:

public class meta {  @xmlelement(required = true) protected list<metinf> metainf;  public list<metinf> getmetainf() {     if (metainf == null) {         metainf = new arraylist<metinf>();     }     return this.metainf; } } 

is anywhere near need?


Comments

Popular posts from this blog

ubuntu - PHP script to find files of certain extensions in a directory, returns populated array when run in browser, but empty array when run from terminal -

php - How can i create a user dashboard -

javascript - How to detect toggling of the fullscreen-toolbar in jQuery Mobile? -