You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by an...@apache.org on 2012/11/06 12:02:12 UTC
svn commit: r1406093 -
/tuscany/sca-java-2.x/trunk/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/xml/WSDLModelResolver.java
Author: antelder
Date: Tue Nov 6 11:02:12 2012
New Revision: 1406093
URL: http://svn.apache.org/viewvc?rev=1406093&view=rev
Log:
TUSCANY-4072: Fix from Robin Yu for Tuscany fails to retrieve XSD type/element for nested WSDL with diff namespace(wsdl resolver issue)
Modified:
tuscany/sca-java-2.x/trunk/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/xml/WSDLModelResolver.java
Modified: tuscany/sca-java-2.x/trunk/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/xml/WSDLModelResolver.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/xml/WSDLModelResolver.java?rev=1406093&r1=1406092&r2=1406093&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/xml/WSDLModelResolver.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/xml/WSDLModelResolver.java Tue Nov 6 11:02:12 2012
@@ -22,6 +22,7 @@ package org.apache.tuscany.sca.interface
import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
+import java.net.URISyntaxException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
@@ -530,6 +531,7 @@ public class WSDLModelResolver implement
// with the URI of the top level WSDL which is set from the
// relative location of the artifact that represents the WSDL
wsdlDefinition.setURI(new URI(imp.getLocationURI()));
+ indexRead(wsdlDefinition.getLocation().toURL(), context);
resolved = resolveImports(WSDLDefinition.class, wsdlDefinition, context);
if (!resolved.isUnresolved()) {
if (resolved.getImportedDefinitions().isEmpty()) {
@@ -688,4 +690,52 @@ public class WSDLModelResolver implement
is.close();
}
}
+
+ protected Map<String, String> indexRead(URL doc, ProcessorContext context) throws IOException, XMLStreamException {
+
+ Map<String, String> wsdlImports = new HashMap<String, String>();
+ InputStream is = doc.openStream();
+ try {
+ // Set up a StreamSource for the composite file, since this has an associated URL that
+ // can be used by the parser to find references to other files such as DTDs
+ XMLInputFactory inputFactory = XMLInputFactory.newInstance();
+ StreamSource wsdlSource = new StreamSource(is, doc.toString());
+ XMLStreamReader reader = inputFactory.createXMLStreamReader(wsdlSource);
+
+ int eventType = reader.getEventType();
+ int index = 0;
+ while (true) {
+ if (eventType == XMLStreamConstants.START_ELEMENT) {
+ if (WSDLDocumentProcessor.XSD.equals(reader.getName())) {
+ String tns = reader.getAttributeValue(null, "targetNamespace");
+ XSDefinition xsd = xsdFactory.createXSDefinition();
+ xsd.setUnresolved(true);
+ xsd.setNamespace(tns);
+ try {
+ xsd.setLocation(URI.create(doc.toURI() + "#" + index));
+ } catch (URISyntaxException e) {
+ //TODO
+ e.printStackTrace();
+ }
+ index ++;
+ // The definition is marked as resolved but not loaded
+ xsd.setUnresolved(false);
+ xsd.setSchema(null);
+ if (contribution != null) {
+ contribution.getModelResolver().addModel(xsd, context);
+ }
+ }
+ }
+ if (reader.hasNext()) {
+ eventType = reader.next();
+ } else {
+ break;
+ }
+ }
+ return wsdlImports;
+ } finally {
+ is.close();
+ }
+ }
+
}