[ 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