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
>
>
>
>
--
View this message in context:
http://www.nabble.com/Changing-classloader-in-marshaller-tp17480800p17508876.html
Sent from the Castor - User mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe from this list, please visit:
http://xircles.codehaus.org/manage_email