summaryrefslogtreecommitdiffstats
path: root/sca-java-2.x/trunk/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca
diff options
context:
space:
mode:
Diffstat (limited to '')
-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
4 files changed, 204 insertions, 0 deletions
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
}