Thanks, Christopher. Looking forward to seeing that Jira issue being
created.

Regards
Werner

[EMAIL PROTECTED] wrote:
> hi
> 
> I'll open the Jira issue as requested.
> 
> My solution is pretty crude - just extract the namespace component buried 
> in the XPath (appearing inside {}) - and then proceed as before, works 
> fine for me.  This is probably OK for most cases.  the namespace 
> qualification probably should have no effect on the revised name given to 
> the class (unless we get into relatively uncommon cases where the same 
> element name appears in multiple namespaces).  
And funny enough, I have seen such questions being asked in the last 6
months or so. But as always, there's a natural limit to how far
'automatic resolution' should (and could) go. In such a case, I'd always
recommend resorting to a binding file (entry).

> You *could* include the 
> namespace definitions in the adjusted class name, but that would mean 
> extremely long class names, ...
Even longer .. ;-).

> ... and you'd need a strategy for mapping 
> 'unacceptable' characters in the namespace to valid characters in a Java 
> class name.
Which we have available.


> I'll include the code in the jira bug report.
> 
> - chris
> 
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> Chris Jobson
> Staff Software Engineer
> Sybase (UK) Limited 
> 
> Telephone number +44 (0)1628 597263
> Fax number +44 (0)1628 597319
>  
> Sybase (UK) Limited, Sybase Court, Crown Lane, Maidenhead, Berkshire SL6 
> 8QZ is a company incorporated in England & Wales under company 
> registration number 2175260. 
> 
> NOTICE:  This e-mail message and all attachments transmitted with it are 
> intended solely for the use of the addressee and may contain confidential 
> information and may be protected by the attorney-client privilege.  If the 
> reader of this message is not the intended recipient, or an employee or 
> agent responsible for delivering the message to the intended recipient, 
> you are hereby notified that any dissemination, distribution, copying or 
> other use of this communication or its attachments is strictly prohibited. 
>  If you have received this communication in error, please notify the 
> sender immediately by replying to this message and please immediately 
> delete it from your computer. 
> 
> 
> 
> Werner Guttmann <[EMAIL PROTECTED]> 
> 17/04/2008 15:46
> Please respond to
> [email protected]
> 
> 
> To
> [email protected]
> cc
> 
> Subject
> Re: [castor-user] XPATH conflict resolution issue
> 
> 
> 
> 
> 
> 
> Chris,
> 
> you have come across a bug, indeed, and I'd like to learn about the
> solution you have implemented to get you going again.
> 
> As such, can you please open a new Jira issue and attach everything I
> need to replicate the problem, i.e. XML schema, builder configuration
> (if used), binding file (if used), patch (svn diff, if possible), etc.
> 
> On the more general side of things: I think we should try to look at a
> better approach about how to analyse and deal with XPATH in Castor than
> what we currently have. I guess that with one of the GSoC projects, this
> might happen anyhow.
> 
> Regards
> Werner
> 
> [EMAIL PROTECTED] wrote:
>> hi
>>
>> I have hit an issue with using automatic name conflict resolution that I 
> 
>> wonder if anyone else has found.
>>
>> Consider the following schema
>>
>> <?xml version="1.0" encoding="UTF-8"?>
>> <xs:schema elementFormDefault="qualified"
>>
>> targetNamespace="
> http://webservices.amazon.com/AWSECommerceService/2008-04-07";
>>  xmlns:tns="http://webservices.amazon.com/AWSECommerceService/2008-04-07
> " 
>> xmlns:xs="http://www.w3.org/2001/XMLSchema";>
>>
>>     <xs:element name="ItemAttributes">
>>         <xs:complexType>
>>             <xs:sequence>
>>                 <xs:element maxOccurs="unbounded" minOccurs="0" 
>> name="Creator">
>>                     <xs:complexType>
>>                         <xs:simpleContent>
>>                             <xs:extension base="xs:string">
>>                                 <xs:attribute name="Role"
>>                                     type="xs:string" use="required"/>
>>                             </xs:extension>
>>                         </xs:simpleContent>
>>                     </xs:complexType>
>>                 </xs:element>
>>             </xs:sequence>
>>         </xs:complexType>
>>     </xs:element>
>>
>>     <xs:element name="MerchantItemAttributes">
>>         <xs:complexType>
>>             <xs:sequence>
>>                 <xs:element maxOccurs="unbounded" minOccurs="0" 
>> name="Creator">
>>                     <xs:complexType>
>>                         <xs:simpleContent>
>>                             <xs:extension base="xs:string">
>>                                 <xs:attribute name="Role"
>>                                     type="xs:string" use="required"/>
>>                             </xs:extension>
>>                         </xs:simpleContent>
>>                     </xs:complexType>
>>                 </xs:element>
>>             </xs:sequence>
>>         </xs:complexType>
>>     </xs:element>
>>
>>
>> </xs:schema>
>>
>> It's actually part of the schema from an Amazon Web Services WSDL. 
> Notice 
>> the duplicate 'Creator' elements - one in each of ItemAttributes and 
>> MerchantItemAttributes.
>>
>> When I run codegen with name conflict resolution (set to xpath or type), 
> I 
>> get
>>
>> 16-Apr-2008 11:17:27 org.exolab.castor.builder.JClassRegistry bind
>> INFO: Resolving conflict for local element 
>>
> /MerchantItemAttributes{http://webservices.amazon.com/AWSECommerceService/2008-04-07}/Creator[/MerchantItemAttributes
>> {http://webservices.amazon.com/AWSECommerceService/2008-04-07}/Creator] 
>> against another local element of the same name.
>> java.lang.IllegalArgumentException: 
>> 'WebservicesAmazonComAWSECommerceService20080407}CreatorDescriptor' is 
> not 
>> a valid Java identifier.
>>         at org.exolab.javasource.JStructure.<init>(JStructure.java:121)
>>         at 
>> org.exolab.javasource.AbstractJClass.<init>(AbstractJClass.java:54)
>>         at org.exolab.javasource.JClass.<init>(JClass.java:70)
>>         at 
>>
> org.exolab.castor.builder.descriptors.DescriptorJClass.<init>(DescriptorJClass.java:102)
>>         at 
>>
> org.exolab.castor.builder.descriptors.DescriptorSourceFactory.createSource(DescriptorSourceFactory.java:121)
>>         etc.etc.
>>
>> If you then see what files it has generated, you see this :
>>
>> Creator.java
>> WebservicesAmazonComAWSECommerceService20080407}Creator.java
>>
>> It has correctly detected the conflict, but attempted to create a Java 
>> class with a bad classname. Clearly the logic in 
>> XPATHClassNameConflictResolver.java is not working quite as intended.
>>
>> Has this been reported before?  I couldn't see any reference to this 
>> issue,but I would have thought it not that unusual a situation.
>>
>> The problem seems to be in XPATHClassNameConflictResolver.java, when it 
>> tries to 'parse' the Xpath it is presented with.  It fails to handle the 
> 
>> Xpath of this form:
>>
>>
> /MerchantItemAttributes{http://webservices.amazon.com/AWSECommerceService/2008-04-07}/Creator
>> (I have debugged the code and that's the exact string that is 
> presented). 
>> Looking at the code logic, I guess this is because of the way the method 
> 
>> calculateXPathPrefix uses StringTokenizer to split on './' and thus gets 
> 
>> confused by the / inside the url in the {} section (the namespace 
>> associated with the Xpath component MerchantItemAttrubutes).
>>
>> I have 'hacked' this by patching the caclulateXPathPrefix method to 
> first 
>> strip out {} sections and generating an XPath Prefix on the remaining 
>> XPath,  So in the above case, I fixup the XPath to look like
>>
>> /MerchantItemAttributes/Creator
>>
>> and proceed from there. That fixes up my problem.
>>
>> Is this the correct solution?  I am happy to provide my fix to 
>> XPATHClassNameConflictResolver.java if others think this is the correct 
>> approach. or whether the problem should be resolved by a different 
>> approach altogether.
>>
>> thanks
>>
>> chris
> 
> 
> ---------------------------------------------------------------------
> 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


Reply via email to