Hi, I got lucky. I added elementFormDefault and set it to qualified, because I noticed that the field descriptors were missing the namespace URI, and it wasn't inferred from the container class either. In addition, I set the auto-complete attribute to true in the mapping file. I didn't have to specify the mapping for all fields, only for the root element. It works now.
Thanks, Alex > -----Original Message----- > From: Keith Visco [mailto:[EMAIL PROTECTED] > Sent: October 12, 2004 2:29 PM > To: [EMAIL PROTECTED] > Subject: Re: [castor-user] FieldDescriptor of a string field can't be > found during unmarshalling > > > > Alex, > > Do you have a sample schema that I can try out? > > --Keith > > Alex Milanovic wrote: > > Hi Keith, > > > > Thanks for the quick response. Unfortunately, using either of the > approaches > > you described results in the same error: > > > > "Unable to find FieldDescriptor for 'localChildElement' in > ClassDescriptor > > of 'MyCastorObject'" > > > > So, the class descriptor itself gets resolved, but the field descriptors > for > > its child elements are out of luck. > > > > What could be the reason for not being able to find a FieldDescriptor > for a > > string field of a class whose descriptor has been found? > > > > Alex > > > > > > > >>-----Original Message----- > >>From: Keith Visco [mailto:[EMAIL PROTECTED] > >>Sent: October 12, 2004 12:56 PM > >>To: [EMAIL PROTECTED] > >>Subject: Re: [castor-user] FieldDescriptor of a string field can't be > >>found during unmarshalling > >> > >> > >> > >>Alex, > >> > >>You certainly don't need to use a mapping file... > >> > >>#1. Make sure the class descriptors (*Descripor.java) are compiled > >> > >>#2. Try the following instead: > >> > >>Unmarshaller unm = new Unmarshaller(MyRoot.class); > >> > >>intead of what you're currently doing: > >> > >>Unmarshaller unm = new Unmarshaller(); > >> > >> > >> > >>If you have multiple possible root classes, then you can resolve them > >>ahead of time as such: > >> > >>ClassDescriptorResolver cdr = new ClassDescriptorResolverImpl(); > >>cdr.resolve(MyRoot1.class); > >>cdr.resolve(MyRoot2.class); > >>cdr.resolve(MyRoot3.class); > >> > >>//-- now there is no need to pass in the root class > >>Unmarshaller unm = new Unmarshaller(); > >> > >>//-- make sure we set the resolver > >>unm.setResolver(cdr); > >> > >> > >>--Keith > >> > >>Alex Milanovic wrote: > >> > >>>Hi All, > >>> > >>>I have a relatively simple XML schema that I want to use as a basis for > >>>marshalling and unmarshalling corresponding Castor-generated objects. > >> > >>I'd > >> > >>>like to avoid using any mappings, i.e. I'd like Castor to use its > >> > >>default > >> > >>>and automated marshalling framework. I ran into difficulties with the > >>>unmarshalling. > >>> > >>>I did the following: > >>> > >>>1. Generated Castor source files (one for each element + descriptor + > >> > >>one > >> > >>>for each complex type). > >>>2. Used them in my code to marshal to and unmarshal from XML documents > >> > >>as > >> > >>>explained on your web site (on the Person example). > >>> > >>>First, unmarshaller wasn't able to find the Castor-generated class > >> > >>despite > >> > >>>its being in the classpath. The following message was contained in the > >>>exception: "The class for the root element ... could not be found". > From > >>>this I inferred that the unmarshaller does not look in the classpath > for > >>>classes with the same name as the given element, so I decided to > specify > >> > >>the > >> > >>>class name using a mapping file (I wanted to avoid this, but it seemed > >>>impossible). > >>> > >>>I created a mapping file with the following class information: > >>> > >>><class name="<class name>" auto-complete="true" > > >>> <map-to xml="<element name>" ns-uri="<ns uri>"/> > >>></class> > >>> > >>>The class name, element name and namespace URI were correct, as the > same > >>>information worked fine in the complete mapping configuration that I > was > >>>eventually forced to try out. In the code, I wrote as follows: > >>> > >>>Unmarshaller unm = new Unmarshaller(); > >>>unm.setMapping(allMappings); > >>>castorMessage = unm.unmarshal(sourceDoc); > >>> > >>>This resulted in the following error message: > >>>"Unable to find FieldDescriptor for 'localChildElement' in > >> > >>ClassDescriptor > >> > >>>of 'MyCastorObject'" > >>> > >>>The same happens with or without the auto-complete attribute. The child > >>>element that Castor complains about is just a string field. The > >>>FieldDescriptor is present in MyCastorObject's ClassDescriptor, but the > >>>unmarshaller doesn't find it. What can the reason be for its inability > >> > >>to > >> > >>>find the FieldDescriptor? > >>> > >>>The only way I managed to get this to work is by specifying a complete > >>>mapping for each class, but this is exactly what I wanted to avoid. > >> > >>Please > >> > >>>help. > >>> > >>>I looked at the information on the web site, but often this information > >>>doesn't emphasize whether a piece of information applies to only > >> > >>marshalling > >> > >>>or unmarshalling, or both at the same time. I tried out different > >>>combinations that should work according to the web site, but nothing > >> > >>worked > >> > >>>except the complete-mapping approach. > >>> > >>>Alex > >>> > >>> > >>> > >>>----------------------------------------------------------- > >>>If you wish to unsubscribe from this mailing, send mail to > >>>[EMAIL PROTECTED] with a subject of: > >>> unsubscribe castor-user > >>> > >> > >> > >> > >>----------------------------------------------------------- > >>If you wish to unsubscribe from this mailing, send mail to > >>[EMAIL PROTECTED] with a subject of: > >> unsubscribe castor-user > > > > > > > > > > ----------------------------------------------------------- > > If you wish to unsubscribe from this mailing, send mail to > > [EMAIL PROTECTED] with a subject of: > > unsubscribe castor-user > > > > > > ----------------------------------------------------------- > If you wish to unsubscribe from this mailing, send mail to > [EMAIL PROTECTED] with a subject of: > unsubscribe castor-user ----------------------------------------------------------- If you wish to unsubscribe from this mailing, send mail to [EMAIL PROTECTED] with a subject of: unsubscribe castor-user
