[ 
https://issues.apache.org/jira/browse/TUSCANY-2465?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12611677#action_12611677
 ] 

Simon Nash commented on TUSCANY-2465:
-------------------------------------

The problem is caused by multiple calls to the 
JAXBDataBinding.getXMLTypeHelper() method returning different instance objects, 
which show up as different entries in the helpers map in 
Interface2WSDLGenerator.  There are also separate lists of DataTypes created by 
getDataTypes()/addDataType() for different databinding names of the same helper 
type.

I think the simplest fix is
1. Change JAXBDataBinding to return a singleton instance of JAXBTypeHelper 
instead of always creating a new instance.
2. In Interface2WSDLGenerator, ensure that the map of databinding names to 
XMLTypeHelper instances reuses the same instance for different names where 
possible.  This should happen automatically as a result of change 1.
3. Index the map of DataType lists that's returned by getDataTypes() by helper 
instance rather than by the databinding name.

> J2W Interface2WSDLGenerator should only call SchemaBuilder once per TNS
> -----------------------------------------------------------------------
>
>                 Key: TUSCANY-2465
>                 URL: https://issues.apache.org/jira/browse/TUSCANY-2465
>             Project: Tuscany
>          Issue Type: Bug
>          Components: Java SCA Data Binding Runtime
>         Environment: Roughly SCA Java 1.3
>            Reporter: Scott Kurz
>
> When trying the equivalent of the itest/databindings/jaxb-bottom-up test with 
> a newer version of XMLSchema (newer than the 1.3.2 version Tuscany depends 
> on), I hit an error 
> org.apache.ws.commons.schema.XmlSchemaException: Schema name conflict in 
> collection. Namespace: http://jaxb.dev.java.net/array
>       at 
> org.apache.ws.commons.schema.SchemaBuilder.handleXmlSchemaElement(SchemaBuilder.java:104)
>       at 
> org.apache.ws.commons.schema.SchemaBuilder.build(SchemaBuilder.java:83)
>       at 
> org.apache.ws.commons.schema.XmlSchemaCollection.read(XmlSchemaCollection.java:424)
>       at 
> org.apache.ws.commons.schema.XmlSchemaCollection.read(XmlSchemaCollection.java:418)
>       at 
> org.apache.tuscany.sca.interfacedef.wsdl.interface2wsdl.Interface2WSDLGenerator.loadXSD(Interface2WSDLGenerator.java:354)
>       at 
> org.apache.tuscany.sca.interfacedef.wsdl.interface2wsdl.Interface2WSDLGenerator.addSchemaExtension(Interface2WSDLGenerator.java:336)
>       at 
> org.apache.tuscany.sca.interfacedef.wsdl.interface2wsdl.Interface2WSDLGenerator.generate(Interface2WSDLGenerator.java:213)
> The problem lies in Interface2WSDLGenerator.generate(), with this excerpt:
>         for (Map.Entry<String, List<DataType>> en: getDataTypes(interfaze, 
> false).entrySet()) {
>             XMLTypeHelper helper = helpers.get(en.getKey());
>             if (helper == null) {
>                 continue;
>             }
>             List<XSDefinition> xsDefinitions = 
> helper.getSchemaDefinitions(xsdFactory, resolver, en.getValue());
>             for (XSDefinition xsDef: xsDefinitions) {
>                 addSchemaExtension(xsDef, schemaCollection, wsdlDefinition, 
> definition);
>             }
>         }
> The getDataTypes(interfaze,false) does its introspection of the DataType(s) 
> and returns a pair of Map.Entry(s).  One has key:  simpleType, and one has 
> key: complexType.    For each of these keys, the call to 
> helpers.get(en.getKey()) returns the JAXTypeHelper, and each results into 
> addSchemaExtension() which in turn calls loadXSD() which I showed in the 
> stack trace.   And the problem is each call involves an XMLSchema def with 
> the same TNS, http://jaxb.dev.java.net/array.
> Somehow we need to reduce this to one call to SchemaBuilder or we'll break 
> this test when we upgrade our XMLSchema dependency.   (Not sure what if 
> anything is broken on this level of XMLSchema since the 2nd call ends up as a 
> no-op).

-- 
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