----- Original Message ----- From: "Tom Drake" <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Sent: Thursday, October 18, 2001 3:47 PM Subject: Re: [castor-dev] Un/Marshalling abstract objects
> Jody: > > There is no way to map attribute values into seperate objects. One way to > achieve this is to create use the Builder pattern to construct the desired > objects. In your example, you would create an class that maps to the > 'Command' tag, that has a 'Type" property. The code in this class would need > to test the value of Type and construct the appropriate object. This may not > be the optimal solution, but it should do the trick. > > Tom Drake > [EMAIL PROTECTED] > > ----- Original Message ----- > From: "TERRILL,JODY (HP-Boise,ex1)" <[EMAIL PROTECTED]> > To: <[EMAIL PROTECTED]> > Sent: Thursday, October 18, 2001 7:58 AM > Subject: Re: [castor-dev] Un/Marshalling abstract objects > > > | Next questions... :) > | > | Is there any way (short of using XSL translation) to unmarshal an object > | based upon an Attribute? > | Example: > | <Command Type="Submit"/> > | would create a submit object while > | <Command Type="Query"/> > | would create a query object. > | > | Is there anything that the XML Mapping file can do that can't be done with > | the Descriptor framework in regards to un/marshalling? > | > | > | Thanks in advance, > | Jody Terrill > | Hewlett-Packard > | > | > -----Original Message----- > | > From: Keith Visco [mailto:[EMAIL PROTECTED]] > | > Sent: Wednesday, October 17, 2001 2:54 PM > | > To: [EMAIL PROTECTED] > | > Subject: Re: [castor-dev] Un/Marshalling abstract objects > | > > | > > | > > | > > | > Hi Jody, > | > > | > You should be able to do what you want with Castor. You can use a > | > combination of compiled descriptors, mapping file, and default > | > introspection. > | > > | > For example, if all the implementations of Message class are > | > in the same > | > package, including the Root class, Castor can automatically find these > | > classes based on the element name. > | > > | > If you have an element named "command" then Castor will look > | > for a class > | > called Command.class > | > > | > The package that Castor looks in will be the package of the parent > | > class...ie the Root.class. > | > > | > If you need to change this behavior you can always implement your own > | > ClassDescriptorResolver. > | > > | > The default implementation is > | > org.exolab.castor.xml.util.ClassDescriptorResolverImpl. > | > > | > Hope that helps, > | > > | > --Keith > | > > | > > | > "TERRILL,JODY (HP-Boise,ex1)" wrote: > | > > > | > > Hello, > | > > > | > > I am looking at using Castor as a marshalling framework and > | > have some > | > > questions regarding how this might work with abstract java > | > objects. I have > | > > a java object model that allows a root object to contain one to many > | > > abstract message objects. I'll try to simplify and > | > summarize this below... > | > > > | > > public class Root{ > | > > private java.util.ArrayList _messageList; // holds > | > Message objects > | > > } > | > > > | > > public abstract class Message; > | > > public class Command extends Message; > | > > public class Response extends Message; > | > > > | > > The XML instance can look like ... > | > > > | > > <Root> > | > > <Command ID="3"/> > | > > </Root> > | > > or > | > > <Root> > | > > <Response ID="3"/> > | > > </Root> > | > > > | > > I would like the Root class to only hold the abstract base > | > class Message > | > > (not Command and Response). Actually, in my problem there > | > are potentially > | > > >50 Message types. > | > > > | > > I think I can do the unmarshalling if I add an > | > XMLFieldDescriptorImpl for > | > > each possible Message type. What I think I would like is > | > to write some code > | > > that would generically create the object based upon it > | > reflected name (e.g. > | > > Command) and then checks to see if it is an instanceof > | > Message. If it is, I > | > > can add it to the _messagelist. This would allow others to > | > extend the > | > > framework without having to change the Root marshalling. > | > > > | > > For marshalling, what I think I need is a way for the > | > framework to find the > | > > proper descriptor to call instead of the abstract classes > | > descriptor (e.g. > | > > CommandDescriptor instead of MessageDescriptor). Is there > | > a way for this to > | > > happen or a way for the MessageDescriptor to figure the inheritance > | > > heirarchy out and call the correct descriptor? > | > > > | > > I have primarily been working with the compile-time > | > Descriptors. I briefly > | > > looked at the mapping behaviour but I didn't see how it > | > would help in this > | > > situation and I would like the performance of the > | > compile-time behaviour. > | > > > | > > Any insight into how this might be solved with Castor is > | > appreciated. > | > > > | > > Thanks in advance, > | > > Jody Terrill > | > > Hewlett-Packard > | > > > | > > ----------------------------------------------------------- > | > > 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
