[SWS-287] Spring Web Services does not seem to work with Castor 1.2 Created: 16/Feb/08  Updated: 30/May/08  Resolved: 02/May/08

Status: Closed
Project: Spring Web Services
Component/s: OXM
Affects Version/s: 1.0.3
Fix Version/s: 1.5.1

Type: Improvement Priority: Major
Reporter: Jim Cummings Assignee: Arjen Poutsma
Resolution: Fixed Votes: 7
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Attachments: Text File castor1.2_patch.txt    
Issue Links:
is depended on by SWS-309 Add namespaceMappings property to Cas... Closed


As brought up in the forum at http://forum.springframework.org/showthread.php?t=49583, it looks like as of Castor 1.2, castor has changed the way their XMLClassDescriptorResolver behaves that is incompatible with the way CastorMarshaller.java is using it.

While loading the spring config you'll get the following exception:

Caused by: java.lang.NullPointerException
at org.exolab.castor.xml.util.XMLClassDescriptorResolverImpl.setMappingLoader(XMLClassDescriptorResolverImpl.java:143)
at org.springframework.oxm.castor.CastorMarshaller.createClassDescriptorResolver(CastorMarshaller.java:325)

I think spring-ws's CastorMarshaller may need to change to use Castor's XMLContext instead of the resolver directly and when creating castor's Marshaller/Unmarshaller. I was able to do this with local changes and it works fine, but that would probably break pre-1.2 Castor so the real framework change would likely involve a bit more.

Comment by Arjen Poutsma [ 16/Feb/08 ]

Could you please supply the local changes you made as a patch? Thanks.

Comment by Jim Cummings [ 18/Feb/08 ]

Arjen - here are the local changes I had made in case it is useful. This passes the spring-ws tests and worked for my problem at hand as well.

The supports() method clearly isn't as smart now. I'm hoping the various class loading scenarios would work with this, but I'm not confident since going with XMLContext seems to limit your control over the class loaders a bit.

Also, this does break pre-castor 1.2 as well.

Comment by Erik-Berndt Scheper [ 05/Mar/08 ]

I've verified that the supplied patch works fine for me, too.

Comment by jang [ 06/Mar/08 ]

I had the same problem and this patch works good.
Will it be implemented in Spring web services 1.5 ?????

Comment by Erik-Berndt Scheper [ 11/Mar/08 ]

See SWS-309 for another improvement on the CastorMarshaller class.

Comment by Arjen Poutsma [ 02/May/08 ]

After doing some research, I have come to the conclusion that it is impossible to support both Castor 1.1.1- and 1.1.2+ with the same marshaller. I tried various reflection tricks, but it seems impossible to differentiate between the different Castor versions. The fact that XMLContext was introduced in 1.1.2 doesn't really help here, since that means it's not a 1.1 vs. 1.2 differentiator.

So, I think the way forward is to support Castor 1.2+ only. It's really a shame that Castor broke the existing behavior with a minor version upgrade, thus forcing us into this.

Comment by Arjen Poutsma [ 02/May/08 ]

Resolved, though this means that the CastorMarshaller only works with 1.2+.

Comment by Werner Guttmann [ 04/May/08 ]

Arjen, being a committer of Castor, I'd like to know what the issue is ?

Comment by Arjen Poutsma [ 05/May/08 ]

Closing issues for 1.5.1

Comment by Vyas Sanzgiri [ 30/May/08 ]

I am still experiencing the same issue with 1.5.2 and castor 1.2. Is this fixed?

Generated at Wed Jul 17 14:36:53 UTC 2019 using JIRA 7.9.2#79002-sha1:3bb15b68ecd99a30eb364c4c1a393359bcad6278.