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