With castor 0.9.5, we don't succeed in using both location and auto-naming
descriptors for one field.

Our need is to both :
  - wrap the xml data with an element with a fixed name ("abc"), without
declaring any supplementary class in our model,
  - have a subelement named according the type of the object.

xml document :

<engine>
  <abc>
    <myProcessor/>
  </abc>
</engine>

At unmarshalling time, we have the following error :
org.xml.sax.SAXException: unable to find FieldDescriptor for 'myProcessor'
in ClassDescriptor of abc
        at
org.exolab.castor.xml.UnmarshalHandler.startElement(UnmarshalHandler.java:12
24)
        at
org.apache.xerces.parsers.AbstractSAXParser.startElement(AbstractSAXParser.j
ava:411)
        at
org.apache.xerces.parsers.AbstractXMLDocumentParser.emptyElement(AbstractXML
DocumentParser.java:225)
        at
org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDo
cumentFragmentScannerImpl.java:817)
        at
org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatc
her.dispatch(XMLDocumentFragmentScannerImpl.java:1543)
        at
org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocume
ntFragmentScannerImpl.java:348)
        at
org.apache.xerces.parsers.DTDConfiguration.parse(DTDConfiguration.java:539)
        at
org.apache.xerces.parsers.DTDConfiguration.parse(DTDConfiguration.java:595)
        at org.apache.xerces.parsers.XMLParser.parse(XMLParser.java:152)
        at
org.apache.xerces.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:112
5)
        at org.exolab.castor.xml.Unmarshaller.unmarshal(Unmarshaller.java:555)
        at FullTest.main(FullTest.java:27)
org.xml.sax.SAXException: unable to find FieldDescriptor for 'myProcessor'
in ClassDescriptor of abc{file: [not available]; line: 3; column: 19}

mapping.xml :

<mapping>
  <class name="Engine">
     <map-to xml="engine" />
        <field name="processor" type="BaseProcessor" required="true">
          <bind-xml location="abc" auto-naming="deriveByClass"
node="element"/>
        </field>
  </class>
  <class name="BaseProcessor">
     <map-to xml="baseProcessor" />
  </class>
  <class name="MyProcessor" extends="BaseProcessor">
     <map-to xml="myProcessor" />
  </class>
</mapping>

Engine.java :

public class Engine
{
  private BaseProcessor processor;
  public BaseProcessor getProcessor()
    {
      return processor;
    }
  public void setProcessor(BaseProcessor processor)
    {
      this.processor = processor;
    }
}

BaseProcessor.java :

public class BaseProcessor
{
  public void process(){
    System.out.println("BaseProcessor.process");
  }
}

MyProcessor.java :

public class MyProcessor extends BaseProcessor
{
  public void process(){
    System.out.println("MyProcessor.process");
  }
}

----------------------------------------------------------- 
If you wish to unsubscribe from this mailing, send mail to
[EMAIL PROTECTED] with a subject of:
        unsubscribe castor-dev

Reply via email to