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