summaryrefslogtreecommitdiffstats
path: root/sca-java-2.x/trunk/modules
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--sca-java-2.x/trunk/modules/binding-ws-wsdlgen/META-INF/MANIFEST.MF1
-rw-r--r--sca-java-2.x/trunk/modules/binding-ws-wsdlgen/src/main/java/org/apache/tuscany/sca/binding/ws/wsdlgen/WebServiceBindingBuilder.java45
-rw-r--r--sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/impl/EndpointReferenceBinderImpl.java5
-rw-r--r--sca-java-2.x/trunk/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/RequiresExt.java56
-rw-r--r--sca-java-2.x/trunk/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/impl/WSDLInterfaceIntrospectorImpl.java21
-rw-r--r--sca-java-2.x/trunk/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/xml/PolicyExtensionHandler.java119
-rw-r--r--sca-java-2.x/trunk/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/xml/WSDLModelResolver.java8
7 files changed, 252 insertions, 3 deletions
diff --git a/sca-java-2.x/trunk/modules/binding-ws-wsdlgen/META-INF/MANIFEST.MF b/sca-java-2.x/trunk/modules/binding-ws-wsdlgen/META-INF/MANIFEST.MF
index c71dfdb8d8..43f305bcae 100644
--- a/sca-java-2.x/trunk/modules/binding-ws-wsdlgen/META-INF/MANIFEST.MF
+++ b/sca-java-2.x/trunk/modules/binding-ws-wsdlgen/META-INF/MANIFEST.MF
@@ -38,6 +38,7 @@ Import-Package: javax.jws;resolution:=optional,
org.apache.tuscany.sca.contribution;version="2.0.0";resolution:=optional,
org.apache.tuscany.sca.contribution.resolver;version="2.0.0",
org.apache.tuscany.sca.core;version="2.0.0",
+ org.apache.tuscany.sca.definitions;version="2.0.0",
org.apache.tuscany.sca.databinding;version="2.0.0",
org.apache.tuscany.sca.databinding.jaxb;version="2.0.0",
org.apache.tuscany.sca.interfacedef;version="2.0.0",
diff --git a/sca-java-2.x/trunk/modules/binding-ws-wsdlgen/src/main/java/org/apache/tuscany/sca/binding/ws/wsdlgen/WebServiceBindingBuilder.java b/sca-java-2.x/trunk/modules/binding-ws-wsdlgen/src/main/java/org/apache/tuscany/sca/binding/ws/wsdlgen/WebServiceBindingBuilder.java
index 2b24df92d2..08f8ce7cf4 100644
--- a/sca-java-2.x/trunk/modules/binding-ws-wsdlgen/src/main/java/org/apache/tuscany/sca/binding/ws/wsdlgen/WebServiceBindingBuilder.java
+++ b/sca-java-2.x/trunk/modules/binding-ws-wsdlgen/src/main/java/org/apache/tuscany/sca/binding/ws/wsdlgen/WebServiceBindingBuilder.java
@@ -27,6 +27,12 @@ import org.apache.tuscany.sca.assembly.builder.BindingBuilder;
import org.apache.tuscany.sca.assembly.builder.BuilderContext;
import org.apache.tuscany.sca.binding.ws.WebServiceBinding;
import org.apache.tuscany.sca.core.ExtensionPointRegistry;
+import org.apache.tuscany.sca.core.FactoryExtensionPoint;
+import org.apache.tuscany.sca.definitions.Definitions;
+import org.apache.tuscany.sca.policy.BindingType;
+import org.apache.tuscany.sca.policy.Intent;
+import org.apache.tuscany.sca.policy.PolicyFactory;
+import org.apache.tuscany.sca.policy.PolicySubject;
/**
* A factory for the calculated WSDL document needed by Web Service bindings.
@@ -52,7 +58,46 @@ public class WebServiceBindingBuilder implements BindingBuilder<WebServiceBindin
binding.setBindingInterfaceContract(null);
binding.setGeneratedWSDLDocument(null);
}
+
BindingWSDLGenerator.generateWSDL(component, contract, binding, extensionPoints, context.getMonitor());
+
+ /*
+ * Set the default mayProvides intent provided by the binding. For example,
+ * It mayProvides SOAP.v1_1 and SOAP.v1_2. If you don't specify any intents
+ * it implements SOAP.v1_1 by default and hence the default intent
+ * is SOAP.v1_1. Binding.ws doesn't allwaysProvide SOAP.v1_1 though as if the
+ * user specifies the SOAP.v1_2 the binding does SOAP.v1_2 instead of SOAP.v1_1
+ */
+ boolean addDefaultSOAPIntent = true;
+
+ for(Intent intent : ((PolicySubject)binding).getRequiredIntents()){
+ if (intent.getName().getLocalPart().equals("SOAP.v1_1")){
+ addDefaultSOAPIntent = false;
+ break;
+ }
+ if (intent.getName().getLocalPart().equals("SOAP.v1_2")){
+ addDefaultSOAPIntent = false;
+ break;
+ }
+ }
+
+ if (addDefaultSOAPIntent){
+ Definitions systemDefinitions = context.getDefinitions();
+ if (systemDefinitions != null){
+ BindingType bindingType = systemDefinitions.getBindingType(binding.getType());
+ Intent defaultIntent = null;
+ for (Intent intent : bindingType.getMayProvidedIntents()){
+ if (intent.getName().getLocalPart().equals("SOAP.v1_1")){
+ defaultIntent = intent;
+ }
+ }
+
+ if (defaultIntent != null){
+ ((PolicySubject)binding).getRequiredIntents().add(0, defaultIntent);
+ }
+ }
+ }
+
}
public QName getBindingType() {
diff --git a/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/impl/EndpointReferenceBinderImpl.java b/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/impl/EndpointReferenceBinderImpl.java
index ea8d7aba9c..b0be5cb3e8 100644
--- a/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/impl/EndpointReferenceBinderImpl.java
+++ b/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/impl/EndpointReferenceBinderImpl.java
@@ -822,7 +822,7 @@ public class EndpointReferenceBinderImpl implements EndpointReferenceBinder {
}
// TUSCANY-3959 - something that's not explicitly stated in the spec. mayProvides intents don't
- // don't lead to policy sets as the binding natively implements the intent. So
+ // lead to policy sets as the binding natively implements the intent. So
// we need to check that these intents match explicitly between reference and service
// sides
if (eprMayProvideInterationIntents.size() > 0){
@@ -838,8 +838,7 @@ public class EndpointReferenceBinderImpl implements EndpointReferenceBinder {
if (!match){
matchAudit.append("No match because the reference has a mayProvide intent that the service doesn't have " + eprIntent.getName());
matchAudit.appendSeperator();
- // Causing POL 4031 to fail
- //return false;
+ return false;
}
}
}
diff --git a/sca-java-2.x/trunk/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/RequiresExt.java b/sca-java-2.x/trunk/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/RequiresExt.java
new file mode 100644
index 0000000000..e72aa98420
--- /dev/null
+++ b/sca-java-2.x/trunk/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/RequiresExt.java
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tuscany.sca.interfacedef.wsdl;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.wsdl.extensions.ExtensibilityElement;
+import javax.xml.namespace.QName;
+
+/**
+ * A class to serve as the extensibility element for policy requires elements
+ */
+public class RequiresExt implements ExtensibilityElement {
+
+ private QName elementType = null;
+ private List<QName> intents = new ArrayList<QName>();
+
+ // -- methods required by the Extensibility Element interface
+ public QName getElementType() {
+ return elementType;
+ }
+
+ public Boolean getRequired() {
+ return true;
+ }
+
+ public void setElementType(QName theName ) {
+ elementType = theName;
+ }
+
+ public void setRequired(Boolean required) {
+ // intentionally left blank
+ }
+
+ // -- other methods
+ public List<QName> getIntents(){
+ return intents;
+ }
+}
diff --git a/sca-java-2.x/trunk/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/impl/WSDLInterfaceIntrospectorImpl.java b/sca-java-2.x/trunk/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/impl/WSDLInterfaceIntrospectorImpl.java
index dd19407abe..642aa81179 100644
--- a/sca-java-2.x/trunk/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/impl/WSDLInterfaceIntrospectorImpl.java
+++ b/sca-java-2.x/trunk/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/impl/WSDLInterfaceIntrospectorImpl.java
@@ -25,11 +25,14 @@ import java.util.List;
import java.util.Vector;
import javax.wsdl.PortType;
+import javax.wsdl.extensions.ExtensibilityElement;
+import javax.wsdl.extensions.UnknownExtensibilityElement;
import javax.xml.namespace.QName;
import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
import org.apache.tuscany.sca.core.FactoryExtensionPoint;
import org.apache.tuscany.sca.interfacedef.Operation;
+import org.apache.tuscany.sca.interfacedef.wsdl.RequiresExt;
import org.apache.tuscany.sca.interfacedef.wsdl.WSDLDefinition;
import org.apache.tuscany.sca.interfacedef.wsdl.WSDLFactory;
import org.apache.tuscany.sca.interfacedef.wsdl.WSDLInterface;
@@ -38,6 +41,7 @@ import org.apache.tuscany.sca.monitor.Monitor;
import org.apache.tuscany.sca.policy.Intent;
import org.apache.tuscany.sca.policy.PolicyFactory;
import org.apache.tuscany.sca.xsd.XSDFactory;
+import org.w3c.dom.Element;
/**
* Introspector for creating WSDLInterface definitions from WSDL PortTypes.
@@ -108,6 +112,8 @@ public class WSDLInterfaceIntrospectorImpl {
} // end method processCallbackAttribute
private void processIntents(WSDLInterface wsdlInterface, PortType portType) {
+
+ // process @requires attribute
Object o;
try {
o = portType.getExtensionAttribute(POLICY_REQUIRES);
@@ -128,7 +134,22 @@ public class WSDLInterfaceIntrospectorImpl {
wsdlInterface.getRequiredIntents().add(intent);
}
+ }
+
+ // process <sca:requires/> element
+ for(Object object : portType.getExtensibilityElements()){
+ ExtensibilityElement element = (ExtensibilityElement)object;
+ if (element.getElementType().equals(POLICY_REQUIRES)){
+ RequiresExt requires = ((RequiresExt)element);
+
+ for (QName intentName : requires.getIntents()){
+ Intent intent = policyFactory.createIntent();
+ intent.setName(intentName);
+
+ wsdlInterface.getRequiredIntents().add(intent);
+ }
+ }
}
}
diff --git a/sca-java-2.x/trunk/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/xml/PolicyExtensionHandler.java b/sca-java-2.x/trunk/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/xml/PolicyExtensionHandler.java
new file mode 100644
index 0000000000..937be6a57f
--- /dev/null
+++ b/sca-java-2.x/trunk/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/xml/PolicyExtensionHandler.java
@@ -0,0 +1,119 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tuscany.sca.interfacedef.wsdl.xml;
+
+import java.io.PrintWriter;
+
+import javax.wsdl.Definition;
+import javax.wsdl.WSDLException;
+import javax.wsdl.extensions.ExtensibilityElement;
+import javax.wsdl.extensions.ExtensionDeserializer;
+import javax.wsdl.extensions.ExtensionRegistry;
+import javax.wsdl.extensions.ExtensionSerializer;
+import javax.xml.namespace.QName;
+
+import org.apache.tuscany.sca.interfacedef.wsdl.RequiresExt;
+import org.w3c.dom.Element;
+
+/**
+ * A WSDL extension processor for extension policy elements of the form:
+ *
+ * <sca:requires intents="sca:SOAP.v1_1"/>
+ *
+ */
+public class PolicyExtensionHandler implements ExtensionSerializer, ExtensionDeserializer {
+
+ /**
+ * Marshals the requires extension element to XML
+ * See (@link javax.wsdl.extensions.ExtensionSerializer)
+ */
+ @SuppressWarnings("unchecked")
+ public void marshall(Class parentType,
+ QName elementType,
+ ExtensibilityElement theElement,
+ PrintWriter writer,
+ Definition def,
+ ExtensionRegistry extReg)
+ throws WSDLException {
+
+ RequiresExt requires = (RequiresExt) theElement;
+ QName theType = requires.getElementType();
+
+ writer.println("<" + theType.toString() +
+ " intents=\"");
+
+ for(QName intentName : requires.getIntents()){
+ writer.println(intentName + " ");
+ }
+
+ writer.println("\">");
+ }
+
+ /**
+ * Unmarshals the requires extension element from XML
+ */
+ @SuppressWarnings("unchecked")
+ public ExtensibilityElement unmarshall(Class theClass,
+ QName elementType,
+ Element theElement,
+ Definition def,
+ ExtensionRegistry extReg)
+ throws WSDLException {
+
+ // Check that this elementType really is a requires element
+ if( !elementType.getLocalPart().equals("requires") ){
+ return null;
+ }
+
+ RequiresExt requires = new RequiresExt();
+ requires.setElementType(elementType);
+
+ String intents = theElement.getAttribute("intents");
+ String[] intentArray = intents.split(" +");
+
+ for (int i=0; i < intentArray.length; i++){
+ String intentNameString = intentArray[i];
+ QName intentQName = getQNameValue( def, intentNameString);
+ requires.getIntents().add(intentQName);
+ }
+
+ return requires;
+ }
+
+ /**
+ * Returns a QName from a string.
+ * @param definition - a WSDL Definition
+ * @param value - the String from which to form the QName in the form "pref:localName"
+ * @return
+ */
+ protected QName getQNameValue(Definition definition, String value) {
+ if (value != null && definition != null) {
+ int index = value.indexOf(':');
+ String prefix = index == -1 ? "" : value.substring(0, index);
+ String localName = index == -1 ? value : value.substring(index + 1);
+ String ns = definition.getNamespace(prefix);
+ if (ns == null) {
+ ns = "";
+ }
+ return new QName(ns, localName, prefix);
+ } else {
+ return null;
+ }
+ }
+}
diff --git a/sca-java-2.x/trunk/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/xml/WSDLModelResolver.java b/sca-java-2.x/trunk/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/xml/WSDLModelResolver.java
index fdb562b1b7..354cca8392 100644
--- a/sca-java-2.x/trunk/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/xml/WSDLModelResolver.java
+++ b/sca-java-2.x/trunk/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/xml/WSDLModelResolver.java
@@ -103,6 +103,7 @@ public class WSDLModelResolver implements ModelResolver {
// ---- SCA Policy WSDL Attachments
public static final QName Q_POLICY_ATTRIBUTE_EXTENSION = new QName("http://docs.oasis-open.org/ns/opencsa/sca/200912", "requires");
+ public static final QName Q_POLICY_ELEMENT_EXTENSION = new QName("http://docs.oasis-open.org/ns/opencsa/sca/200912", "requires");
public static final QName Q_POLICY_END_CONVERSATION_ATTRIBUTE_EXTENSION = new QName("http://docs.oasis-open.org/ns/opencsa/sca/200912", "endsConversation");
// ---- SCA Callback WSDL Extension
public static final QName Q_CALLBACK_ATTRIBUTE_EXTENSION = new QName("http://docs.oasis-open.org/ns/opencsa/sca/200912", "callback" );
@@ -134,6 +135,7 @@ public class WSDLModelResolver implements ModelResolver {
this.xsdFactory = modelFactories.getFactory(XSDFactory.class);
wsdlExtensionRegistry = this.wsdl4jFactory.newPopulatedExtensionRegistry();
+
// REVIEW: [rfeng] Disable the schema extension for WSDL4J to avoid aggressive loading
ExtensionDeserializer deserializer = new UnknownExtensionDeserializer();
ExtensionSerializer serializer = new UnknownExtensionSerializer();
@@ -141,11 +143,17 @@ public class WSDLModelResolver implements ModelResolver {
wsdlExtensionRegistry.registerSerializer(Types.class, schema, serializer);
wsdlExtensionRegistry.registerDeserializer(Types.class, schema, deserializer);
}
+
// ---- Policy WSDL Extensions
try {
wsdlExtensionRegistry.registerExtensionAttributeType(PortType.class, Q_POLICY_ATTRIBUTE_EXTENSION, AttributeExtensible.LIST_OF_QNAMES_TYPE);
wsdlExtensionRegistry.registerExtensionAttributeType(Operation.class, Q_POLICY_END_CONVERSATION_ATTRIBUTE_EXTENSION, AttributeExtensible.STRING_TYPE);
wsdlExtensionRegistry.registerExtensionAttributeType(PortType.class, Q_CALLBACK_ATTRIBUTE_EXTENSION, AttributeExtensible.QNAME_TYPE);
+
+ serializer = new PolicyExtensionHandler();
+ deserializer = new PolicyExtensionHandler();
+ wsdlExtensionRegistry.registerSerializer(PortType.class, Q_POLICY_ELEMENT_EXTENSION, serializer);
+ wsdlExtensionRegistry.registerDeserializer(PortType.class, Q_POLICY_ELEMENT_EXTENSION, deserializer);
} catch (NoSuchMethodError e) {
// That method does not exist on older WSDL4J levels
}