Hello again!

I traced a bit into the code and found the problem seems to be the
"ContainerFieldHandler" - It's not an "ExtendedFieldHandler".

The problem comes up when the first "<path name="/eng/hamburg"/>" gets
unmarshalled. The "UnmarshallHandler" is looking for constructor
arguments and the current "ContainerFieldHandler" is not able to
handle them...

--- UnmarshallHandler.java ---
Arguments args = processConstructorArgs(atts, classDesc);
if ((args.values != null) && (args.values.length > 0)) {
    if (handler instanceof ExtendedFieldHandler) {
        ExtendedFieldHandler efh =
            (ExtendedFieldHandler)handler;
        state.object = efh.newInstance(parentState.object, args.values);
    }
    else {
        String err = "constructor arguments can only be " +
            "used with an ExtendedFieldHandler.";
          throw new SAXException(err);
   }
}
------------------------------

Any ideas if it's possible to extend "ContainerFieldHandler" to
implement "ExtendedFieldHandler"?

Some help from the Castor "gurus" would be appreciated!

Regards,
Michael


> Hello out there!

> I got a problem unmarshalling the following two classes:

> --- EXCEPTION: ---
> org.xml.sax.SAXException: constructor arguments can only be used with an 
> ExtendedFieldHandler.

> --- CLASSES: ---
> public class Path {
>     private final String name;
>     public Path(final String name) {
>         super();
>         this.name = name;
>     }
>     public final String getName() {
>         return name;
>     }
> }
> public class Area {
>     private final String name;
>     private List pathList;
>     public Area(final String name) {
>         this.name = name;
>     }
>     public final String getName() {
>         return name;
>     }
>     public final List getPathList() {
>         return pathList;
>     }
>     public final void setPathList(final List list) {
>         this.pathList = list;
>     }
> }

> --- MAPPING: ---
> <mapping>
>   <class name="xml.problem.Path" verify-constructable="false">
>     <field name="name" set-method="%1" get-method="getName" type="string">
>       <bind-xml node="attribute" />
>     </field>
>   </class>
>   <class name="xml.problem.Area" verify-constructable="false">
>     <field name="name" set-method="%1" get-method="getName" type="string">
>       <bind-xml node="attribute"/>      
>     </field>
>     <field name="pathList" 
>            type="xml.problem.Path" 
>            collection="arraylist"
>            container="false">
>       <bind-xml name="path-list" node="element" />
>     </field>
>   </class>
> </mapping>

> --- XML: ---
> <area name="Hamburg">
>     <path-list>
>         <path name="/eng/hamburg"/>
>         <path name="/deu/hamburg"/>
>     </path-list>
> </area>

> --- VERSIONS: ---
> Castor 1.0.5
> Java JRE 1.5


> The problem seems to be "container=false" - If you marshal/unmarshal
> without this attribute everything works fine (but the XML does not
> look as expected)!


> For a full example including a testcase see this ZIP-File:
> http://www.fuin.org/xml-problem.zip
> (I wasn't able to attach the file to this mail because "attachment
> type was not permitted")


> Greetings from (snowless) Germany,
> Michael




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

>     http://xircles.codehaus.org/manage_email




-- 
Mit freundlichen Grüßen
michael.jira.codehaus.org
mailto:[EMAIL PROTECTED]




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

    http://xircles.codehaus.org/manage_email

Reply via email to