[ 
https://issues.apache.org/jira/browse/AXIS2-4071?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12749848#action_12749848
 ] 

Boris Milanov commented on AXIS2-4071:
--------------------------------------

Hi,

We are also experiencing problems with the duplicate elements.
Is there any chance that this JIRA will be fixed soon?

> WSDL11ToAxisServiceBuilder + RPC/Literal OR HTTP binding =~ Inconsistent 
> XMLSchema object: duplicated global element declarations
> ---------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: AXIS2-4071
>                 URL: https://issues.apache.org/jira/browse/AXIS2-4071
>             Project: Axis 2.0 (Axis2)
>          Issue Type: Bug
>          Components: kernel
>    Affects Versions: 1.4, nightly
>         Environment: Windows XP. 4GB RAM Intel Xeon dual-core @2.75Ghz
>            Reporter: Antonio Andrade
>         Attachments: AXIS2-4071.patch, JUnit Tests - Before.jpg
>
>   Original Estimate: 72h
>  Remaining Estimate: 72h
>
> In WSDL11ToAxisServiceBuilder:
>   1) Within the 'setup()' method, a map ('schemaMap') indexed by 
> targetNamespace and values equal root (W3C) Elements is populated
>   2) When either a RPC/Literal binding or an HTTP binding with message parts 
> referencing type definitions is found, new global element declarations based 
> on the WSDL operation name are created. These new elements can either be 
> added to an existing (W3C) Document (in case the 'schemMap'  contains a 
> document with the same target namespace as the one that the newly created 
> element has) or added to a newly created Document.:
>     a) If a new document is created, an additional namespace mapping 
> declaration is added to that document (see 'XMLNS_AXIS2WRAPPED' ). This helps 
> distinguishing this document among the other original ones.
>     b) If an additional document is NOT created, the new global element 
> declarations are added to an existing document. No additional namespace 
> mapping declaration is added.
>   3) After all wrapped elements have been created,  XmlSchema objects are 
> created from the original, modified and newly created W3C Documents
> Note that all this leads to duplicate global element declarations any time 
> there's already an element named after an operation name. This is very common 
> and happens every time operation names across multiple bindings are the same. 
>  In general, all this is caused by the creation of XML schema elements while 
> transforming operations using the RPC/Literal encoding style into the 
> Document/Literal encoding style using the wrapped convention.
> There is more than one problem associated with the creation of new XML global 
> element declarations:
>   1) First of all, the XML schema documents end up with duplicated global 
> element declarations which makes the Schema invalid. But why nobody seems to 
> have noticed it? I think it's just a coincidence, let me explain: A XmlSchema 
> object maintains a MAP, indexed by element name (QName) and XmlSchemaElement 
> objects as values. This map is used for a faster object retrieval. At the 
> same time, the XmlSchema object also maintains a LIST of all nodes 
> (XmlSchemaObject objects I think). So whenever duplicate elements are added 
> to the schema, the last-inserted elements overwrite the previous elements on 
> the MAP of elements but they are inserted with no problems in the LIST of 
> nodes and because the latter elements are usually what people is looking for 
> (i.e. in case of databinding libraries that create the client stub for a 
> single port), the 'correct' element is returned
>   2) If the Definition object (from WSDL4J) is used to populate multiple 
> AxisServices from different WSDL ports, for example, within the 
> 'WSDL11ToAllAxisServicesBuilder' (which, by the way doesn't seem to work at 
> all), the W3C Schema Document may end up with multiple duplicated global 
> element declarations and the 'AxisService.getSchemaElement(QName)' method 
> will fail to return the appropriate reference.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to