Author: slaws
Date: Thu Sep 1 10:27:50 2011
New Revision: 1163988
URL: http://svn.apache.org/viewvc?rev=1163988&view=rev
Log:
TUSCANY-3916 - Turn remote interface match back on with a couple of
restrictions. Only the top level WSDL is shared and dependent XSD is not. I've
added guards for the case where parameter types cannot be converted to WSDL. If
interface information is insufficient to run the match the interfaces are
assumed to be compatible and matching is left until runtime. Having struggled
with the WSDL based approach I'm going to look at serializing the internal
Tuscany model.
Modified:
tuscany/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/RuntimeEndpointImpl.java
tuscany/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/WSDLHelper.java
tuscany/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/impl/EndpointReferenceBinderImpl.java
Modified:
tuscany/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/RuntimeEndpointImpl.java
URL:
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/RuntimeEndpointImpl.java?rev=1163988&r1=1163987&r2=1163988&view=diff
==============================================================================
---
tuscany/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/RuntimeEndpointImpl.java
(original)
+++
tuscany/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/RuntimeEndpointImpl.java
Thu Sep 1 10:27:50 2011
@@ -1021,11 +1021,10 @@ public class RuntimeEndpointImpl extends
public void readExternal(ObjectInput in) throws IOException,
ClassNotFoundException {
this.uri = in.readUTF();
- this.xml = in.readUTF();
-/*
+ this.xml = in.readUTF();
this.wsdl = in.readUTF();
this.wsdlCallback = in.readUTF();
-*/
+
}
public void writeExternal(ObjectOutput out) throws IOException {
@@ -1039,8 +1038,7 @@ public class RuntimeEndpointImpl extends
throw new IllegalStateException("No serializer is configured");
}
}
-
-/*
+
if (wsdl == null) {
wsdl = getWsdl();
}
@@ -1049,8 +1047,7 @@ public class RuntimeEndpointImpl extends
if (wsdlCallback == null) {
wsdlCallback = getWsdlCallback();
}
- out.writeUTF(wsdlCallback);
-*/
+ out.writeUTF(wsdlCallback);
}
public String getAsXML() {
@@ -1065,7 +1062,16 @@ public class RuntimeEndpointImpl extends
if (ic == null || ic.getInterface() == null ||
!ic.getInterface().isRemotable()) {
return "";
}
- WSDLInterfaceContract wsdlIC =
(WSDLInterfaceContract)getGeneratedWSDLContract(ic);
+
+ WSDLInterfaceContract wsdlIC = null;
+ try {
+ wsdlIC = (WSDLInterfaceContract)getGeneratedWSDLContract(ic);
+ } catch (Exception ex){
+ // ignore WSDL generation errors as the service interface may have
+ // types that can't be converted to XML easily
+ return "";
+ }
+
if (wsdlIC == null) {
return "";
}
@@ -1091,7 +1097,16 @@ public class RuntimeEndpointImpl extends
if (ic == null || ic.getCallbackInterface() == null ||
!ic.getCallbackInterface().isRemotable()) {
return "";
}
- WSDLInterfaceContract wsdlIC =
(WSDLInterfaceContract)getGeneratedWSDLContract(ic);
+
+ WSDLInterfaceContract wsdlIC = null;
+ try {
+ wsdlIC = (WSDLInterfaceContract)getGeneratedWSDLContract(ic);
+ } catch (Exception ex){
+ // ignore WSDL generation errors as the service interface may have
+ // types that can't be converted to XML easily
+ return "";
+ }
+
if (wsdlIC == null) {
return "";
}
@@ -1139,13 +1154,16 @@ public class RuntimeEndpointImpl extends
outStream.write(separator);
writer.writeWSDL(importedWSDLDefintion.getDefinition(), outStream);
}
+/* Exclude the XSD for the time being to see if we can get comparison working
+ * with the operation signatures but ignoring parameter types
for (XSDefinition xsdDefinition : wsdlDefinition.getXmlSchemas()){
// we store a reference to the schema schema. We don't need to
write that out.
if
(!xsdDefinition.getNamespace().equals("http://www.w3.org/2001/XMLSchema") &&
xsdDefinition.getSchema() != null){
writeSchema(outStream, xsdDefinition.getSchema());
}
- }
+ }
+*/
}
/**
Modified:
tuscany/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/WSDLHelper.java
URL:
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/WSDLHelper.java?rev=1163988&r1=1163987&r2=1163988&view=diff
==============================================================================
---
tuscany/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/WSDLHelper.java
(original)
+++
tuscany/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/WSDLHelper.java
Thu Sep 1 10:27:50 2011
@@ -40,6 +40,9 @@ import javax.wsdl.Definition;
import javax.wsdl.PortType;
import javax.wsdl.Types;
import javax.wsdl.WSDLException;
+import javax.wsdl.extensions.ExtensibilityElement;
+import javax.wsdl.extensions.UnknownExtensibilityElement;
+import javax.wsdl.extensions.schema.Schema;
import javax.wsdl.xml.WSDLLocator;
import javax.wsdl.xml.WSDLReader;
@@ -63,6 +66,8 @@ import org.apache.tuscany.sca.xsd.xml.XS
import org.apache.ws.commons.schema.XmlSchema;
import org.apache.ws.commons.schema.XmlSchemaCollection;
import org.apache.ws.commons.schema.resolver.DefaultURIResolver;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
import org.xml.sax.InputSource;
public class WSDLHelper {
@@ -295,17 +300,38 @@ public class WSDLHelper {
// extract any in-line types in the Tuscany model
Types types = wsdlDefinition.getDefinition().getTypes();
- if ( types != null){
+ if ( types != null){
+/* read XSD from WSDL rather than from registry
for (int i=0; i <
types.getExtensibilityElements().size(); i++){
+
String schemaName = xmlString.getBaseURI() + "#" +
i++;
XSDInfo xsdInfo =
(XSDInfo)xmlMap.get(getFilenameWithoutPath(schemaName));
if (xsdInfo != null){
wsdlDefinition.getXmlSchemas().add(xsdInfo.getXsdDefinition());
}
+*/
+ int index = 0;
+ for (Object ext : types.getExtensibilityElements()) {
+ ExtensibilityElement extElement =
(ExtensibilityElement)ext;
+ Element element = null;
+ if (extElement instanceof Schema) {
+ element = ((Schema)extElement).getElement();
+ }
+ if (element != null) {
+ XSDefinition xsDefinition =
xsdFactory.createXSDefinition();
+ xsDefinition.setUnresolved(true);
+
xsDefinition.setNamespace(element.getAttribute("targetNamespace"));
+
xsDefinition.setDocument(element.getOwnerDocument());
+ XmlSchema schema =
schemaCollection.read(element, null);
+ xsDefinition.setSchema(schema);
+
xsDefinition.setLocation(URI.create(xmlString.getBaseURI() + "#" + index));
+
wsdlDefinition.getXmlSchemas().add(xsDefinition);
+ index++;
+ }
}
}
} else {
- // Schema should already be linked via the schema model
+ // TODO
}
}
@@ -484,5 +510,5 @@ public class WSDLHelper {
return filename.substring(wsdlIndex + 1);
}
// What happens with generated WSDL?
- }
+ }
}
Modified:
tuscany/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/impl/EndpointReferenceBinderImpl.java
URL:
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/impl/EndpointReferenceBinderImpl.java?rev=1163988&r1=1163987&r2=1163988&view=diff
==============================================================================
---
tuscany/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/impl/EndpointReferenceBinderImpl.java
(original)
+++
tuscany/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/impl/EndpointReferenceBinderImpl.java
Thu Sep 1 10:27:50 2011
@@ -969,11 +969,25 @@ public class EndpointReferenceBinderImpl
return true;
}
+/* For testing this code turns off remote interface matching completely
if (endpoint.isRemote()){
matchAudit.append("Match because endpoint is remote");
matchAudit.appendSeperator();
return true;
}
+*/
+
+ // If the remote interface was not retrieved successfully from the
registry for whatever reason
+ // then assume the interfaces match and leave the checking until
runtime. We looking for an interface
+ // with no operations defined to tell us this.
+ if ((endpointContract.getInterface().getOperations().size() == 0 &&
+ endpointContract.getNormalizedWSDLContract() == null) ||
+ (endpointContract.getNormalizedWSDLContract() != null &&
+
endpointContract.getNormalizedWSDLContract().getInterface().getOperations().size()
== 0)){
+ matchAudit.append("Match because the endpoint is remote and we
don't have a copy of it's interface contract ");
+ matchAudit.appendSeperator();
+ return true;
+ }
// If the contracts are not of the same type use normailized interfaces
if (endpointReferenceContract.getClass() !=
endpointContract.getClass() ||