You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tuscany.apache.org by "Robin Yu (JIRA)" <de...@tuscany.apache.org> on 2012/11/01 06:45:12 UTC

[jira] [Commented] (TUSCANY-4072) Tuscany fails to retrieve XSD type/element for nested WSDL with diff namespace(wsdl resolver issue)

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

Robin Yu commented on TUSCANY-4072:
-----------------------------------

I have fixed this issue by changing WSDLModelResolver a little, following is my code changes:
--- WSDLModelResolver.2.java	2012-11-01 12:57:07.126258951 +0800
+++ WSDLModelResolver.2.java.new	2012-10-30 10:01:16.000000000 +0800
@@ -22,6 +22,7 @@
 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;
@@ -493,7 +494,7 @@
             reader.setExtensionRegistry(wsdlExtensionRegistry);  // use a custom registry
 
             // Collection of namespace,location for wsdl:import definition
-            Map<String, String> wsdlImports = indexRead(artifactURL);
+            Map<String, String> wsdlImports = indexRead(artifactURL, context);
             wsdlImports.putAll(wsdlDef.getWsdliLocations());
             WSDLLocatorImpl locator = new WSDLLocatorImpl(context, artifactURL, is, wsdlImports);
             Definition definition = reader.readWSDL(locator);
@@ -641,7 +642,7 @@
      * @throws IOException
      * @throws XMLStreamException
      */
-    protected Map<String, String> indexRead(URL doc) throws IOException, XMLStreamException {
+    protected Map<String, String> indexRead(URL doc, ProcessorContext context) throws IOException, XMLStreamException {
         
     	Map<String, String> wsdlImports = new HashMap<String, String>();
     	InputStream is = doc.openStream();
@@ -653,12 +654,31 @@
             XMLStreamReader reader = inputFactory.createXMLStreamReader(wsdlSource);
             
             int eventType = reader.getEventType();
+            int index = 0;
             while (true) {
                 if (eventType == XMLStreamConstants.START_ELEMENT) {
                     if (WSDL11_IMPORT.equals(reader.getName())) {
                         String ns = reader.getAttributeValue(null, "namespace");
                         String loc = reader.getAttributeValue(null, "location");
                         wsdlImports.put(ns, loc);                        
+                    } else 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()) {
@@ -667,6 +687,17 @@
                     break;
                 }
             }
+            if (index == 0) {
+            	XSDefinition xsd = xsdFactory.createXSDefinition();
+                xsd.setUnresolved(true);
+                xsd.setNamespace("http://www.w3.org/2001/XMLSchema");
+                xsd.setUnresolved(false);
+                xsd.setSchema(null);
+                if (contribution != null) {
+                	contribution.getModelResolver().removeModel(xsd, context);
+                    contribution.getModelResolver().addModel(xsd, context);
+                }
+           }
             return wsdlImports;
         } finally {
             is.close();
                
> Tuscany fails to retrieve XSD type/element for nested WSDL with diff namespace(wsdl resolver issue)
> ---------------------------------------------------------------------------------------------------
>
>                 Key: TUSCANY-4072
>                 URL: https://issues.apache.org/jira/browse/TUSCANY-4072
>             Project: Tuscany
>          Issue Type: Bug
>          Components: Java SCA Assembly Model
>    Affects Versions: Java-SCA-2.0-Beta3
>            Reporter: Robin Yu
>            Priority: Critical
>         Attachments: TUSCANY-4072.zip
>
>
> This issue is found on WAS8.5 while we used tunscany wsdl model resolver to resolve one nested WSDL(diff Namespace) case:
> org.apache.tuscany.sca.interfacedef.wsdl.impl.InvalidWSDLException: Element cannot be resolved: {http://OrderService/OrderService/importwsdl}retrieveOrder
> 	at org.apache.tuscany.sca.interfacedef.wsdl.impl.WSDLOperationIntrospectorImpl$WSDLPart.<init>(WSDLOperationIntrospectorImpl.java:276)
> 	at org.apache.tuscany.sca.interfacedef.wsdl.impl.WSDLOperationIntrospectorImpl.getMessageType(WSDLOperationIntrospectorImpl.java:194)
> 	at org.apache.tuscany.sca.interfacedef.wsdl.impl.WSDLOperationIntrospectorImpl.getInputType(WSDLOperationIntrospectorImpl.java:145)
> 	at org.apache.tuscany.sca.interfacedef.wsdl.impl.WSDLOperationIntrospectorImpl.getOperation(WSDLOperationIntrospectorImpl.java:214)
> 	at org.apache.tuscany.sca.interfacedef.wsdl.impl.WSDLInterfaceIntrospectorImpl.getOperation(WSDLInterfaceIntrospectorImpl.java:87)
> 	at org.apache.tuscany.sca.interfacedef.wsdl.impl.WSDLInterfaceIntrospectorImpl.introspectOperations(WSDLInterfaceIntrospectorImpl.java:67)
> 	at org.apache.tuscany.sca.interfacedef.wsdl.impl.WSDLInterfaceIntrospectorImpl.introspectPortType(WSDLInterfaceIntrospectorImpl.java:78)
> 	at org.apache.tuscany.sca.interfacedef.wsdl.impl.WSDLFactoryImpl.createWSDLInterface(WSDLFactoryImpl.java:56)
> 	at com.ibm.bpmsdk.scaruntime.sca.binding.jaxws.nestedwsdl.multi.inlineschemas.NestedInlineSchemasWSDLResolverTestCase.testCreateInterfaceContract(NestedInlineSchemasWSDLResolverTestCase.java:138)
> 	at com.ibm.bpmsdk.scaruntime.sca.binding.jaxws.nestedwsdl.multi.inlineschemas.NestedInlineSchemasWSDLResolverTestCase.testNestedWSDLMultiInlineSchemasParsing(NestedInlineSchemasWSDLResolverTestCase.java:124)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
> 	at java.lang.reflect.Method.invoke(Method.java:611)
> 	at junit.framework.TestCase.runTest(TestCase.java:168)
> 	at junit.framework.TestCase.runBare(TestCase.java:134)
> 	at junit.framework.TestResult$1.protect(TestResult.java:110)
> 	at junit.framework.TestResult.runProtected(TestResult.java:128)
> 	at junit.framework.TestResult.run(TestResult.java:113)
> 	at junit.framework.TestCase.run(TestCase.java:124)
> 	at junit.framework.TestSuite.runTest(TestSuite.java:232)
> 	at junit.framework.TestSuite.run(TestSuite.java:227)
> 	at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:79)
> 	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:46)
> 	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
> 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
> 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
> 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
> 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira