Thanks Werner. That code snippet helped to point out that the Un/Marshaller.setResolver(.) has to take a XMLClassDescriptorResolver instead of ClassDescriptorResolver.
Tom -----Original Message----- From: Werner Guttmann [mailto:[EMAIL PROTECTED] Sent: Tuesday, October 24, 2006 7:25 AM To: [email protected] Subject: RE: [castor-user] Improving Performance with XML (Marshalling and UnMarshalling) Once again ... I just had a look at codd from the Spring XMl factory beans for Castor XML, and found this code fragment in the CastorResolverFactoryBean: XMLClassDescriptorResolver resolver = (XMLClassDescriptorResolver) ClassDescriptorResolverFactory.createClassDescriptorResolver(BindingType .XML); Mapping mapping = new Mapping(); mapping.loadMapping(new InputSource(...)); MappingUnmarshaller mappingUnmarshaller = new MappingUnmarshaller(); MappingLoader loader = mappingUnmarshaller.getMappingLoader(mapping, BindingType.XML); resolver.setMappingLoader(loader); And subsequently Unmarshaller unmarshaller = new Unmarshaller(); Unmarshaller.setResolver(resolver); ... = unmarshaller.unmarshal(..); And if you do not use mapping files at all, just simple not set a MappingLoader on the ClassDescriptorResolver .. :-(. I hope this helps. Werner > -----Original Message----- > From: Werner Guttmann [mailto:[EMAIL PROTECTED] > Sent: Dienstag, 24. Oktober 2006 13:18 > To: [email protected] > Subject: RE: [castor-user] Improving Performance with XML (Marshalling > and UnMarshalling) > > Tom, > > a couple of things have changed in that area since 1.0.1 (even since > 1.0.3). It looks like we will have to update the best practice > document with regards to these changes. Can you please open a Jira > issue asking for this to happen so that we will be able to track this > (for 1.0.5). > > Werner > > PS Wrt your 'minor' issue .... Especially MappingLoader and > ClassDescriptorResolver have been undergoing major refactorings. As > aresult of this, some methods might not be as clean as one would > expect. > But rather than postponing the inclusion of these refactorings ad > infinitum, we have decided to release them as we go and > *unfortunately* cause some minor inconsistencies (now and then). > > > ________________________________ > > From: Carey, Tom [mailto:[EMAIL PROTECTED] > Sent: Dienstag, 24. Oktober 2006 08:33 > To: '[email protected]' > Subject: [castor-user] Improving Performance with XML > (Marshalling and UnMarshalling) > > > I was browsing through the site and noticed the > following link under Best Practices > (http://www.castor.org/xml-best-practice.html). It mentions > that if you reuse a ClassDescriptorResolver, it'll help > improve performance. I followed the sample code and came up > with the following > method: > > private static ClassDescriptorResolver > getClassDescriptorResolver(String mapFileName, Mapping > mapping) throws MappingException > { > ClassDescriptorResolver classDescriptorResolver > = > (ClassDescriptorResolver)s_classDescriptorResolvers.get(mapFileName); > if (classDescriptorResolver == null) > { > classDescriptorResolver = > ClassDescriptorResolverFactory.createClassDescriptorResolver(B > indingType > .XML); > MappingUnmarshaller mappingUnmarshaller = > new MappingUnmarshaller(); > XMLMappingLoader mappingLoader = > (XMLMappingLoader)mappingUnmarshaller.getMappingLoader(mapping, > BindingType.XML); > > classDescriptorResolver.setMappingLoader(mappingLoader); > } > return classDescriptorResolver; > } > > Something to note first on the code. This is minor. I > had to cast the instance returned from > mappingUnmarshaller.getMappingLoader(..) > because classDescriptorResolver.setMappingLoader(.) expects a > XMLMappingLoader. Wondering why the set method isn't using the > MappingLoader interface. Then I wouldn't have to cast after > calling mappingUnmarshaller.getMappingLoader(). > > Now to the errors I encountered. Under v1.0.1, I get > the following compiler errors: > cannot access class org.castor.mapping.BindingType, file ... > not found > cannot access class org.castor.mapping.MappingUnmarshaller, > file ... not found > cannot access class > org.exolab.castor.xml.ClassDescriptorResolverFactory, file > ... not found > > When I attempted to upgrade to v1.0.4, I received the > following compiler errors: > (Source code): Marshaller > marshaller.setResolver(getClassDescriptorResolver(mapFileName, > mapping)); > Error(70,28): method > setResolver(org.exolab.castor.xml.ClassDescriptorResolver) > not found in class org.exolab.castor.xml.Marshaller > > (Source code): Unmarshaller > unmarshaller.setResolver(getClassDescriptorResolver(mapFileName, > mapping)); > Error(114,26): method > setResolver(org.exolab.castor.xml.ClassDescriptorResolver) > not found in class org.exolab.castor.xml.Unmarshaller > > Would like to use this bit of code to improve > performance. Do you have any suggestions? > > Also, if I didn't have a mapping file, would creating > an empty mapping instance work? Something like: > XMLMappingLoader mappingLoader = > (XMLMappingLoader)mappingUnmarshaller.getMappingLoader(new > Mapping(), BindingType.XML); > > Thanks, > Tom > > > --------------------------------------------------------------------- > To unsubscribe from this list please visit: > > http://xircles.codehaus.org/manage_email > > > --------------------------------------------------------------------- To unsubscribe from this list please visit: http://xircles.codehaus.org/manage_email --------------------------------------------------------------------- To unsubscribe from this list please visit: http://xircles.codehaus.org/manage_email

