As already mentioned elsewhere, the issue with an NPE in ClassDescriptorResolver has already been reported shortly after 1.2 has been released, and has already been fixed in SVN trunk.
Have a look at the latest 1.2.1 snapshot release, as this should work straight out of the box. Werner Marcelo Henrique wrote: > Hi, > I had the same problem with InitialContext null in ClassDescriptorResolver > too. Thus I initilize it with BackwardCompatibilityContext but I've seen that > BackwardCompatibilityContext will be unused in the future versions of Castor > so, What's the better way of use ClassDescriptorResolver or how can I > initilize the InitialContext without use BackwardCompatibilityContext? > > My Code: > > Mapping mapping = getMapping( mapeamento ); > XMLClassDescriptorResolver classDescriptorResolver = ( > XMLClassDescriptorResolver ) > ClassDescriptorResolverFactory.createClassDescriptorResolver( BindingType.XML > ); > classDescriptorResolver.setInternalContext( new > BackwardCompatibilityContext() ); > MappingUnmarshaller mappingUnmarshaller = new MappingUnmarshaller(); > MappingLoader mappingLoader = mappingUnmarshaller.getMappingLoader( mapping, > BindingType.XML ); > classDescriptorResolver.setMappingLoader( mappingLoader ); > > Thanks, > > *-----------------------------------------------------* > || Marcelo Henrique De Oliveira Lima > || Ciência da Computação - UECE > || Linux User #399803 > || Slackware GNU/Linux Powered! > *-----------------------------------------------------* > > > > ----- Mensagem original ---- > De: brandywheat <[EMAIL PROTECTED]> > Para: [email protected] > Enviadas: Quarta-feira, 28 de Maio de 2008 6:45:49 > Assunto: Re: [castor-user] Changing classloader in marshaller > > > Hi, > I have this working - I found that I had a couple of problems, first the > code shown on the web gives a null pointer exception (because the internal > context is not set in classDR). > The second was that I was calling m.marshall(this, writer) and I did not > realize that this was a static method, once I changed this to the > m.marshall(this) it worked .... the final code is then: > > public void export(Writer writer) throws MarshalException, > ValidationException { > try { > Marshaller m = new Marshaller(); > XMLClassDescriptorResolver classDR = > (org.exolab.castor.xml.XMLClassDescriptorResolver) > > ClassDescriptorResolverFactory.createClassDescriptorResolver(BindingType.XML); > classDR.setInternalContext(m.getInternalContext()); > > classDR.setClassLoader(Thread.currentThread().getContextClassLoader()); > classDR.addClass("com.xxxx.domain.Theme"); > m.setResolver(classDR); > m.setWriter(writer); > m.marshal(this); > } catch (....) > } > > Many thanks, > Brian > > > Werner Guttmann wrote: >> Hi, >> >> how about trying things with the XMLClassDescriptorResolver document >> first, to get and/or keep you going. >> >> Have a look at the XML best practise document at http://www.castor.org, >> and let us know whether this is enough information. >> >> Werner >> >> brandywheat wrote: >>> Hi, >>> I do not have enough experience with castor (yet) to see either method >>> being beneficial over the other ... so I will take what ever you suggest. >>> Working from the snapshot is not an issue, nor is waiting a couple of >>> days >>> a problem - what ever is best for you - I'll be happy when it is working! >>> >>> I do have a couple of class to marshal and these include quite a few >>> classes (30+) which are included in the output structure - I am not sure >>> if >>> this would be an issue with option b (do I have to add a >>> classDescriptionResolver for each class ?). >>> >>> Many, many thanks for the super response on this, I am suitably >>> impressed >>> :-) >>> >>> Thanks, >>> Brian >>> >>> >>> >>> Werner Guttmann wrote: >>>> Well, in that case, there's two options: >>>> >>>> a) switch to XMLContext (where we'd have to add a setClassLoader() >>>> method, which is sufficiently easy; if you are fine working against a >>>> snapshot releaswe, this could be done within one or two days). >>>> >>>> b) Set an XMLClassDescriptorResolver on your Marshaller, and use >>>> XMLClassDescriptorResolver.setClassLoader() to set a custom class >>>> loader. >>>> >>>> Does this make sense ... >>>> >>>> Werner >>>> >>>> >>>> brandywheat wrote: >>>>> Hi, >>>>> I'm on the latest castor version (1.2) ... >>>>> >>>>> Thanks, >>>>> Brian >>>>> >>>>> >>>>> >>>>> Werner Guttmann wrote: >>>>>> Hi, >>>>>> >>>>>> What version of Castor are you using ? There's a solution to this >>>>>> problem, but it depends on whether you are on a release that has >>>>>> support >>>>>> for XMLContext already (or not). >>>>>> >>>>>> Werner >>>>>> >>>>>> brandywheat wrote: >>>>>>> Hi, >>>>>>> I am currently having problems with the castor marshaller and >>>>>>> classloaders. >>>>>>> My code works in the unit tests but fails once included in a >>>>>>> netbeans >>>>>>> RPC - >>>>>>> the problem looks to be the classloader and the modules within the >>>>>>> RPC. >>>>>>> >>>>>>> I can resolve the issue of the classloader with the code: >>>>>>> Marshaller m = new Marshaller(); >>>>>>> Mapping mapping = new >>>>>>> Mapping(Thread.currentThread().getContextClassLoader()); >>>>>>> mapping.loadMapping("c:\\temp\\mapping.xml"); >>>>>>> m.setMapping(mapping); >>>>>>> m.marshal(this, writer); >>>>>>> >>>>>>> But this forces me to write a mapping file, which I do not have >>>>>>> available >>>>>>> and do not really want to generate. >>>>>>> >>>>>>> Is it possible to set the classloader for the marshaller without >>>>>>> having >>>>>>> to >>>>>>> define a mapping file, e.g. have it use the default structure it >>>>>>> would >>>>>>> generated without a mapping file? (If I skip the loadMapping then the >>>>>>> setMapping gives an exception saying a mapping must be loaded >>>>>>> first....) >>>>>>> >>>>>>> Thanks in Advance, >>>>>>> Brian >>>>>>> >>>>>> --------------------------------------------------------------------- >>>>>> 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 >> >> >> >> > --------------------------------------------------------------------- To unsubscribe from this list, please visit: http://xircles.codehaus.org/manage_email

