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();
+         }
+     }
+
 }