Title: Marshal successful but Unmarshal throws exeption ("DomainObjectDefs is required field")

Hi,

 I am able to Marshal sucessfully but Unmarshal throws
 "DomainObjectDefs is required field" Exception. <DomainObjectDefs/>
 element is produced during marshal but is not picked up by
 Unmarshal.It produces different xml on Win98 and 2000.

Thanks for any help,
Sreekanth.

Win98:
<?xml version="1.0" encoding="UTF-8"?>
<package valid="true" process-project-ref-count="0">
        <meta-data valid="true" any-object-count="0"/>
        <namespace>namspace</namespace>
        <created>created</created>
        <domain-object-defs domain-object-def-count="0" valid="true"/>
        <description>desc</description>
        <action-defs valid="true" action-def-count="0"/>
</package>

Win2000:
<?xml version="1.0" encoding="UTF-8"?>
<Package namespace="namspace" Created="created">
        <Description>desc</Description>
        <DomainObjectDefs/>
        <ActionDefs/>
</Package>

Here is the schema:
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

   <xsd:element name="Package">
      <xsd:complexType>
         <xsd:sequence>
            <xsd:element name="Description" type="xsd:string" minOccurs="0" maxOccurs="1"/>
            <xsd:group ref="MetaData"/>
            <xsd:element ref="ProcessProjectRef" minOccurs="0" maxOccurs="unbounded"/>
            <xsd:element ref="DomainObjectDefs" minOccurs="1" maxOccurs="1"/>
            <xsd:element ref="ActionDefs" minOccurs="1" maxOccurs="1"/>
         </xsd:sequence>
         <xsd:attribute name="namespace" type="xsd:anyURI" use="required"/>
         <xsd:attribute name="Created" type="xsd:string" use="optional"/>
      </xsd:complexType>
   </xsd:element>
   <xsd:group name="MetaData">
      <xsd:sequence>
         <xsd:element ref="PackageData" minOccurs="0" maxOccurs="1"/>


         <xsd:any minOccurs="0"/>
      </xsd:sequence>
   </xsd:group>
   <xsd:element name="PackageData">
      <xsd:complexType>
         <xsd:sequence>

         </xsd:sequence>
      </xsd:complexType>
   </xsd:element>
   <xsd:element name="ProcessProjectRef">
      <xsd:complexType>
         <xsd:attribute name="name" type="xsd:string" use="required"/>
         <xsd:attribute name="packageRef" type="xsd:string" use="required"/>
      </xsd:complexType>
   </xsd:element>
   <xsd:element name="DomainObjectDefs">
      <xsd:complexType>
         <xsd:sequence>
            <xsd:element name="DomainObjectDef" minOccurs="0" maxOccurs="unbounded">
               <xsd:complexType>
                  <xsd:attribute name="name" type="xsd:string" use="required"/>
                  <xsd:attribute name="fsPath" type="xsd:string" use="required"/>
               </xsd:complexType>
            </xsd:element>
         </xsd:sequence>
      </xsd:complexType>
   </xsd:element>
   <xsd:element name="ActionDefs">
      <xsd:complexType>
         <xsd:sequence>
            <xsd:element name="ActionDef" minOccurs="0" maxOccurs="unbounded">
               <xsd:complexType>
                  <xsd:attribute name="name" type="xsd:string" use="required"/>
                  <xsd:attribute name="fsPath" type="xsd:string" use="required"/>
               </xsd:complexType>
            </xsd:element>
         </xsd:sequence>
      </xsd:complexType>
   </xsd:element>
</xsd:schema>

And code:

        File file;
        Package pack = new Package();
        pack.setNamespace("namspace"); //String
        pack.setCreated("created"); //String
        pack.setDescription("desc"); //String
        pack.setMetaData(new MetaData());
        DomainObjectDefs defs = new DomainObjectDefs();
        DomainObjectDef def = new DomainObjectDef();
        def.setName("name");
        def.setFsPath("fspath");
        defs.addDomainObjectDef(def);
        pack.setDomainObjectDefs(defs);
        pack.setActionDefs(new ActionDefs());
        file = new File( "package1.xml" );
        try {
            System.out.println(pack.toString());
            Marshaller.marshal( pack, new FileWriter( file ) );
            pack = (Package) Unmarshaller.unmarshal( Package.class, new FileReader( file ) );
            System.out.println(pack.toString());
        } catch (Exception e) {
            e.printStackTrace();
        }


Reply via email to