[
https://issues.apache.org/jira/browse/TUSCANY-2465?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12612358#action_12612358
]
Scott Kurz commented on TUSCANY-2465:
-------------------------------------
Simon,
I don't understand the purpose of every line in this generator, but after
looking at this some more...
It seems the issue with my test was simply that a Java intf method referenced
types which mapped to schema defs in the same TNS as the TNS of the wrapper
elems.
I forget exactly where but I think we define the wrapper DataType(s) within the
TNS mapped to by the package of the Java interface, so if one of our
input/output/fault types defines an entry in that same TNS, we will do the
loadXSD() twice.
I'll attach a quick patch to show this in trace/debug....
> 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
> Assignee: Raymond Feng
> Fix For: Java-SCA-1.3
>
>
> 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.