hi,

i have generated class files using the castor 1.2 code generator. so in my 
project there are the packages

 com.xyz.model [containing the .castor.cdr] and
 com.xyz.model.descriptors

 
 
i have used a custom binding to bind the actual xml document element <A> to 
class B.java.

   <?xml version="1.0" encoding="UTF-8"?>
   <binding xmlns="http://www.castor.org/SourceGenerator/Binding"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://www.castor.org/SourceGenerator/Binding 
http://castor.org/binding.xsd"; defaultBindingType="element">
      <package>
         <name>com.xyz.model</name>
         <namespace>http://www.xyz.com/</namespace>
      </package>
      <elementBinding name="/A">
         <java-class name="B"/>
      </elementBinding>
   </binding>


  
the xml schema is:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"; 
xmlns:ns1="http://www.xyz.com/"; targetNamespace="http://www.xyz.com/"; 
elementFormDefault="qualified" attributeFormDefault="unqualified">
        <xs:element name="A">
                <xs:complexType>
                        <xs:sequence>
                                <xs:element name="text" type="xs:string"/>
                        </xs:sequence>
                </xs:complexType>
        </xs:element>
</xs:schema>



when i invoke the unmarshal(org.w3c.dom.Node) method on an unmarshaller 
instance, i keep getting the following exception...

 org.exolab.castor.xml.MarshalException: The class for the root element 'A' 
could not be found.
        at 
org.exolab.castor.xml.Unmarshaller.convertSAXExceptionToMarshalException(Unmarshaller.java:761)
        at org.exolab.castor.xml.Unmarshaller.unmarshal(Unmarshaller.java:640)
        at org.exolab.castor.xml.Unmarshaller.unmarshal(Unmarshaller.java:747)

        
        
... although i have configured the xmlcontext like

    XMLContext context = new XMLContext();
    context.addPackage("com.xyz.model");
    context.setProperty(XMLConfiguration.LOAD_PACKAGE_MAPPING, true);
    context.setProperty(XMLConfiguration.NAMESPACE_PACKAGE_MAPPINGS, 
"http://www.xyz.com/=com.xyz.model";);

        
        
the testcase looks like:

  public void testUnmarshalNode() throws Exception
  {
    XMLContext context = new XMLContext();
    context.addPackage("com.xyz.model");
    context.setProperty(XMLConfiguration.LOAD_PACKAGE_MAPPING, true);
    context.setProperty(XMLConfiguration.NAMESPACE_PACKAGE_MAPPINGS, 
"http://www.xyz.com/=com.xyz.model";);
    Unmarshaller unmarshaller = context.createUnmarshaller();
    
    String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><a:A 
xmlns:a=\"http://www.xyz.com/\";><a:text>hello world</a:text></a:A>";
    
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = factory.newDocumentBuilder();
    InputSource is = new InputSource( new StringReader( xml ) );
    Document xmlDocument = builder.parse( is );

    B b = (B) unmarshaller.unmarshal(xmlDocument); // <- fails
    
    assertNotNull(b);
    assertEquals("hello world", b.getText());
  }



for some reason castor doesn't consider the classdescriptor on unmarshalling 
[at least that's what seems to be the problem]. 
how can i properly setup my unmarshaller/xmlcontext to get things right?

thanks,

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

DI Reinhard Weiss

ANECON Software Design und Beratung G.m.b.H.

Web:            http://www.anecon.com

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Zusätzliche Pflichtangaben von Kapitalgesellschaften gem. § 14 UGB:
FN166941b | Handelsgericht Wien | Firmensitz Wien


<<winmail.dat>>

---------------------------------------------------------------------
To unsubscribe from this list, please visit:

    http://xircles.codehaus.org/manage_email

Reply via email to