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

