Hello Werner,

When I looked into the code it does appear the namespace declarations of
parent nodes to the DOM node passed in from Spring WS is not checked.

I'll attach the test case for you later tonight (bit busy at work
unfortunately)

Many thanks
Paul

Ps. I appreciate you looking into this.

-----Original Message-----
From: Werner Guttmann [mailto:[email protected]] 
Sent: 10 February 2010 13:07
To: [email protected]
Cc: Werner Guttmann; Werner Guttmann
Subject: Re: [castor-user] RE: Very Strange Problem

Hi Paul,

just looking at this again. As I'd honestly like to reduce complexity in 
my analysis, can I ask you a favour ?

Spring-WS seems to be using DOM nodes when passing a message payload to 
Castor for unmarshalling. As such, I'd like to see a test case that uses 
Castor only, kind of mimicking what Spring-WS does.

Would that be possible for you to supply me with such a test case ?

My guess right now is that Castor, ineed, fails to handle namespace 
resolution when the namespace declaration is 'outside' the Node given to 
Castor XML.

Cheers
Werner

On 03.02.2010 21:10, Werner Guttmann wrote:
> Hi Paul,
>
> I will definitely reply to this thread once I am back to Vienna and have
> full connectivity, which is not the case right now. Please allow until
> about Monday or Tuesday next week.
>
> Cheers
> Werner
>
> PS I (we, as in indoqa.com) are using the combination of Spring-WS and
> Castor XML extensively ... so I guess we do have a natural interest to
> understand your problem(s) fully.
>
> On 02.02.2010 15:37, Paul French wrote:
>> I have had no response to the below.
>>
>>
>>
>> Would you like me to raise a JIRA issue since I don't think castor can be
>> used as an unmarshaller in web services without given someone the
>> ability to
>> bring down your service unless you create a new XMLContext for each and
>> every request.
>>
>>
>>
>> P
>>
>>
>>
>> From: Paul French [mailto:[email protected]]
>> Sent: 29 January 2010 10:18
>> To: '[email protected]'
>> Cc: 'Lukas Lang'; 'Ben Hope'
>> Subject: RE: [castor-user] RE: Very Strange Problem
>>
>>
>>
>> My problem appears to be this reported issue:
>>
>>
>>
>> http://jira.springframework.org/browse/SWS-565
>>
>>
>>
>> To be clear, I am using castor 1.3.1 and java 6
>>
>>
>>
>> Okay I can reproduce the problem standalone in the program given
>> below. Note
>> that xml docs unmarshalled fine are no longer unmarshalled
>> successfully once
>> an incorrect XML doc is provided unless a namespace is also specified
>> which
>> is not the case in a SOAP request where the namespace is declared in the
>> SOAP envelope.
>>
>>
>>
>> Does anyone know if this been raised as a problem in Castor? Take a
>> look at
>> the output after TEST 4 starts. You can see that the LoginDescriptor gets
>> loaded again due to an incorrect element being supplied. This is the
>> root of
>> my problem.
>>
>>
>>
>> I need a quick and dirty fix. Maybe I can set the namespace explicitly on
>> the DOM node before it is unmarshalled by Castor?
>>
>>
>>
>>
>>
>> public class TestCastor
>>
>> {
>>
>>
>>
>> /**
>>
>> * @param args
>>
>> */
>>
>> public static void main(String[] args) throws Exception
>>
>> {
>>
>> XMLContext context = new XMLContext();
>>
>> context.addPackages(new
>> String[]{"com.kirona.mitie.model.web.server.concept"});
>>
>>
>>
>> Unmarshaller unMarshaller = context.createUnmarshaller();
>>
>> LoginRequest loginRequest = null;
>>
>> try
>>
>> {
>>
>> System.out.println("TEST 1 - NO NAMESPACE (WORKS FINE)");
>>
>> loginRequest = (LoginRequest) unMarshaller.unmarshal(new
>> StringReader("<LoginRequest>\n"+
>>
>> "<username>paul</username>\n"+
>>
>> "<password>password</password>\n"+
>>
>> "</LoginRequest>"));
>>
>> System.out.println("TEST 2 - NAMESPACE as specified in XSD (WORKS
>> FINE)");
>>
>> loginRequest = (LoginRequest) unMarshaller.unmarshal(new
>> StringReader("<sch:LoginRequest
>> xmlns:sch=\"http://kirona.com/2009/12/Concept/schema/\";>\n"+
>>
>> "<sch:username>paul</sch:username>\n"+
>>
>> "<sch:password>password</sch:password>\n"+
>>
>> "</sch:LoginRequest>"));
>>
>> System.out.println("TEST 3 - NO NAMESPACE (STILL WORKS FINE)");
>>
>> loginRequest = (LoginRequest) unMarshaller.unmarshal(new
>> StringReader("<LoginRequest>\n"+
>>
>> "<username>paul</username>\n"+
>>
>> "<password>password</password>\n"+
>>
>> "</LoginRequest>"));
>>
>> System.out.println("TEST 4 - NAMESPACE BUT INCORRECT XML (WILL FAIL) -
>> but also loads package descriptors again!!!");
>>
>> loginRequest = (LoginRequest) unMarshaller.unmarshal(new
>> StringReader("<sch:LoginRequest
>> xmlns:sch=\"http://kirona.com/2009/12/Concept/schema/\";>\n"+
>>
>> "<sch:usernameWRONG>paul</sch:usernameWRONG>\n"+
>>
>> "<sch:password>password</sch:password>\n"+
>>
>> "</sch:LoginRequest>"));
>>
>> }
>>
>> catch (Exception e)
>>
>> {
>>
>> System.out.println("TEST 4 FAILS AS EXPECTED!");
>>
>> e.printStackTrace();
>>
>> }
>>
>> try
>>
>> {
>>
>> System.out.println("TEST 5 - NAMESPACE as specified in XSD (STILL
>> WORKS FINE) - can find unique descriptor for LoginRequest due to
>> namespace
>> being specified");
>>
>> loginRequest = (LoginRequest) unMarshaller.unmarshal(new
>> StringReader("<sch:LoginRequest
>> xmlns:sch=\"http://kirona.com/2009/12/Concept/schema/\";>\n"+
>>
>> "<sch:username>paul</sch:username>\n"+
>>
>> "<sch:password>password</sch:password>\n"+
>>
>> "</sch:LoginRequest>"));
>>
>> System.out.println("TEST 6 - NO NAMESPACE (FAILS due to multiple
>> descriptors loaded for LoginRequest) - cannot find unique descriptor
>> match");
>>
>> loginRequest = (LoginRequest) unMarshaller.unmarshal(new
>> StringReader("<LoginRequest>\n"+
>>
>> "<username>paul</username>\n"+
>>
>> "<password>password</password>\n"+
>>
>> "</LoginRequest>"));
>>
>> }
>>
>> catch (Exception e)
>>
>> {
>>
>> System.out.println("TEST 6 - BUG! FAILS due to multiple descriptors
>> loaded for LoginRequest");
>>
>> e.printStackTrace();
>>
>> }
>>
>> }
>>
>>
>>
>> }
>>
>>
>>
>>
>>
>> For completeness:
>>
>>
>>
>> The XSD required to generate the LoginRequest class is:
>>
>>
>>
>> <?xml version="1.0" encoding="utf-8"?>
>>
>> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema";
>>
>> elementFormDefault="qualified"
>>
>>
>> targetNamespace="http://kirona.com/2009/12/Concept/schema/";
>>
>> xmlns:schema="http://kirona.com/2009/12/Concept/schema/";>
>>
>> <xs:element name="LoginRequest">
>>
>> <xs:complexType>
>>
>> <xs:sequence>
>>
>> <xs:element name="username" type="xs:string"/>
>>
>> <xs:element name="password" type="xs:string"/>
>>
>> </xs:sequence>
>>
>> </xs:complexType>
>>
>> </xs:element>
>>
>> </xs:schema>
>>
>>
>>
>>
>>
>> Command used to build POJO + descriptors used:
>>
>>
>>
>> java.exe org.exolab.castor.builder.SourceGeneratorMain -i
>> xsd/<above>.xsd}
>> -package com.kirona.mitie.model.web.server.concept -dest src
>> -nomarshall -f
>> -types j2 -generateImportedSchemas true
>>
>>
>>
>>
>>
>>
>>
>> Output...........
>>
>>
>>
>>
>>
>> 2010-01-29 10:04:13,296 DEBUG [org.castor.core.util.AbstractProperties] -
>> Properties loaded from classpath: /org/castor/core/castor.core.properties
>>
>> 2010-01-29 10:04:13,312 DEBUG [org.castor.core.util.AbstractProperties] -
>> Properties loaded from classpath: /org/castor/xml/castor.xml.properties
>>
>> 2010-01-29 10:04:13,312 DEBUG [org.castor.core.util.AbstractProperties] -
>> Properties loaded from classpath: /castor.properties
>>
>> 2010-01-29 10:04:13,312 DEBUG
>>
[org.exolab.castor.xml.util.XMLClassDescriptorResolverImpl$DescriptorCacheIm
>>
>> pl] - New instance!
>>
>> 2010-01-29 10:04:13,343 DEBUG
>> [org.exolab.castor.xml.util.resolvers.CastorXMLStrategy] - Setting
>> property:
>> org.exolab.castor.xml.util.ResolverStrategy.LoadPackageMappings to value:
>> true
>>
>> 2010-01-29 10:04:13,343 DEBUG
>> [org.exolab.castor.xml.util.resolvers.CastorXMLStrategy] - Setting
>> property:
>> org.exolab.castor.xml.util.ResolverStrategy.useIntrospection to value:
>> true
>>
>> 2010-01-29 10:04:13,343 DEBUG
>> [org.exolab.castor.xml.util.resolvers.CastorXMLStrategy] - Setting
>> property:
>> org.exolab.castor.xml.util.ResolverStrategy.MappingLoader to value: null
>>
>> 2010-01-29 10:04:13,343 DEBUG
>> [org.exolab.castor.xml.util.resolvers.CastorXMLStrategy] - Setting
>> property:
>> org.exolab.castor.xml.util.ResolverStrategy.Introspector to value:
>> org.exolab.castor.xml.introspec...@15fea60
>>
>> 2010-01-29 10:04:13,343 DEBUG
>> [org.exolab.castor.xml.util.resolvers.AbstractResolverPackageCommand]
>> - Now
>> in resolve method: org.exolab.castor.xml.util.resolvers.ByCDR resolving:
>> com.kirona.mitie.model.web.server.concept
>>
>> 2010-01-29 10:04:13,343 DEBUG
>> [org.exolab.castor.xml.util.resolvers.AbstractResolverPackageCommand]
>> - No
>> domain class loader set, taking it from class.getClassLoader().
>>
>> 2010-01-29 10:04:13,343 DEBUG
>> [org.exolab.castor.xml.util.resolvers.ByCDR] -
>> Found descriptor: class
>>
com.kirona.mitie.model.web.server.concept.descriptors.LoginRequestDescriptor
>>
>>
>> 2010-01-29 10:04:13,359 DEBUG
>>
[org.exolab.castor.xml.util.XMLClassDescriptorResolverImpl$DescriptorCacheIm
>>
>> pl] - Adding descriptor class for:
>> com.kirona.mitie.model.web.server.concept.LoginRequest descriptor:
>>
com.kirona.mitie.model.web.server.concept.descriptors.LoginRequestDescriptor
>>
>> @53c015; descriptor for class: [null]; xml name: null
>>
>> 2010-01-29 10:04:13,359 DEBUG
>> [org.exolab.castor.xml.util.resolvers.AbstractResolverPackageCommand]
>> - Now
>> in resolve method: org.exolab.castor.xml.util.resolvers.ByPackageMapping
>> resolving: com.kirona.mitie.model.web.server.concept
>>
>> 2010-01-29 10:04:13,359 DEBUG
>> [org.exolab.castor.xml.util.resolvers.AbstractResolverPackageCommand]
>> - No
>> domain class loader set, taking it from class.getClassLoader().
>>
>> 2010-01-29 10:04:13,375 DEBUG
>>
[org.exolab.castor.xml.util.XMLClassDescriptorResolverImpl$DescriptorCacheIm
>>
>> pl] - Called addAllDescriptors with null or empty descriptor map
>>
>> 2010-01-29 10:04:13,375 DEBUG [org.exolab.castor.xml.XMLContext] -
>> Creating
>> new Unmarshaller instance.
>>
>> TEST 1 - NO NAMESPACE (WORKS FINE)
>>
>> 2010-01-29 10:04:13,390 DEBUG
>> [org.exolab.castor.xml.util.XMLParserUtils] -
>> Successfully instantiated
>> com.sun.org.apache.xerces.internal.parsers.SAXParser
>>
>> 2010-01-29 10:04:13,421 DEBUG
>>
[org.exolab.castor.xml.util.XMLClassDescriptorResolverImpl$DescriptorCacheIm
>>
>> pl] - Get descriptor for:
>> com.kirona.mitie.model.web.server.concept.LoginRequest found:
>>
com.kirona.mitie.model.web.server.concept.descriptors.LoginRequestDescriptor
>>
>> @53c015; descriptor for class: [null]; xml name: null
>>
>> 2010-01-29 10:04:13,421 DEBUG
>>
[org.exolab.castor.xml.util.XMLClassDescriptorResolverImpl$DescriptorCacheIm
>>
>> pl] - Get descriptor for:
>> com.kirona.mitie.model.web.server.concept.LoginRequest found:
>>
com.kirona.mitie.model.web.server.concept.descriptors.LoginRequestDescriptor
>>
>> @53c015; descriptor for class: [null]; xml name: null
>>
>> TEST 2 - NAMESPACE as specified in XSD (WORKS FINE)
>>
>> 2010-01-29 10:04:13,421 DEBUG
>> [org.exolab.castor.xml.util.XMLParserUtils] -
>> Successfully instantiated
>> com.sun.org.apache.xerces.internal.parsers.SAXParser
>>
>> 2010-01-29 10:04:13,437 DEBUG
>>
[org.exolab.castor.xml.util.XMLClassDescriptorResolverImpl$DescriptorCacheIm
>>
>> pl] - Get descriptor for:
>> com.kirona.mitie.model.web.server.concept.LoginRequest found:
>>
com.kirona.mitie.model.web.server.concept.descriptors.LoginRequestDescriptor
>>
>> @53c015; descriptor for class: [null]; xml name: null
>>
>> 2010-01-29 10:04:13,437 DEBUG
>>
[org.exolab.castor.xml.util.XMLClassDescriptorResolverImpl$DescriptorCacheIm
>>
>> pl] - Get descriptor for:
>> com.kirona.mitie.model.web.server.concept.LoginRequest found:
>>
com.kirona.mitie.model.web.server.concept.descriptors.LoginRequestDescriptor
>>
>> @53c015; descriptor for class: [null]; xml name: null
>>
>> TEST 3 - NO NAMESPACE (STILL WORKS FINE)
>>
>> 2010-01-29 10:04:13,437 DEBUG
>> [org.exolab.castor.xml.util.XMLParserUtils] -
>> Successfully instantiated
>> com.sun.org.apache.xerces.internal.parsers.SAXParser
>>
>> 2010-01-29 10:04:13,437 DEBUG
>>
[org.exolab.castor.xml.util.XMLClassDescriptorResolverImpl$DescriptorCacheIm
>>
>> pl] - Get descriptor for:
>> com.kirona.mitie.model.web.server.concept.LoginRequest found:
>>
com.kirona.mitie.model.web.server.concept.descriptors.LoginRequestDescriptor
>>
>> @53c015; descriptor for class: [null]; xml name: null
>>
>> 2010-01-29 10:04:13,437 DEBUG
>>
[org.exolab.castor.xml.util.XMLClassDescriptorResolverImpl$DescriptorCacheIm
>>
>> pl] - Get descriptor for:
>> com.kirona.mitie.model.web.server.concept.LoginRequest found:
>>
com.kirona.mitie.model.web.server.concept.descriptors.LoginRequestDescriptor
>>
>> @53c015; descriptor for class: [null]; xml name: null
>>
>> TEST 4 - NAMESPACE BUT INCORRECT XML (WILL FAIL) - but also loads package
>> descriptors again!!!
>>
>> 2010-01-29 10:04:13,437 DEBUG
>> [org.exolab.castor.xml.util.XMLParserUtils] -
>> Successfully instantiated
>> com.sun.org.apache.xerces.internal.parsers.SAXParser
>>
>> 2010-01-29 10:04:13,437 DEBUG
>>
[org.exolab.castor.xml.util.XMLClassDescriptorResolverImpl$DescriptorCacheIm
>>
>> pl] - Get descriptor for:
>> com.kirona.mitie.model.web.server.concept.UsernameWRONG found: null
>>
>> 2010-01-29 10:04:13,437 DEBUG
>> [org.exolab.castor.xml.util.resolvers.CastorXMLStrategy] - Setting
>> property:
>> org.exolab.castor.xml.util.ResolverStrategy.LoadPackageMappings to value:
>> true
>>
>> 2010-01-29 10:04:13,437 DEBUG
>> [org.exolab.castor.xml.util.resolvers.CastorXMLStrategy] - Setting
>> property:
>> org.exolab.castor.xml.util.ResolverStrategy.useIntrospection to value:
>> true
>>
>> 2010-01-29 10:04:13,437 DEBUG
>> [org.exolab.castor.xml.util.resolvers.CastorXMLStrategy] - Setting
>> property:
>> org.exolab.castor.xml.util.ResolverStrategy.MappingLoader to value: null
>>
>> 2010-01-29 10:04:13,437 DEBUG
>> [org.exolab.castor.xml.util.resolvers.CastorXMLStrategy] - Setting
>> property:
>> org.exolab.castor.xml.util.ResolverStrategy.Introspector to value:
>> org.exolab.castor.xml.introspec...@15fea60
>>
>> 2010-01-29 10:04:13,437 DEBUG
>> [org.exolab.castor.xml.util.resolvers.CastorXMLStrategy] - Setting
>> property:
>> org.exolab.castor.xml.util.ResolverStrategy.ClassLoader to value:
>> sun.misc.launcher$appclassloa...@11b86e7
>>
>> 2010-01-29 10:04:13,437 DEBUG
>> [org.exolab.castor.xml.util.resolvers.CastorXMLStrategy] - Setting
>> property:
>> org.exolab.castor.xml.util.ResolverStrategy.LoadPackageMappings to value:
>> true
>>
>> 2010-01-29 10:04:13,437 DEBUG
>> [org.exolab.castor.xml.util.resolvers.CastorXMLStrategy] - Setting
>> property:
>> org.exolab.castor.xml.util.ResolverStrategy.useIntrospection to value:
>> true
>>
>> 2010-01-29 10:04:13,437 DEBUG
>> [org.exolab.castor.xml.util.resolvers.CastorXMLStrategy] - Setting
>> property:
>> org.exolab.castor.xml.util.ResolverStrategy.MappingLoader to value: null
>>
>> 2010-01-29 10:04:13,437 DEBUG
>> [org.exolab.castor.xml.util.resolvers.CastorXMLStrategy] - Setting
>> property:
>> org.exolab.castor.xml.util.ResolverStrategy.Introspector to value:
>> org.exolab.castor.xml.introspec...@15fea60
>>
>> 2010-01-29 10:04:13,437 DEBUG
>>
[org.exolab.castor.xml.util.XMLClassDescriptorResolverImpl$DescriptorCacheIm
>>
>> pl] - Get descriptor for:
>> com.kirona.mitie.model.web.server.concept.UsernameWRONG found: null
>>
>> 2010-01-29 10:04:13,437 DEBUG
>> [org.exolab.castor.xml.util.resolvers.AbstractResolverClassCommand] -
>> Now in
>> method: org.exolab.castor.xml.util.resolvers.ByMappingLoader resolving:
>> com.kirona.mitie.model.web.server.concept.UsernameWRONG
>>
>> 2010-01-29 10:04:13,437 DEBUG
>> [org.exolab.castor.xml.util.resolvers.ByMappingLoader] - No mapping
>> loader
>> specified
>>
>> 2010-01-29 10:04:13,437 DEBUG
>>
[org.exolab.castor.xml.util.XMLClassDescriptorResolverImpl$DescriptorCacheIm
>>
>> pl] - Called addAllDescriptors with null or empty descriptor map
>>
>> 2010-01-29 10:04:13,437 DEBUG
>>
[org.exolab.castor.xml.util.XMLClassDescriptorResolverImpl$DescriptorCacheIm
>>
>> pl] - Get descriptor for:
>> com.kirona.mitie.model.web.server.concept.UsernameWRONG found: null
>>
>> 2010-01-29 10:04:13,437 DEBUG
>> [org.exolab.castor.xml.util.resolvers.AbstractResolverPackageCommand]
>> - Now
>> in resolve method: org.exolab.castor.xml.util.resolvers.ByCDR resolving:
>> com.kirona.mitie.model.web.server.concept
>>
>> 2010-01-29 10:04:13,437 DEBUG
>> [org.exolab.castor.xml.util.resolvers.ByCDR] -
>> Found descriptor: class
>>
com.kirona.mitie.model.web.server.concept.descriptors.LoginRequestDescriptor
>>
>>
>> 2010-01-29 10:04:13,437 DEBUG
>>
[org.exolab.castor.xml.util.XMLClassDescriptorResolverImpl$DescriptorCacheIm
>>
>> pl] - Adding descriptor class for:
>> com.kirona.mitie.model.web.server.concept.LoginRequest descriptor:
>>
com.kirona.mitie.model.web.server.concept.descriptors.LoginRequestDescriptor
>>
>> @1cfb549; descriptor for class: [null]; xml name: null
>>
>> 2010-01-29 10:04:13,437 DEBUG
>> [org.exolab.castor.xml.util.resolvers.AbstractResolverPackageCommand]
>> - Now
>> in resolve method: org.exolab.castor.xml.util.resolvers.ByPackageMapping
>> resolving: com.kirona.mitie.model.web.server.concept
>>
>> 2010-01-29 10:04:13,437 DEBUG
>>
[org.exolab.castor.xml.util.XMLClassDescriptorResolverImpl$DescriptorCacheIm
>>
>> pl] - Called addAllDescriptors with null or empty descriptor map
>>
>> 2010-01-29 10:04:13,437 DEBUG
>>
[org.exolab.castor.xml.util.XMLClassDescriptorResolverImpl$DescriptorCacheIm
>>
>> pl] - Get descriptor for:
>> com.kirona.mitie.model.web.server.concept.UsernameWRONG found: null
>>
>> 2010-01-29 10:04:13,437 DEBUG
>> [org.exolab.castor.xml.util.resolvers.AbstractResolverClassCommand] -
>> Now in
>> method: org.exolab.castor.xml.util.resolvers.ByDescriptorClass resolving:
>> com.kirona.mitie.model.web.server.concept.UsernameWRONG
>>
>> 2010-01-29 10:04:13,437 DEBUG
>> [org.exolab.castor.xml.util.resolvers.ResolveHelpers] - Ignored
>> problem at
>> loading class:
>> com.kirona.mitie.model.web.server.concept.UsernameWRONGDescriptor through
>> class loader: sun.misc.launcher$appclassloa...@11b86e7, exception:
>> java.lang.ClassNotFoundException:
>> com.kirona.mitie.model.web.server.concept.UsernameWRONGDescriptor
>>
>> 2010-01-29 10:04:13,437 DEBUG
>> [org.exolab.castor.xml.util.resolvers.ResolveHelpers] - Ignored
>> problem at
>> loading class:
>>
com.kirona.mitie.model.web.server.concept.descriptors.UsernameWRONGDescripto
>>
>> r through class loader: sun.misc.launcher$appclassloa...@11b86e7,
>> exception:
>> java.lang.ClassNotFoundException:
>>
com.kirona.mitie.model.web.server.concept.descriptors.UsernameWRONGDescripto
>>
>> r
>>
>> 2010-01-29 10:04:13,437 DEBUG
>>
[org.exolab.castor.xml.util.XMLClassDescriptorResolverImpl$DescriptorCacheIm
>>
>> pl] - Called addAllDescriptors with null or empty descriptor map
>>
>> 2010-01-29 10:04:13,437 DEBUG
>>
[org.exolab.castor.xml.util.XMLClassDescriptorResolverImpl$DescriptorCacheIm
>>
>> pl] - Get descriptor for:
>> com.kirona.mitie.model.web.server.concept.UsernameWRONG found: null
>>
>> 2010-01-29 10:04:13,437 DEBUG
>> [org.exolab.castor.xml.util.resolvers.AbstractResolverClassCommand] -
>> Now in
>> method: org.exolab.castor.xml.util.resolvers.ByIntrospection resolving:
>> com.kirona.mitie.model.web.server.concept.UsernameWRONG
>>
>> 2010-01-29 10:04:13,437 DEBUG
>> [org.exolab.castor.xml.util.resolvers.ResolveHelpers] - Ignored
>> problem at
>> loading class: com.kirona.mitie.model.web.server.concept.UsernameWRONG
>> through class loader: sun.misc.launcher$appclassloa...@11b86e7,
>> exception:
>> java.lang.ClassNotFoundException:
>> com.kirona.mitie.model.web.server.concept.UsernameWRONG
>>
>> 2010-01-29 10:04:13,437 DEBUG
>>
[org.exolab.castor.xml.util.XMLClassDescriptorResolverImpl$DescriptorCacheIm
>>
>> pl] - Called addAllDescriptors with null or empty descriptor map
>>
>> 2010-01-29 10:04:13,437 DEBUG
>>
[org.exolab.castor.xml.util.XMLClassDescriptorResolverImpl$DescriptorCacheIm
>>
>> pl] - Get descriptor for:
>> com.kirona.mitie.model.web.server.concept.UsernameWRONG found: null
>>
>> 2010-01-29 10:04:13,437 DEBUG
>>
[org.exolab.castor.xml.util.XMLClassDescriptorResolverImpl$DescriptorCacheIm
>>
>> pl] - Adding class name to missing classes:
>> com.kirona.mitie.model.web.server.concept.UsernameWRONG
>>
>> 2010-01-29 10:04:13,437 DEBUG [org.exolab.castor.xml.UnmarshalHandler] -
>> unable to find FieldDescriptor for 'usernameWRONG' in ClassDescriptor of
>> LoginRequest - ignoring extra element.
>>
>> TEST 4 FAILS AS EXPECTED!
>>
>> org.exolab.castor.xml.MarshalException: Element with name password
>> passed to
>> type LoginRequest in incorrect order; expected element with name
>> 'username'
>> or any other optional element declared prior to it.{File: [not
>> available];
>> line: 3; column: 15}
>>
>> at
>>
org.exolab.castor.xml.Unmarshaller.convertSAXExceptionToMarshalException(Unm
>>
>> arshaller.java:794)
>>
>> at org.exolab.castor.xml.Unmarshaller.unmarshal(Unmarshaller.java:760)
>>
>> at org.exolab.castor.xml.Unmarshaller.unmarshal(Unmarshaller.java:626)
>>
>> at test.castor.TestCastor.main(TestCastor.java:47)
>>
>> Caused by: ValidationException: Element with name password passed to type
>> LoginRequest in incorrect order; expected element with name 'username' or
>> any other optional element declared prior to it.
>>
>> at
>>
org.exolab.castor.xml.util.XMLClassDescriptorImpl.checkDescriptorForCorrectO
>>
>> rderWithinSequence(XMLClassDescriptorImpl.java:349)
>>
>> at
>>
org.exolab.castor.xml.UnmarshalHandler.startElement(UnmarshalHandler.java:19
>>
>> 59)
>>
>> at
>>
org.exolab.castor.xml.UnmarshalHandler.startElement(UnmarshalHandler.java:14
>>
>> 36)
>>
>> at
>>
com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(Ab
>>
>> stractSAXParser.java:501)
>>
>> at
>>
com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartEl
>>
>> ement(XMLNSDocumentScannerImpl.java:400)
>>
>> at
>>
com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$Fragm
>>
>> entContentDriver.next(XMLDocumentFragmentScannerImpl.java:2747)
>>
>> at
>>
com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocum
>>
>> entScannerImpl.java:648)
>>
>> at
>>
com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSD
>>
>> ocumentScannerImpl.java:140)
>>
>> at
>>
com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanD
>>
>> ocument(XMLDocumentFragmentScannerImpl.java:510)
>>
>> at
>>
com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Con
>>
>> figuration.java:807)
>>
>> at
>>
com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Con
>>
>> figuration.java:737)
>>
>> at
>>
com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:10
>>
>> 7)
>>
>> at
>>
com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractS
>>
>> AXParser.java:1205)
>>
>> at org.exolab.castor.xml.Unmarshaller.unmarshal(Unmarshaller.java:748)
>>
>> ... 2 more
>>
>> TEST 5 - NAMESPACE as specified in XSD (STILL WORKS FINE) - can find
>> unique
>> descriptor for LoginRequest due to namespace being specified
>>
>> 2010-01-29 10:04:13,453 DEBUG
>> [org.exolab.castor.xml.util.XMLParserUtils] -
>> Successfully instantiated
>> com.sun.org.apache.xerces.internal.parsers.SAXParser
>>
>> 2010-01-29 10:04:13,453 DEBUG
>>
[org.exolab.castor.xml.util.XMLClassDescriptorResolverImpl$DescriptorCacheIm
>>
>> pl] - Get descriptor for:
>> com.kirona.mitie.model.web.server.concept.LoginRequest found:
>>
com.kirona.mitie.model.web.server.concept.descriptors.LoginRequestDescriptor
>>
>> @1cfb549; descriptor for class: [null]; xml name: null
>>
>> 2010-01-29 10:04:13,453 DEBUG
>>
[org.exolab.castor.xml.util.XMLClassDescriptorResolverImpl$DescriptorCacheIm
>>
>> pl] - Get descriptor for:
>> com.kirona.mitie.model.web.server.concept.LoginRequest found:
>>
com.kirona.mitie.model.web.server.concept.descriptors.LoginRequestDescriptor
>>
>> @1cfb549; descriptor for class: [null]; xml name: null
>>
>> TEST 6 - NO NAMESPACE (FAILS due to multiple descriptors loaded for
>> LoginRequest) - cannot find unique descriptor match
>>
>> 2010-01-29 10:04:13,453 DEBUG
>> [org.exolab.castor.xml.util.XMLParserUtils] -
>> Successfully instantiated
>> com.sun.org.apache.xerces.internal.parsers.SAXParser
>>
>> 2010-01-29 10:04:13,453 DEBUG
>>
[org.exolab.castor.xml.util.XMLClassDescriptorResolverImpl$DescriptorCacheIm
>>
>> pl] - Get descriptor for: LoginRequest found: null
>>
>> 2010-01-29 10:04:13,453 DEBUG
>> [org.exolab.castor.xml.util.resolvers.CastorXMLStrategy] - Setting
>> property:
>> org.exolab.castor.xml.util.ResolverStrategy.LoadPackageMappings to value:
>> true
>>
>> 2010-01-29 10:04:13,453 DEBUG
>> [org.exolab.castor.xml.util.resolvers.CastorXMLStrategy] - Setting
>> property:
>> org.exolab.castor.xml.util.ResolverStrategy.useIntrospection to value:
>> true
>>
>> 2010-01-29 10:04:13,453 DEBUG
>> [org.exolab.castor.xml.util.resolvers.CastorXMLStrategy] - Setting
>> property:
>> org.exolab.castor.xml.util.ResolverStrategy.MappingLoader to value: null
>>
>> 2010-01-29 10:04:13,453 DEBUG
>> [org.exolab.castor.xml.util.resolvers.CastorXMLStrategy] - Setting
>> property:
>> org.exolab.castor.xml.util.ResolverStrategy.Introspector to value:
>> org.exolab.castor.xml.introspec...@15fea60
>>
>> 2010-01-29 10:04:13,453 DEBUG
>> [org.exolab.castor.xml.util.resolvers.CastorXMLStrategy] - Setting
>> property:
>> org.exolab.castor.xml.util.ResolverStrategy.ClassLoader to value:
>> sun.misc.launcher$appclassloa...@11b86e7
>>
>> 2010-01-29 10:04:13,453 DEBUG
>> [org.exolab.castor.xml.util.resolvers.CastorXMLStrategy] - Setting
>> property:
>> org.exolab.castor.xml.util.ResolverStrategy.LoadPackageMappings to value:
>> true
>>
>> 2010-01-29 10:04:13,453 DEBUG
>> [org.exolab.castor.xml.util.resolvers.CastorXMLStrategy] - Setting
>> property:
>> org.exolab.castor.xml.util.ResolverStrategy.useIntrospection to value:
>> true
>>
>> 2010-01-29 10:04:13,453 DEBUG
>> [org.exolab.castor.xml.util.resolvers.CastorXMLStrategy] - Setting
>> property:
>> org.exolab.castor.xml.util.ResolverStrategy.MappingLoader to value: null
>>
>> 2010-01-29 10:04:13,453 DEBUG
>> [org.exolab.castor.xml.util.resolvers.CastorXMLStrategy] - Setting
>> property:
>> org.exolab.castor.xml.util.ResolverStrategy.Introspector to value:
>> org.exolab.castor.xml.introspec...@15fea60
>>
>> 2010-01-29 10:04:13,453 DEBUG
>>
[org.exolab.castor.xml.util.XMLClassDescriptorResolverImpl$DescriptorCacheIm
>>
>> pl] - Get descriptor for: LoginRequest found: null
>>
>> 2010-01-29 10:04:13,453 DEBUG
>> [org.exolab.castor.xml.util.resolvers.AbstractResolverClassCommand] -
>> Now in
>> method: org.exolab.castor.xml.util.resolvers.ByMappingLoader resolving:
>> LoginRequest
>>
>> 2010-01-29 10:04:13,453 DEBUG
>> [org.exolab.castor.xml.util.resolvers.ByMappingLoader] - No mapping
>> loader
>> specified
>>
>> 2010-01-29 10:04:13,453 DEBUG
>>
[org.exolab.castor.xml.util.XMLClassDescriptorResolverImpl$DescriptorCacheIm
>>
>> pl] - Called addAllDescriptors with null or empty descriptor map
>>
>> 2010-01-29 10:04:13,453 DEBUG
>>
[org.exolab.castor.xml.util.XMLClassDescriptorResolverImpl$DescriptorCacheIm
>>
>> pl] - Get descriptor for: LoginRequest found: null
>>
>> 2010-01-29 10:04:13,453 DEBUG
>> [org.exolab.castor.xml.util.resolvers.AbstractResolverPackageCommand] -
>> Package name is empty! Anyhow, giving it a try...
>>
>> 2010-01-29 10:04:13,453 DEBUG
>> [org.exolab.castor.xml.util.resolvers.AbstractResolverPackageCommand]
>> - Now
>> in resolve method: org.exolab.castor.xml.util.resolvers.ByCDR resolving:
>>
>> 2010-01-29 10:04:13,453 DEBUG
>>
[org.exolab.castor.xml.util.XMLClassDescriptorResolverImpl$DescriptorCacheIm
>>
>> pl] - Called addAllDescriptors with null or empty descriptor map
>>
>> 2010-01-29 10:04:13,453 DEBUG
>> [org.exolab.castor.xml.util.resolvers.AbstractResolverPackageCommand] -
>> Package name is empty! Anyhow, giving it a try...
>>
>> 2010-01-29 10:04:13,453 DEBUG
>> [org.exolab.castor.xml.util.resolvers.AbstractResolverPackageCommand]
>> - Now
>> in resolve method: org.exolab.castor.xml.util.resolvers.ByPackageMapping
>> resolving:
>>
>> 2010-01-29 10:04:13,453 DEBUG
>>
[org.exolab.castor.xml.util.XMLClassDescriptorResolverImpl$DescriptorCacheIm
>>
>> pl] - Called addAllDescriptors with null or empty descriptor map
>>
>> 2010-01-29 10:04:13,453 DEBUG
>>
[org.exolab.castor.xml.util.XMLClassDescriptorResolverImpl$DescriptorCacheIm
>>
>> pl] - Get descriptor for: LoginRequest found: null
>>
>> 2010-01-29 10:04:13,453 DEBUG
>> [org.exolab.castor.xml.util.resolvers.AbstractResolverClassCommand] -
>> Now in
>> method: org.exolab.castor.xml.util.resolvers.ByDescriptorClass resolving:
>> LoginRequest
>>
>> 2010-01-29 10:04:13,453 DEBUG
>> [org.exolab.castor.xml.util.resolvers.ResolveHelpers] - Ignored
>> problem at
>> loading class: LoginRequestDescriptor through class loader:
>> sun.misc.launcher$appclassloa...@11b86e7, exception:
>> java.lang.ClassNotFoundException: LoginRequestDescriptor
>>
>> 2010-01-29 10:04:13,453 DEBUG
>>
[org.exolab.castor.xml.util.XMLClassDescriptorResolverImpl$DescriptorCacheIm
>>
>> pl] - Called addAllDescriptors with null or empty descriptor map
>>
>> 2010-01-29 10:04:13,453 DEBUG
>>
[org.exolab.castor.xml.util.XMLClassDescriptorResolverImpl$DescriptorCacheIm
>>
>> pl] - Get descriptor for: LoginRequest found: null
>>
>> 2010-01-29 10:04:13,453 DEBUG
>> [org.exolab.castor.xml.util.resolvers.AbstractResolverClassCommand] -
>> Now in
>> method: org.exolab.castor.xml.util.resolvers.ByIntrospection resolving:
>> LoginRequest
>>
>> 2010-01-29 10:04:13,468 DEBUG
>> [org.exolab.castor.xml.util.resolvers.ResolveHelpers] - Ignored
>> problem at
>> loading class: LoginRequest through class loader:
>> sun.misc.launcher$appclassloa...@11b86e7, exception:
>> java.lang.ClassNotFoundException: LoginRequest
>>
>> 2010-01-29 10:04:13,468 DEBUG
>>
[org.exolab.castor.xml.util.XMLClassDescriptorResolverImpl$DescriptorCacheIm
>>
>> pl] - Called addAllDescriptors with null or empty descriptor map
>>
>> 2010-01-29 10:04:13,468 DEBUG
>>
[org.exolab.castor.xml.util.XMLClassDescriptorResolverImpl$DescriptorCacheIm
>>
>> pl] - Get descriptor for: LoginRequest found: null
>>
>> 2010-01-29 10:04:13,468 DEBUG
>>
[org.exolab.castor.xml.util.XMLClassDescriptorResolverImpl$DescriptorCacheIm
>>
>> pl] - Adding class name to missing classes: LoginRequest
>>
>> 2010-01-29 10:04:13,468 DEBUG [org.exolab.castor.xml.UnmarshalHandler] -
>> unable to find or create a ClassDescriptor for class: LoginRequest
>>
>> TEST 6 - BUG! FAILS due to multiple descriptors loaded for LoginRequest
>>
>> org.exolab.castor.xml.MarshalException: The class for the root element
>> 'LoginRequest' could not be found.{File: [not available]; line: 1;
>> column:
>> 15}
>>
>> at
>>
org.exolab.castor.xml.Unmarshaller.convertSAXExceptionToMarshalException(Unm
>>
>> arshaller.java:794)
>>
>> at org.exolab.castor.xml.Unmarshaller.unmarshal(Unmarshaller.java:760)
>>
>> at org.exolab.castor.xml.Unmarshaller.unmarshal(Unmarshaller.java:626)
>>
>> at test.castor.TestCastor.main(TestCastor.java:65)
>>
>> Caused by: org.xml.sax.SAXException: The class for the root element
>> 'LoginRequest' could not be found.
>>
>> at
>>
org.exolab.castor.xml.UnmarshalHandler.startElement(UnmarshalHandler.java:16
>>
>> 07)
>>
>> at
>>
org.exolab.castor.xml.UnmarshalHandler.startElement(UnmarshalHandler.java:14
>>
>> 36)
>>
>> at
>>
com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(Ab
>>
>> stractSAXParser.java:501)
>>
>> at
>>
com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartEl
>>
>> ement(XMLNSDocumentScannerImpl.java:400)
>>
>> at
>>
com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl$NSContentDr
>>
>> iver.scanRootElementHook(XMLNSDocumentScannerImpl.java:626)
>>
>> at
>>
com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$Fragm
>>
>> entContentDriver.next(XMLDocumentFragmentScannerImpl.java:3095)
>>
>> at
>>
com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.
>>
>> next(XMLDocumentScannerImpl.java:922)
>>
>> at
>>
com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocum
>>
>> entScannerImpl.java:648)
>>
>> at
>>
com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSD
>>
>> ocumentScannerImpl.java:140)
>>
>> at
>>
com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanD
>>
>> ocument(XMLDocumentFragmentScannerImpl.java:510)
>>
>> at
>>
com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Con
>>
>> figuration.java:807)
>>
>> at
>>
com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Con
>>
>> figuration.java:737)
>>
>> at
>>
com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:10
>>
>> 7)
>>
>> at
>>
com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractS
>>
>> AXParser.java:1205)
>>
>> at org.exolab.castor.xml.Unmarshaller.unmarshal(Unmarshaller.java:748)
>>
>> ... 2 more
>>
>>
>>
>>
>>
>>
>>
>> Thanks
>>
>> Paul
>>
>>
>>
>> -----Original Message-----
>> From: Paul French [mailto:[email protected]]
>> Sent: 28 January 2010 22:41
>> To: [email protected]
>> Cc: 'Lukas Lang'
>> Subject: RE: [castor-user] RE: Very Strange Problem
>>
>>
>>
>> Okay dokey,
>>
>>
>>
>> I used the latest Spring 3.0 code with Spring WS 1.5.8 (just
>>
>> spring-ws-core-1.5.8.jar and spring-xml-1.5.8.jar) and I get the same
>>
>> problem as before.
>>
>>
>>
>> I used the latest CastorMarshaller where you can use the targetPackages
>>
>> property to set the packages that have descriptors for them.
>>
>>
>>
>> I think it is a Castor bug.
>>
>>
>>
>> More help would be really appreciated.
>>
>>
>>
>> Thanks
>>
>> Paul
>>
>>
>>
>>
>>
>>
>>
>> -----Original Message-----
>>
>> From: Paul French [mailto:[email protected]]
>>
>> Sent: 28 January 2010 21:47
>>
>> To: [email protected]
>>
>> Cc: 'Lukas Lang'
>>
>> Subject: RE: [castor-user] RE: Very Strange Problem
>>
>>
>>
>> Thanks Lukas and Werner for your input.
>>
>>
>>
>> Do you agree there is a bug in Castor? Why would it reload all package
>>
>> descriptors for a package when an element is not found specified in
>> the SOAP
>>
>> request? If this did not happen everything would be fine for me!!
>>
>>
>>
>> Any chance you have a reference to the fix in Spring 3.0 so I could
>> have a
>>
>> quick read. I am not clear on where the problem is?
>>
>>
>>
>> I'll download Spring 3.0 in the meantime and take a look at the new and
>>
>> improved Castor Marshaller.
>>
>>
>>
>> Many thanks,
>>
>> Paul
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> -----Original Message-----
>>
>> From: Werner Guttmann [mailto:[email protected]]
>>
>> Sent: 28 January 2010 20:53
>>
>> To: [email protected]
>>
>> Cc: Lukas Lang
>>
>> Subject: Re: [castor-user] RE: Very Strange Problem
>>
>>
>>
>> Hi Paul, Hi Lukas,
>>
>>
>>
>> on top of what Lukas just said, let me just add that this has been
>>
>> reported with the Spring folks, and a patch has been committed to the
>>
>> Spring 3.0 code base where the Spring OXM code has been moved to. In
>>
>> other words, within Spring 3.0 and its (new) Spring OXM package, the
>>
>> CastorMarshaller should now be sophisticated enough.
>>
>>
>>
>> Having said that, a few of us are currently investigating whether the
>>
>> new Spring OXM (as part of Spring 3.0) can be used with spring-ws in its
>>
>> 1.5.x incarnations.
>>
>>
>>
>> I hope this adds a bit more light to what's going on in this context.
>>
>>
>>
>> Regards
>>
>> Werner
>>
>>
>>
>> On 28.01.2010 21:02, Lukas Lang wrote:
>>
>>> Hello Paul,
>>
>>>
>>
>>> unfortunately, Spring WS does not provide sophisticated configuration
>>> and
>>
>> customization methods of the integrated Castor
>> marshaller/unmarshaller, to
>>
>> be more specific: a setter for the XMLContext. We have experienced this
>>
>> issue in a professional environment several times and I recommend
>> proceeding
>>
>> as follows
>>
>>>
>>
>>> 1. extend Spring's CastorMarshaller
>>
>>> 2. hook your Castor configuration into the lifecycle
>>
>>>
>>
>>> You can find a small example attached.
>>
>>>
>>
>>> To deal with your second problem, I'd recommend generating all types
>>> using
>>
>> Castor (e.g. the Castor Maven plugin[1]) from a separated XML schema
>> (have a
>>
>> look at the Spring WS documentation for automatically creating a WSDL in
>>
>> case you aren't familiar). Don't forget to map XML namespaces to packages
>>
>> properly as specified in [2] before code generation. Class descriptors
>>
>> should then be aware of the proper namespaces.
>>
>>>
>>
>>> Hope that helps.
>>
>>>
>>
>>> Regards,
>>
>>> Lukas
>>
>>>
>>
>>> PS: It would be awesome if you would provide us or the Spring team
>>> with a
>>
>> patch!
>>
>>>
>>
>>> [1] http://mojo.codehaus.org/castor-maven-plugin/
>>
>>> [2]
>>
>>
http://www.castor.org/srcgen-properties.html#Mapping-XML-namespaces-to-Java-
>>
>>
>> packages
>>
>>>
>>
>>> --------------
>>
>>> public class WsCastorMarshaller extends CastorMarshaller {
>>
>>>
>>
>>> private String[] packages = {};
>>
>>> private Log log = LogFactory.getLog(WsCastorMarshaller.class);
>>
>>>
>>
>>> @Override
>>
>>> protected void customizeMarshaller(Marshaller marshaller) {
>>
>>> XMLClassDescriptorResolver resolver = configureResolver();
>>
>>> marshaller.setResolver(resolver);
>>
>>> }
>>
>>>
>>
>>> @Override
>>
>>> protected void customizeUnmarshaller(Unmarshaller unmarshaller) {
>>
>>> XMLClassDescriptorResolver resolver = configureResolver();
>>
>>> unmarshaller.setResolver(resolver);
>>
>>> }
>>
>>>
>>
>>> private XMLClassDescriptorResolver configureResolver() {
>>
>>> XMLClassDescriptorResolver resolver = (XMLClassDescriptorResolver)
>>
>> ClassDescriptorResolverFactory
>>
>>> .createClassDescriptorResolver(BindingType.XML);
>>
>>>
>>
>>> Introspector introspector = new Introspector();
>>
>>> introspector.setInternalContext(marshaller.getInternalContext());
>>
>>> resolver.setIntrospector(introspector);
>>
>>>
>>
>>> try {
>>
>>> resolver.addPackages(this.packages);
>>
>>> } catch (ResolverException e) {
>>
>>> log.error("Error while customizing Castor
>>
>> marshaller/unmarshaller.", e);
>>
>>> }
>>
>>> return resolver;
>>
>>> }
>>
>>>
>>
>>> public void setPackages(String[] packages) {
>>
>>> this.packages = packages;
>>
>>> }
>>
>>> }
>>
>>> --------------
>>
>>>
>>
>>> Am 28.01.2010 um 20:11 schrieb Paul French:
>>
>>>
>>
>>>> Hello,
>>
>>>>
>>
>>>> Okay made some progress for the below.
>>
>>>>
>>
>>>> I've written a simple main method to test Castor in isolation and even
>>
>> though it works there looks like a bug to me which obviously causes a
>>
>> problem when passing a fragment of XML to Castor to unmarshall.
>>
>>>>
>>
>>>> The test program is shown below.
>>
>>>>
>>
>>>> What happens is when the<usernameWRONG> element is processed castor
>>
>> cannot find a descriptor for it. However before the tag<usernameWRONG>
>>
>> castor has found the descriptor for<LoginRequest> as you would expect.
>> What
>>
>> I don't expect is that when Castor fails to find a descriptor for
>>
>> usernameWRONG it adds all the descriptors it found for the package
>> where the
>>
>> LoginRequest lives all over again. So you end up with the same descriptor
>>
>> twice for some classes in the descriptor cache.
>>
>>>>
>>
>>>> Hence on subsequent calls with a valid XML doc when
>>
>> XMLClassDescriptorResolverImpl.resolveByXMLName(final String xmlName,
>> final
>>
>> String namespaceURI, finalClassLoader loader) is called it finds 2
>> possible
>>
>> matches for a descriptor. In the standalone program it manages to
>> resolve to
>>
>> one of these since the namespace is set explicitly. When used from within
>>
>> Spring Web Services it cannot resolve a descriptor from the 2 possible
>>
>> matches since I assume the namespace is not set explicitly in the XML doc
>>
>> since the namespace declaration is defined in SOAP header.
>>
>>>>
>>
>>>> Any ideas how to progress this? Someone can bring the whole web service
>>
>> down by simply sending a slightly incorrect SOAP request.
>>
>>>>
>>
>>>> Thanks
>>
>>>> Paul
>>
>>>>
>>
>>>>
>>
>>>>
>>
>>>> public static void main(String[] args) throws Exception
>>
>>>> {
>>
>>>> XMLContext context = new XMLContext();
>>
>>>> context.addPackages(new
>>
>>
String[]{"com.kirona.mitie.model.web.server.concept","com.kirona.mitie.model
>>
>>
>> .web.server.concept.types"});
>>
>>>>
>>
>>>> Unmarshaller unMarshaller = context.createUnmarshaller();
>>
>>>> try
>>
>>>> {
>>
>>>> System.out.println("TEST 1 - this will fail due to incorrect XML
>>
>> tag usernameWRONG");
>>
>>>> LoginRequest loginRequest = (LoginRequest)
>>
>> unMarshaller.unmarshal(new StringReader("<sch:LoginRequest
>>
>> xmlns:sch=\"http://kirona.com/2009/12/Concept/schema/\";>\n"+
>>
>>>> "<sch:usernameWRONG>paul</sch:usernameWRONG>\n"+
>>
>>>> "<sch:password>password</sch:password>\n"+
>>
>>>> "</sch:LoginRequest>"));
>>
>>>> System.out.println("TEST 1 OK");
>>
>>>> }
>>
>>>> catch (Exception e)
>>
>>>> {
>>
>>>> e.printStackTrace();
>>
>>>> }
>>
>>>>
>>
>>
System.out.println("\n\n****************************************************
>>
>>
>> *************\n\n");
>>
>>>> try
>>
>>>> {
>>
>>>> System.out.println("TEST 2");
>>
>>>> LoginRequest loginRequest = (LoginRequest)
>>
>> unMarshaller.unmarshal(new StringReader("<sch:LoginRequest
>>
>> xmlns:sch=\"http://kirona.com/2009/12/Concept/schema/\";>\n"+
>>
>>>> "<sch:username>paul</sch:username>\n"+
>>
>>>> "<sch:password>arsenal</sch:password>\n"+
>>
>>>> "</sch:LoginRequest>"));
>>
>>>> System.out.println("TEST 2 OK");
>>
>>>> }
>>
>>>> catch (Exception e)
>>
>>>> {
>>
>>>> e.printStackTrace();
>>
>>>> }
>>
>>>>
>>
>>
System.out.println("\n\n****************************************************
>>
>>
>> *************\n\n");
>>
>>>> }
>>
>>>>
>>
>>>>
>>
>>>>
>>
>>>>
>>
>>>> From: Paul French [mailto:[email protected]]
>>
>>>> Sent: 28 January 2010 13:11
>>
>>>> To: '[email protected]'
>>
>>>> Subject: Very Strange Problem
>>
>>>>
>>
>>>> Hello, we use Spring-WS and castor 1.3.1 for unmarshalling and
>>
>> marshalling. Spring-WS provides a class CastorMarshaller to handle the
>>
>> unmarshalling and marshalling for you. We have had to override one
>> method in
>>
>> this class since it does not support adding descriptors to the
>> XMLContext.
>>
>>>>
>>
>>>> So we have a bunch of model objects (as well as the .castor.cdr files)
>>
>> and a bunch of descriptors which are registered with the XMLContext using
>>
>> the addPackage(packageDescriptor) method
>>
>>>>
>>
>>>> When we make a call like:
>>
>>>>
>>
>>>> <soapenv:Envelope
>>
>> xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";
>>
>> xmlns:sch="http://kirona.com/2009/12/Concept/schema/";>
>>
>>>> <soapenv:Header/>
>>
>>>> <soapenv:Body>
>>
>>>> <sch:LoginRequest>
>>
>>>> <sch:username>username</sch:username>
>>
>>>> <sch:password>password</sch:password>
>>
>>>> </sch:LoginRequest>
>>
>>>> </soapenv:Body>
>>
>>>> </soapenv:Envelope>
>>
>>>>
>>
>>>> .the request is marshalled fine.
>>
>>>>
>>
>>>> If we then make a mistake in the SOAP request e.g.
>>
>>>>
>>
>>>> <soapenv:Envelope
>>
>> xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";
>>
>> xmlns:sch="http://kirona.com/2009/12/Concept/schema/";>
>>
>>>> <soapenv:Header/>
>>
>>>> <soapenv:Body>
>>
>>>> <sch:LoginRequest>
>>
>>>> <sch:usernameWRONG>xxxx</sch:usernameWRONG>
>>
>>>> <sch:password>xxxxxx</sch:password>
>>
>>>> </sch:LoginRequest>
>>
>>>> </soapenv:Body>
>>
>>>> </soapenv:Envelope>
>>
>>>>
>>
>>>> .we get the error (in the SOAP fault respone)
>>
>>>>
>>
>>>> "Castor unmarshalling exception: unable to find FieldDescriptor for
>>
>> 'usernameWRONG' in ClassDescriptor of LoginRequest; nested exception is
>>
>> org.exolab.castor.xml.MarshalException: unable to find FieldDescriptor
>> for
>>
>> 'usernameWRONG' in ClassDescriptor of LoginRequest"
>>
>>>>
>>
>>>> .which makes sense. However if I repeat the incorrect SOAP request I
>>
>> get......
>>
>>>>
>>
>>>> "Castor unmarshalling exception: The class for the root element
>>
>> 'LoginRequest' could not be found.; nested exception is
>>
>> org.exolab.castor.xml.MarshalException: The class for the root element
>>
>> 'LoginRequest' could not be found."
>>
>>>>
>>
>>>> ..it seems to no longer know what the element LoginRequest is anymore??
>>
>>>>
>>
>>>> If I correct the SOAP request it still does not work, I still get the
>>
>> previous error.
>>
>>>>
>>
>>>> I can get things to work again by re-structuring the SOAP request as
>>
>> follows (by moving the namespace declaration):
>>
>>>>
>>
>>>> <soapenv:Envelope
>>
>> xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";>
>>
>>>> <soapenv:Header/>
>>
>>>> <soapenv:Body>
>>
>>>> <sch:LoginRequest
>>
>> xmlns:sch="http://kirona.com/2009/12/Concept/schema/";>
>>
>>>> <sch:username>username</sch:username>
>>
>>>> <sch:password>password</sch:password>
>>
>>>> </sch:LoginRequest>
>>
>>>> </soapenv:Body>
>>
>>>> </soapenv:Envelope>
>>
>>>>
>>
>>>> .and from this point onwards this is the only way it will work.
>>
>>>>
>>
>>>> I know this is a bit SOAP related but it is the marshalling layer
>>>> that is
>>
>> failing. Any ideas?
>>
>>>>
>>
>>>> P
>>
>>>>
>>
>>>
>>
>>>
>>
>>> ---------------------------------------------------------------------
>>
>>> 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
>>
>>
>>
>>
>>
>>
>>
>> __________ NOD32 4815 (20100128) Information __________
>>
>>
>>
>> This message was checked by NOD32 antivirus system.
>>
>> http://www.eset.com
>>
>>
>>
>>
>>
>>
>>
>> ---------------------------------------------------------------------
>>
>> To unsubscribe from this list, please visit:
>>
>>
>>
>> http://xircles.codehaus.org/manage_email
>>
>>
>>
>>
>>
>>
>>
>> __________ NOD32 4815 (20100128) Information __________
>>
>>
>>
>> This message was checked by NOD32 antivirus system.
>>
>> http://www.eset.com
>>
>>
>>
>>
>>
>>
>>
>> ---------------------------------------------------------------------
>>
>> To unsubscribe from this list, please visit:
>>
>>
>>
>> http://xircles.codehaus.org/manage_email
>>
>>
>>
>>
>>
>>
>>
>> __________ NOD32 4817 (20100129) Information __________
>>
>>
>>
>> This message was checked by NOD32 antivirus system.
>>
>> http://www.eset.com
>>
>>
>>
>>
>
> ---------------------------------------------------------------------
> 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



__________ NOD32 4854 (20100210) Information __________

This message was checked by NOD32 antivirus system.
http://www.eset.com



---------------------------------------------------------------------
To unsubscribe from this list, please visit:

    http://xircles.codehaus.org/manage_email


Reply via email to