Hi,

I'm working on the artifact processing of WSDL/XSD from SCA contributions, especially for the import/include directives. I would like to share what I have so far to get your feedback.

Let's assume we have the following artifacts ([1][2]).

* helloworld-service.wsdl (definition) imports helloworld-interface.wsdl
* helloworld-interface.wsdl (inline schema) imports greeting.xsd
* greeting.xsd includes name.xsd

For the import/include, we could have different ways to use the "location" attribute for a WSDL <import>. Please note the SCA spec says the explicit location attribute should be honored. If it's not present, then we use the namespace-based resolution defined by SCA.

1. location="helloworld-interface.wsdl" (relative to the base document where the import is defined) 2. location="/wsdl/helloworld-interface.wsdl" (relative to a SCA contribution) 3. location="http://example.com/helloworld-interface.wsdl"; (absolute URL pointing to an external resource) 4. location="" or location is not present: Use the namespace to resolve the imported definition

We have two options here:

a) Plugin a tuscany-specific resolver for WSDL4J (javax.wsdl.xml.WSDLLocator) and XmlSchema (org.apache.ws.commons.schema.resolver.URIResolver).

This option can handle location case 1, 2 and 3. For 2, we probably need some context from the contribution service.

The difficulty is that both resolvers expect to take an InputSource. For location case 4 (empty or not present), we don't have a corresponding InputSource. To make WSDL4J happy, we might be able to provide a dummy InputSource pointing to a byte array which contains the empty definition (AFAIK, null InputSource won't work) and then resolve the imported definition by QName during the resolve() phase.

b) Disable the import/include resolving feature and re-link the related artifacts by Tuscany

There are two challenges:

How to disable the aggressive resolving of import/include?
How to re-link the artifacts after the fragments are loaded?

WSDL4J: We can disable the import processing by WSDL4J and then resolve the imported artifacts in the different step. Some of the elements are "undefined" and we have to navigate the WSDL4J model and resolve them. During the procedure, we can use the location as a key to constrain the scope of resolution.

XmlSchema doesn't seem to have a way to disable the aggressive resolving.

What do you guys think? Any opinions are welcome.

Thanks,
Raymond

[1] http://svn.apache.org/repos/asf/incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/test/resources/wsdl [2] http://svn.apache.org/repos/asf/incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/test/resources/xsd




---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to