>I believe if you add <bind-xml ... type="org"/> to the field mapping it
should use that instead of the class name during marshalling.

But Keith, we don't know until runtime if the concrete class would be a
person or org. 

Shelly

-----Original Message-----
From: Keith Visco [mailto:[EMAIL PROTECTED] 
Sent: Monday, November 03, 2003 12:06 PM
To: [EMAIL PROTECTED]
Subject: Re: [castor-dev] Adding indirection to xsi:type




"Mujtaba,Shelly" wrote:
> 
> Keith,
> Given this xml:
> 
>  <Party xsi:type="org">
> >         <name>Acme</name>
> > </Party>
> >
> > <Party xsi:type="person">
> >         <name>Jeff</name>
> > </Party>
> 
> How Would castor know when to create a com.acme.Person v/s 
> com.acme.MyOrg ?

By using the xsi:type and the class mappings specified in the mapping
file.

> 
> Also on the marshaling, the xml needs to be populated with the mapped 
> types "person" and "org" and not the class names. So if we could some 
> how map "org" and "person" to correct class names during 
> un/marshalling we would be fine.

I believe if you add <bind-xml ... type="org"/> to the field mapping it
should use that instead of the class name during marshalling.

--Keith


 -----Original Message-----
> From: Keith Visco [mailto:[EMAIL PROTECTED]
> Sent: Friday, October 31, 2003 9:27 PM
> To: [EMAIL PROTECTED]
> Subject: Re: [castor-dev] Adding indirection to xsi:type
> 
> Hi Shelly,
> 
> It *should* already work, have you tried the following:
> 
> <class name="com.acme.Party">
>    ...
> </class>
> 
> <class name="com.acme.MyOrg" extends="com.acme.Party">
>     <map-to xml="org"/>
>     ...
> </class>
> 
> <class name="com.acme.MyPerson" extends="com.acme.Party">
>     <map-to xml="person"/>
>     ...
> </class>
> 
> <class name="com.acme.Root">
>    <field name="party" type="com.acme.Party">
>       <bind-xml name="Party"/>
>    </field>
> </class>
> 
> --Keith
> 
> "Mujtaba,Shelly" wrote:
> >
> > Castor has a well defined method for supporting interfaces i.e using

> > xsi:type within the element. Now here is the problem: The xml we 
> > receive already has xsi:type populated with generic names such as 
> > org,
> 
> > person, party etc. For example
> > <Party xsi:type="org">
> >         <name>Acme</name>
> > </Party>
> >
> > <Party xsi:type="person">
> >         <name>Jeff</name>
> > </Party>
> >
> > We would like to be able to map the "org" and "person" to concrete 
> > classes. Castor currently does not provide this indirection. So my 
> > question is:
> >
> > 1. If I want to add this indirection, which classes should I modify 
> > both for marshalling and unmarshalling. 2. Would this be something 
> > we may consider for a patch or addon to castor?
> >
> > Thanks
> > Shelly
> >
> > -----Original Message-----
> > From: Keith Visco [mailto:[EMAIL PROTECTED]
> > Sent: Friday, October 31, 2003 3:29 PM
> > To: [EMAIL PROTECTED]
> > Subject: Re: [castor-dev] Source generator chocking at "namespace 
> > prefix not recognized"
> >
> > Jing,
> >
> > Castor's source generator uses XML Schema (see W3C XML Schema 1.0
> > Recommendation) for creating source code, not DTDs. You'll need to 
> > convert your DTD to an XML Schema before the source generator will 
> > be able to generate any source code for it.
> >
> > Castor has a tool (org.exolab.castor.xml.dtd.Converter) that can 
> > help you. There are also a number of 3rd party tools that can 
> > convert DTDs to XML Schema.
> >
> > --Keith
> >
> > [EMAIL PROTECTED] wrote:
> > >
> > > We really need help with this problem that I've posted earlier! 
> > > and to
> >
> > > make it easier for you to identify the problem, i've minimized the

> > > dtd
> >
> > > as the following:
> > >
> > > ##################################################################
> > >
> > > <!ENTITY parseType "CDATA  #FIXED  'Resource'">
> > >
> > > <!ELEMENT go:go (
> > >     go:version?,
> > >     rdf:RDF
> > > )>
> > >
> > > <!ATTLIST go:go
> > >      xmlns:go   CDATA  #FIXED
> > "http://www.geneontology.org/dtds/go.dtd#";
> > >      xmlns:rdf  CDATA  #FIXED 
> > > "http://www.w3.org/1999/02/22-rdf-syntax-ns#";
> > > >
> > >
> > > <!ELEMENT go:version (#PCDATA)>
> > >
> > > <!ATTLIST go:version
> > >     timestamp  CDATA  #IMPLIED
> > > >
> > >
> > > <!ELEMENT rdf:RDF (go:term*)>
> > >
> > > <!ELEMENT go:term (
> > >     go:name,
> > >     go:part_of*
> > >    )>
> > >
> > > <!ATTLIST go:term
> > >     rdf:about  CDATA     #REQUIRED
> > >     >
> > >
> > > <!ELEMENT go:name (#PCDATA)>
> > >
> > > <!ELEMENT go:part_of (#PCDATA)>
> > > <!ATTLIST go:part_of
> > >   rdf:resource   CDATA   #REQUIRED
> > > >
> > > ##################################################################
> > > ##
> > > ##
> > > ###
> > >
> > > with this dtd, I wasn't able to get any generated source, but only

> > > got
> >
> > > Exception in thread "main" java.lang.IllegalArgumentException:
> > > getElementDecl: Namespace prefix not recognized 'go'
> > >
> > >      [java]     at
> > > org.exolab.castor.xml.schema.Schema.getElementDecl(Unknown Source)
> > >      [java]     at
> > > org.exolab.castor.xml.schema.ElementDecl.getReference(Unknown
> Source)
> > >      [java]     at
> > > org.exolab.castor.xml.schema.ElementDecl.getType(Unknown Source)
> > >      [java]     at
> > > org.exolab.castor.builder.SourceFactory.processContentModel(Unknow
> > > n
> > > Source)
> > >      [java]     at
> > >
org.exolab.castor.builder.SourceFactory.processContentModel(Unknown
> > > Source)
> > >      [java]     at
> > > org.exolab.castor.builder.SourceFactory.processComplexType(Unknown
> > > Source)
> > >      [java]     at
> > > org.exolab.castor.builder.SourceFactory.createSourceCode(Unknown
> > > Source)
> > >      [java]     at
> > > org.exolab.castor.builder.SourceGenerator.createClasses(Unknown
> > > Source)
> > >      [java]     at
> > > org.exolab.castor.builder.SourceGenerator.createClasses(Unknown
> > > Source)
> > >      [java]     at
> > > org.exolab.castor.builder.SourceGenerator.generateSource(Unknown
> > > Source)
> > >      [java]     at
> > > org.exolab.castor.builder.SourceGenerator.generateSource(Unknown
> > > Source)
> > >      [java]     at
> > > org.exolab.castor.builder.SourceGenerator.generateSource(Unknown
> > > Source)
> > >      [java]     at
> > org.exolab.castor.builder.SourceGenerator.main(Unknown
> > > Source)
> > >
> > > Is this way to declare namespace acceptable to Castor? Will it 
> > > matter that it uses two identical "go", one as the prefix and the 
> > > other as the element name?  Any suggestions will be greatly 
> > > appreciated!
> > >
> > > Thanks!
> > > Jing
> > >
> > > -----------------------------------------------------------
> > > If you wish to unsubscribe from this mailing, send mail to 
> > > [EMAIL PROTECTED] with a subject of:
> > >         unsubscribe castor-dev
> >
> > -----------------------------------------------------------
> > If you wish to unsubscribe from this mailing, send mail to 
> > [EMAIL PROTECTED] with a subject of:
> >         unsubscribe castor-dev
> >
> > -----------------------------------------------------------
> > If you wish to unsubscribe from this mailing, send mail to 
> > [EMAIL PROTECTED] with a subject of:
> >         unsubscribe castor-dev
> 
> -----------------------------------------------------------
> If you wish to unsubscribe from this mailing, send mail to 
> [EMAIL PROTECTED] with a subject of:
>         unsubscribe castor-dev
> 
> -----------------------------------------------------------
> If you wish to unsubscribe from this mailing, send mail to 
> [EMAIL PROTECTED] with a subject of:
>         unsubscribe castor-dev

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

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

Reply via email to