Add initial BPEL REST extension activities bundle and related tests
Project: http://git-wip-us.apache.org/repos/asf/ode/repo Commit: http://git-wip-us.apache.org/repos/asf/ode/commit/f6ab51fe Tree: http://git-wip-us.apache.org/repos/asf/ode/tree/f6ab51fe Diff: http://git-wip-us.apache.org/repos/asf/ode/diff/f6ab51fe Branch: refs/heads/master Commit: f6ab51fe357258aa8ab4bfc65c35252e2d10bf5f Parents: b31d36a Author: hahnml <[email protected]> Authored: Fri Jan 12 16:27:31 2018 +0100 Committer: hahnml <[email protected]> Committed: Mon Jan 15 13:15:32 2018 +0100 ---------------------------------------------------------------------- Rakefile | 14 +- .../Bpel4RestLightExtensionBundle.java | 50 ++++ .../bpel4restlight/Bpel4RestLightOperation.java | 101 +++++++ .../bpel4restlight/Bpel4RestLightUtil.java | 295 +++++++++++++++++++ .../bpel4restlight/MethodAttribute.java | 31 ++ .../bpel4restlight/http/HighLevelRestApi.java | 196 ++++++++++++ .../bpel4restlight/http/HttpMethod.java | 28 ++ .../http/HttpResponseMessage.java | 62 ++++ .../bpel4restlight/http/LowLevelRestApi.java | 91 ++++++ .../ode/test/RestExtensionActivitiesTest.java | 269 +++++++++++++++++ .../TestPostExtActWithWrongURL.bpel | 100 +++++++ .../TestPostExtActWithWrongURL.wsdl | 73 +++++ .../2.0/TestPostExtActWithWrongURL/deploy.xml | 30 ++ .../2.0/TestPostExtActWithWrongURL/restApi.xsd | 19 ++ .../TestRestDeleteExtAct.bpel | 89 ++++++ .../TestRestDeleteExtAct.wsdl | 73 +++++ .../bpel/2.0/TestRestDeleteExtAct/deploy.xml | 30 ++ .../bpel/2.0/TestRestDeleteExtAct/restApi.xsd | 12 + .../2.0/TestRestDeleteExtAct/test.properties | 23 ++ .../TestRestExtActComplexTypeVar.bpel | 90 ++++++ .../TestRestExtActComplexTypeVar.wsdl | 73 +++++ .../2.0/TestRestExtActComplexTypeVar/deploy.xml | 30 ++ .../test.properties | 23 ++ .../TestRestExtActStatusCode.bpel | 90 ++++++ .../TestRestExtActStatusCode.wsdl | 73 +++++ .../2.0/TestRestExtActStatusCode/deploy.xml | 30 ++ .../2.0/TestRestExtActStatusCode/restApi.xsd | 12 + .../TestRestExtActStatusCode/test.properties | 23 ++ .../TestRestGetExtAct/TestRestGetExtAct.bpel | 84 ++++++ .../TestRestGetExtAct/TestRestGetExtAct.wsdl | 73 +++++ .../bpel/2.0/TestRestGetExtAct/deploy.xml | 30 ++ .../bpel/2.0/TestRestGetExtAct/test.properties | 23 ++ .../TestRestPostExtAct/TestRestPostExtAct.bpel | 100 +++++++ .../TestRestPostExtAct/TestRestPostExtAct.wsdl | 73 +++++ .../bpel/2.0/TestRestPostExtAct/deploy.xml | 30 ++ .../bpel/2.0/TestRestPostExtAct/restApi.xsd | 19 ++ .../bpel/2.0/TestRestPostExtAct/test.properties | 23 ++ .../TestRestPostExtAct2/TestRestPostExtAct.bpel | 94 ++++++ .../TestRestPostExtAct2/TestRestPostExtAct.wsdl | 73 +++++ .../bpel/2.0/TestRestPostExtAct2/deploy.xml | 30 ++ .../bpel/2.0/TestRestPostExtAct2/restApi.xsd | 19 ++ .../2.0/TestRestPostExtAct2/test.properties | 23 ++ .../TestRestPutExtAct/TestRestPutExtAct.bpel | 100 +++++++ .../TestRestPutExtAct/TestRestPutExtAct.wsdl | 73 +++++ .../bpel/2.0/TestRestPutExtAct/deploy.xml | 30 ++ .../bpel/2.0/TestRestPutExtAct/restApi.xsd | 19 ++ .../bpel/2.0/TestRestPutExtAct/test.properties | 23 ++ 47 files changed, 2965 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ode/blob/f6ab51fe/Rakefile ---------------------------------------------------------------------- diff --git a/Rakefile b/Rakefile index 3ae6838..fab841a 100644 --- a/Rakefile +++ b/Rakefile @@ -102,7 +102,7 @@ define "ode" do libs = projects("axis2", "bpel-api", "bpel-compiler", "bpel-connector", "bpel-dao", "bpel-epr", "bpel-nobj", "bpel-obj", "bpel-ql", "bpel-runtime", "scheduler-simple", "bpel-schemas", "bpel-store", "dao-hibernate", "jca-ra", "jca-server", - "utils", "dao-jpa", "agents", "clustering"), + "utils", "dao-jpa", "agents", "clustering", "bpel-rest-extensions"), AXIS2_ALL, ANNONGEN, BACKPORT, COMMONS.codec, COMMONS.collections, COMMONS.fileupload, COMMONS.io, COMMONS.httpclient, COMMONS.beanutils, COMMONS.lang, COMMONS.pool, DERBY, DERBY_TOOLS, JACOB, JAXEN, JAVAX.activation, JAVAX.ejb, JAVAX.javamail, JAVAX.connector, JAVAX.jms, JAVAX.persistence, JAVAX.transaction, JAVAX.stream, JIBX, @@ -323,7 +323,7 @@ define "ode" do SPRING_TEST, COMMONS.codec, SLF4J, LOG4J2 test.using :properties=>{ "org.apache.ode.autoRetireProcess"=>"true" } - test.with projects("bpel-nobj", "bpel-obj", "bpel-schemas", "bpel-scripts"), + test.with projects("bpel-nobj", "bpel-obj", "bpel-schemas", "bpel-scripts", "bpel-rest-extensions"), COMMONS.collections, COMMONS.lang, DERBY, JACOB, JAVAX.connector, JAVAX.stream, JAVAX.transaction, JAVAX.connector, JAXEN, HSQLDB, SAXON, XERCES, XMLBEANS, XALAN, GERONIMO.transaction, SPRING, HIBERNATE, DOM4J, H2::REQUIRES, JACKSON @@ -514,7 +514,7 @@ define "ode" do # libs = artifacts(package(:jar), # projects("bpel-api", "bpel-api-jca", "bpel-compiler", "bpel-connector", "bpel-dao", # "bpel-epr", "jca-ra", "jca-server", "bpel-nobj", "bpel-ql", "bpel-runtime", -# "scheduler-simple", "bpel-schemas", "bpel-store", "dao-hibernate", "dao-jpa", "utils", "agents"), +# "scheduler-simple", "bpel-schemas", "bpel-store", "dao-hibernate", "dao-jpa", "utils", "agents", "bpel-rest-extensions"), # ANT, AXIOM, BACKPORT, COMMONS.codec, COMMONS.collections, COMMONS.dbcp, COMMONS.lang, COMMONS.pool, # COMMONS.primitives, DERBY, GERONIMO.connector, GERONIMO.transaction, JACOB, JAVAX.connector, # JAVAX.ejb, JAVAX.jms, JAVAX.persistence, JAVAX.stream, JAVAX.transaction, JAXEN, OPENJPA, @@ -647,7 +647,7 @@ define "ode" do # define "jbi-bundle" do # ode_libs = artifacts(projects("bpel-api", "bpel-api-jca", "bpel-compiler", "bpel-connector", "bpel-dao", "bpel-epr", # "jca-ra", "jca-server", "bpel-nobj", "bpel-obj", "bpel-ql", "bpel-runtime", "scheduler-simple", -# "bpel-schemas", "bpel-store", "dao-hibernate", "dao-jpa", "utils", "agents")) +# "bpel-schemas", "bpel-store", "dao-hibernate", "dao-jpa", "utils", "agents", "bpel-rest-extensions")) # libs = artifacts(ANT, AXIOM, BACKPORT, COMMONS.codec, COMMONS.collections, COMMONS.dbcp, COMMONS.lang, COMMONS.pool, # COMMONS.primitives, COMMONS.io, DERBY, GERONIMO.connector, GERONIMO.transaction, JACOB, JAVAX.connector, # JAVAX.ejb, JAVAX.jms, JAVAX.persistence, JAVAX.stream, JAVAX.transaction, JAXEN, LOG4J2, OPENJPA, @@ -718,6 +718,12 @@ define "ode" do package(:jar).with :manifest=>_("src/main/resources/META-INF/MANIFEST.MF") end + desc "BPEL REST Extensions" + define "bpel-rest-extensions" do + compile.with projects("bpel-api", "bpel-nobj", "bpel-runtime", "utils"), COMMONS.codec, COMMONS.httpclient, SLF4J, LOG4J2 + package :jar + end + # sources and javadocs of jbi-karaf-examples are packaged separately. # package_with_sources :except => ["jbi-karaf-examples:helloworld2-osgi", "jbi-karaf-examples:ping-pong-osgi"] # package_with_javadoc :except => ["jbi-karaf-examples:helloworld2-osgi", "jbi-karaf-examples:ping-pong-osgi"] unless ENV["JAVADOC"] =~ /^(no|off|false|skip)$/i http://git-wip-us.apache.org/repos/asf/ode/blob/f6ab51fe/bpel-rest-extensions/src/main/java/org/apache/ode/bpel/extension/bpel4restlight/Bpel4RestLightExtensionBundle.java ---------------------------------------------------------------------- diff --git a/bpel-rest-extensions/src/main/java/org/apache/ode/bpel/extension/bpel4restlight/Bpel4RestLightExtensionBundle.java b/bpel-rest-extensions/src/main/java/org/apache/ode/bpel/extension/bpel4restlight/Bpel4RestLightExtensionBundle.java new file mode 100644 index 0000000..32b5e61 --- /dev/null +++ b/bpel-rest-extensions/src/main/java/org/apache/ode/bpel/extension/bpel4restlight/Bpel4RestLightExtensionBundle.java @@ -0,0 +1,50 @@ +/* + * 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.ode.bpel.extension.bpel4restlight; + +import javax.xml.namespace.QName; + +import org.apache.ode.bpel.eapi.AbstractExtensionBundle; +import org.apache.ode.utils.Namespaces; + +/** + * Extension bundle for basic REST operation support in BPEL. + * + * @author Michael Hahn ([email protected]) + * + */ +public class Bpel4RestLightExtensionBundle extends AbstractExtensionBundle { + + public static final String NAMESPACE = "http://www.apache.org/ode/bpel/extensions/bpel4restlight"; + + public static final QName FAULT_QNAME = new QName(Namespaces.ODE_EXTENSION_NS, "bpel4RestExtensions"); + + @Override + public String getNamespaceURI() { + return NAMESPACE; + } + + @Override + public void registerExtensionActivities() { + super.registerExtensionOperation("PUT", Bpel4RestLightOperation.class); + super.registerExtensionOperation("GET", Bpel4RestLightOperation.class); + super.registerExtensionOperation("POST", Bpel4RestLightOperation.class); + super.registerExtensionOperation("DELETE", Bpel4RestLightOperation.class); + } +} http://git-wip-us.apache.org/repos/asf/ode/blob/f6ab51fe/bpel-rest-extensions/src/main/java/org/apache/ode/bpel/extension/bpel4restlight/Bpel4RestLightOperation.java ---------------------------------------------------------------------- diff --git a/bpel-rest-extensions/src/main/java/org/apache/ode/bpel/extension/bpel4restlight/Bpel4RestLightOperation.java b/bpel-rest-extensions/src/main/java/org/apache/ode/bpel/extension/bpel4restlight/Bpel4RestLightOperation.java new file mode 100644 index 0000000..3506435 --- /dev/null +++ b/bpel-rest-extensions/src/main/java/org/apache/ode/bpel/extension/bpel4restlight/Bpel4RestLightOperation.java @@ -0,0 +1,101 @@ +/* + * 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.ode.bpel.extension.bpel4restlight; + +import org.apache.ode.bpel.common.FaultException; +import org.apache.ode.bpel.eapi.ExtensionContext; +import org.apache.ode.bpel.eapi.ExtensionOperation; +import org.apache.ode.bpel.extension.bpel4restlight.http.HighLevelRestApi; +import org.apache.ode.bpel.extension.bpel4restlight.http.HttpMethod; +import org.apache.ode.bpel.extension.bpel4restlight.http.HttpResponseMessage; +import org.w3c.dom.Element; + +/** + * + * This class provides the implementation of the four typical REST operations + * GET, PUT, POST and DELETE through corresponding BPEL extension activities + * ({@link Bpel4RestLightExtensionBundle}). + * + * @author Michael Hahn ([email protected]) + * + */ +public class Bpel4RestLightOperation implements ExtensionOperation { + + public void run(ExtensionContext context, Element element) throws FaultException { + String httpMethod = element.getLocalName(); + + // Extract requestUri + String requestUri = Bpel4RestLightUtil.getMethodAttributeValue(context, element, MethodAttribute.REQUEST_URI); + + HttpResponseMessage responseMessage = null; + + // Execute corresponding HttpMethod via the HighLevelRestApi + switch (HttpMethod.valueOf(httpMethod)) { + + case PUT: { + String requestPayload = Bpel4RestLightUtil.extractRequestPayload(context, element); + String acceptHeader = Bpel4RestLightUtil.extractAcceptHeader(context, element); + responseMessage = HighLevelRestApi.Put(requestUri, requestPayload, acceptHeader); + break; + } + + case POST: { + String requestPayload = Bpel4RestLightUtil.extractRequestPayload(context, element); + String acceptHeader = Bpel4RestLightUtil.extractAcceptHeader(context, element); + responseMessage = HighLevelRestApi.Post(requestUri, requestPayload, acceptHeader); + break; + } + + case GET: { + String acceptHeader = Bpel4RestLightUtil.extractAcceptHeader(context, element); + responseMessage = HighLevelRestApi.Get(requestUri, acceptHeader); + break; + } + + case DELETE: { + String acceptHeader = Bpel4RestLightUtil.extractAcceptHeader(context, element); + responseMessage = HighLevelRestApi.Delete(requestUri, acceptHeader); + break; + } + default: + break; + } + + processResponseMessage(responseMessage, context, element); + } + + private void processResponseMessage(HttpResponseMessage responseMessage, ExtensionContext context, Element element) + throws FaultException { + // Write responsePayload to designated variable + String responsePayloadVariableName = Bpel4RestLightUtil.getMethodAttributeValue(context, element, + MethodAttribute.RESPONSE_PAYLOAD_VARIABLE); + String statusCodeVariableName = Bpel4RestLightUtil.getMethodAttributeValue(context, element, + MethodAttribute.STATUS_CODE_VARIABLE); + + + if (responsePayloadVariableName != null && !responsePayloadVariableName.isEmpty()) { + Bpel4RestLightUtil.writeResponsePayload(context, responseMessage.getResponseBody(), + responsePayloadVariableName); + } + + if (statusCodeVariableName != null && !statusCodeVariableName.isEmpty()) { + Bpel4RestLightUtil.writeResponsePayload(context, responseMessage.getStatusCode(), statusCodeVariableName); + } + } +} http://git-wip-us.apache.org/repos/asf/ode/blob/f6ab51fe/bpel-rest-extensions/src/main/java/org/apache/ode/bpel/extension/bpel4restlight/Bpel4RestLightUtil.java ---------------------------------------------------------------------- diff --git a/bpel-rest-extensions/src/main/java/org/apache/ode/bpel/extension/bpel4restlight/Bpel4RestLightUtil.java b/bpel-rest-extensions/src/main/java/org/apache/ode/bpel/extension/bpel4restlight/Bpel4RestLightUtil.java new file mode 100644 index 0000000..37c3386 --- /dev/null +++ b/bpel-rest-extensions/src/main/java/org/apache/ode/bpel/extension/bpel4restlight/Bpel4RestLightUtil.java @@ -0,0 +1,295 @@ +/* + * 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.ode.bpel.extension.bpel4restlight; + +import java.io.IOException; + +import org.apache.ode.bpel.common.FaultException; +import org.apache.ode.bpel.eapi.ExtensionContext; +import org.apache.ode.bpel.obj.OScope; +import org.apache.ode.bpel.obj.OScope.Variable; +import org.apache.ode.bpel.obj.OVarType; +import org.apache.ode.bpel.obj.OXsdTypeVarType; +import org.apache.ode.utils.DOMUtils; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.xml.sax.SAXException; + +/** + * This class provides some utility methods for the BPEL REST extension + * activities. + * + * @author Michael Hahn ([email protected]) + * + */ +public class Bpel4RestLightUtil { + + private static final String VARIABLE_VALUE_REFERENCE = "$bpelvar["; + + /** + * This method extracts the request message payload from the provided extension + * activity. This request payload is either provided through a specified BPEL + * variable ('request' attribute) or statically defined within the process model + * as the child node of the extension activity. + * + * @param context + * The extension context required to resolve variable values + * @param element + * The extension activity DOM element containing the request payload + * @return The request message payload + * + * @throws FaultException + */ + public static String extractRequestPayload(ExtensionContext context, Element element) throws FaultException { + String requestPayload = null; + + String requestPayloadVariableName = getMethodAttributeValue(context, element, + MethodAttribute.REQUEST_PAYLOAD_VARIABLE); + + // Check if a reference to a variable is specified + if (requestPayloadVariableName != null && !requestPayloadVariableName.isEmpty()) { + // Get the request variable value + Node requestVariableNode = context.readVariable(requestPayloadVariableName); + + // Check if the specified variable provides data + if (requestVariableNode != null) { + requestPayload = variableData2String(requestVariableNode); + } + } + + // If no variable was specified or the variable doesn't provide data, we check + // if a static request payload is specified as the child element of the + // extension activity + if (requestPayload == null) { + Node request = DOMUtils.findChildByType(element, Node.ELEMENT_NODE); + + if (request != null) { + requestPayload = DOMUtils.domToString(request); + } + } + + if (requestPayload == null) { + throw new FaultException(Bpel4RestLightExtensionBundle.FAULT_QNAME, + "REST extension activity does not specify any request payload."); + } + + return requestPayload; + } + + /** + * This method writes the response payload to a specified BPEL variable. + * + * @param context + * The extension context required to resolve a variable and write a + * new value to it + * @param responsePayload + * The payload of the response which will be written to the specified + * variable + * @param processVariableName + * The name of the variable to write to + * @throws FaultException + */ + public static void writeResponsePayload(ExtensionContext context, Object responsePayload, + String processVariableName) throws FaultException { + if (responsePayload != null && !responsePayload.toString().isEmpty()) { + OScope.Variable bpelVariable = context.getVisibleVariables().get(processVariableName); + + // Create a new instance of the variables' type, to see if we need a wrapper + Document doc = DOMUtils.newDocument(); + Node val = bpelVariable.getType().newInstance(doc); + + // Check if we need a temporary simple type wrapper + if (val.getNodeType() == Node.TEXT_NODE) { + // Create a wrapper element and add the response payload as text node + Element tempwrapper = doc.createElementNS(null, "temporary-simple-type-wrapper"); + doc.appendChild(tempwrapper); + tempwrapper.appendChild(val); + + // Set the response payload + val.setTextContent(responsePayload.toString()); + + // Return the wrapper element + val = tempwrapper; + } else { + // Convert the structured XML response payload to DOM + try { + val = DOMUtils.stringToDOM(responsePayload.toString()); + } catch (SAXException e) { + throw new FaultException(Bpel4RestLightExtensionBundle.FAULT_QNAME, + "BPEL4REST: Writing the response payload to BPEL variable '" + processVariableName + + "' caused an exception: " + e.getMessage(), + e); + } catch (IOException e) { + throw new FaultException(Bpel4RestLightExtensionBundle.FAULT_QNAME, + "BPEL4REST: Writing the response payload to BPEL variable '" + processVariableName + + "' caused an exception: " + e.getMessage(), + e); + } + } + + // Write the variable value + context.writeVariable(bpelVariable, val); + } + } + + public static String extractAcceptHeader(ExtensionContext context, Element element) throws FaultException { + return getMethodAttributeValue(context, element, MethodAttribute.ACCEPT_HEADER); + } + + /** + * This method extracts special predefined attributes (see + * {@link MethodAttribute}) from an extension activity. Therefore, references to + * a variable value via '$bpelVar[varName]' are also automatically resolved. + * + * @param context + * The extension context required to resolve variable values + * @param element + * The extension activity DOM element containing the attribute value + * @param methodAttribute + * Attribute whose content has to be returned + * @return The value of the attribute + * @throws FaultException + */ + public static String getMethodAttributeValue(ExtensionContext context, Element element, + MethodAttribute methodAttribute) throws FaultException { + + String result = ""; + + switch (methodAttribute) { + + case REQUEST_URI: + result = element.getAttribute("uri"); + + if (result == null || result.isEmpty()) { + result = element.getAttribute("requestUri"); + } else { + // Resolve a possible variable value reference + result = resolveVariableValueReference(context, result); + } + + break; + case REQUEST_PAYLOAD_VARIABLE: + result = element.getAttribute("request"); + + if (result == null || result.isEmpty()) { + result = element.getAttribute("requestPayload"); + } + break; + case RESPONSE_PAYLOAD_VARIABLE: + result = element.getAttribute("response"); + + if (result == null || result.isEmpty()) { + result = element.getAttribute("responsePayload"); + } + break; + case STATUS_CODE_VARIABLE: + result = element.getAttribute("statusCode"); + break; + case ACCEPT_HEADER: + result = element.getAttribute("accept"); + + // Resolve a possible variable value reference + if (result != null && !result.isEmpty()) { + result = resolveVariableValueReference(context, result); + } + + break; + } + + return result; + } + + /** + * Resolves references to variable values specified in an extension activity via + * '$bpelVar[varName]'. + * + * @param context + * The extension context to lookup and resolve variables and their + * values. + * @param variableValueReference + * A potential variable value reference. + * + * @return If the 'variableValueReference' parameter contains a variable value + * reference ($bpelVar[varName]), the actual value of the variable is + * returned, else the provided parameter value is returned. + * @throws FaultException + */ + public static String resolveVariableValueReference(ExtensionContext context, String variableValueReference) + throws FaultException { + String variableValue = variableValueReference; + + // Check if a concrete variable name ("varName") or a reference to the value of + // a variable + // is specified ("$bpelVar[varName]") + if (variableValueReference.startsWith(VARIABLE_VALUE_REFERENCE)) { + String variableName = variableValueReference.substring(variableValueReference.indexOf("[") + 1, + variableValueReference.indexOf("]")); + + Variable variable = context.getVisibleVariables().get(variableName); + + // We only support simple type variables, therefore the value of the variable is + // directly provided within a <temporary-simple-type-wrapper/> element. + if (variable != null && isSimpleType(variable.getType())) { + Node variableContent = context.readVariable(variableName); + + if (variableContent.getTextContent() != null) { + variableValue = variableContent.getTextContent(); + } + } else { + throw new FaultException(Bpel4RestLightExtensionBundle.FAULT_QNAME, + "References to the value of a BPEL variable using '$bpelVar[varName]' only support simple type variables."); + } + } + + return variableValue; + } + + public static String variableData2String(Node variableData) { + String result = null; + + if (variableData != null) { + if ("temporary-simple-type-wrapper".equals(variableData.getLocalName())) { + result = variableData.getTextContent(); + } else { + result = DOMUtils.domToString(variableData); + } + } + + return result; + } + + /** + * Checks if the type is a simple type or not. + * + * @param type + * to check + * + * @return True, if the type is simple, False otherwise. + */ + private static boolean isSimpleType(OVarType type) { + boolean result = false; + + if (type instanceof OXsdTypeVarType) { + result = ((OXsdTypeVarType) type).isSimple(); + } + + return result; + } +} http://git-wip-us.apache.org/repos/asf/ode/blob/f6ab51fe/bpel-rest-extensions/src/main/java/org/apache/ode/bpel/extension/bpel4restlight/MethodAttribute.java ---------------------------------------------------------------------- diff --git a/bpel-rest-extensions/src/main/java/org/apache/ode/bpel/extension/bpel4restlight/MethodAttribute.java b/bpel-rest-extensions/src/main/java/org/apache/ode/bpel/extension/bpel4restlight/MethodAttribute.java new file mode 100644 index 0000000..2b3866a --- /dev/null +++ b/bpel-rest-extensions/src/main/java/org/apache/ode/bpel/extension/bpel4restlight/MethodAttribute.java @@ -0,0 +1,31 @@ +/* + * 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.ode.bpel.extension.bpel4restlight; + +/** + * + * This enumeration is used to decouple DOM attribute names from their + * String representation within a certain library (for portability support) + * + * @author Michael Hahn ([email protected]) + * + */ +public enum MethodAttribute { + REQUEST_URI, REQUEST_PAYLOAD_VARIABLE, RESPONSE_PAYLOAD_VARIABLE, STATUS_CODE_VARIABLE, ACCEPT_HEADER; +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ode/blob/f6ab51fe/bpel-rest-extensions/src/main/java/org/apache/ode/bpel/extension/bpel4restlight/http/HighLevelRestApi.java ---------------------------------------------------------------------- diff --git a/bpel-rest-extensions/src/main/java/org/apache/ode/bpel/extension/bpel4restlight/http/HighLevelRestApi.java b/bpel-rest-extensions/src/main/java/org/apache/ode/bpel/extension/bpel4restlight/http/HighLevelRestApi.java new file mode 100644 index 0000000..2596079 --- /dev/null +++ b/bpel-rest-extensions/src/main/java/org/apache/ode/bpel/extension/bpel4restlight/http/HighLevelRestApi.java @@ -0,0 +1,196 @@ +/* + * 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.ode.bpel.extension.bpel4restlight.http; + +import java.io.UnsupportedEncodingException; + +import org.apache.commons.httpclient.HttpMethodBase; +import org.apache.commons.httpclient.NameValuePair; +import org.apache.commons.httpclient.methods.DeleteMethod; +import org.apache.commons.httpclient.methods.GetMethod; +import org.apache.commons.httpclient.methods.PostMethod; +import org.apache.commons.httpclient.methods.PutMethod; +import org.apache.commons.httpclient.methods.StringRequestEntity; +import org.apache.ode.bpel.common.FaultException; +import org.apache.ode.bpel.extension.bpel4restlight.Bpel4RestLightExtensionBundle; + +/** + * This class wraps HTTP method functionality and thereby abstracts from low + * level library-specific code to simplify its usage. + * + * @author Michael Hahn ([email protected]) + */ +public class HighLevelRestApi { + + /** + * This method implements the HTTP PUT Method + * + * @param uri + * The URI of the target resource + * @param requestPayload + * The payload of the request message + * @param acceptHeaderValue + * The value of the accept header field to be set + * @return A HttpResponseMessage providing the response message payload and + * status code. + * + * @exception FaultException + */ + public static HttpResponseMessage Put(String uri, String requestPayload, String acceptHeaderValue) + throws FaultException { + + PutMethod method = new PutMethod(uri); + + HighLevelRestApi.setAcceptHeader(method, acceptHeaderValue); + try { + method.setRequestEntity(new StringRequestEntity(requestPayload, "application/xml", "UTF-8")); + } catch (UnsupportedEncodingException e) { + throw new FaultException(Bpel4RestLightExtensionBundle.FAULT_QNAME, + "BPEL4REST: Execution of HTTP method '" + method.getName() + "' caused an exception.", e); + } + + HttpResponseMessage responseMessage = LowLevelRestApi.executeHttpMethod(method); + // Remove <?xml... in front of response + HighLevelRestApi.cleanResponseBody(responseMessage); + + return responseMessage; + } + + /** + * This method implements the HTTP POST Method + * + * @param uri + * The URI of the target resource + * @param requestPayload + * The payload of the request message + * @param acceptHeaderValue + * The value of the accept header field to be set + * @return A HttpResponseMessage providing the response message payload and + * status code. + * + * @exception FaultException + */ + public static HttpResponseMessage Post(String uri, String requestPayload, String acceptHeaderValue) + throws FaultException { + + PostMethod method = null; + if (uri.contains("?")) { + String[] split = uri.split("\\?"); + method = new PostMethod(split[0]); + method.setQueryString(HighLevelRestApi.createNameValuePairArrayFromQuery(split[1])); + } else { + method = new PostMethod(uri); + } + + try { + method.setRequestEntity(new StringRequestEntity(requestPayload, "application/xml", "UTF-8")); + } catch (UnsupportedEncodingException e) { + throw new FaultException(Bpel4RestLightExtensionBundle.FAULT_QNAME, + "BPEL4REST: Execution of HTTP method '" + method.getName() + "' caused an exception.", e); + } + + HighLevelRestApi.setAcceptHeader(method, acceptHeaderValue); + HttpResponseMessage responseMessage = LowLevelRestApi.executeHttpMethod(method); + // Remove <?xml... in front of response + HighLevelRestApi.cleanResponseBody(responseMessage); + + return responseMessage; + } + + /** + * This method implements the HTTP GET Method + * + * @param uri + * The URI of the target resource + * @param acceptHeaderValue + * The value of the accept header field to be set + * @return A HttpResponseMessage providing the response message payload and + * status code. + * + * @exception FaultException + */ + public static HttpResponseMessage Get(String uri, String acceptHeaderValue) throws FaultException { + GetMethod method = null; + if (uri.contains("?")) { + String[] split = uri.split("\\?"); + method = new GetMethod(split[0]); + method.setQueryString(HighLevelRestApi.createNameValuePairArrayFromQuery(split[1])); + } else { + method = new GetMethod(uri); + } + HighLevelRestApi.setAcceptHeader(method, acceptHeaderValue); + HttpResponseMessage responseMessage = LowLevelRestApi.executeHttpMethod(method); + HighLevelRestApi.cleanResponseBody(responseMessage); + return responseMessage; + } + + /** + * This method implements the HTTP DELETE Method + * + * @param uri + * The URI of the target resource + * @param acceptHeaderValue + * The value of the accept header field to be set + * @return A HttpResponseMessage providing the response message payload and + * status code. + * + * @exception FaultException + */ + public static HttpResponseMessage Delete(String uri, String acceptHeaderValue) throws FaultException { + + DeleteMethod method = new DeleteMethod(uri); + HighLevelRestApi.setAcceptHeader(method, acceptHeaderValue); + HttpResponseMessage responseMessage = LowLevelRestApi.executeHttpMethod(method); + HighLevelRestApi.cleanResponseBody(responseMessage); + return responseMessage; + } + + private static NameValuePair[] createNameValuePairArrayFromQuery(String query) { + // example: + // csarID=Moodle.csar&serviceTemplateID={http://www.example.com/tosca/ServiceTemplates/Moodle}Moodle&nodeTemplateID={http://www.example.com/tosca/ServiceTemplates/Moodle}VmApache + String[] pairs = query.trim().split("&"); + NameValuePair[] nameValuePairArray = new NameValuePair[pairs.length]; + int count = 0; + for (String pair : pairs) { + String[] keyValue = pair.split("="); + NameValuePair nameValuePair = new NameValuePair(); + nameValuePair.setName(keyValue[0]); + nameValuePair.setValue(keyValue[1]); + nameValuePairArray[count] = nameValuePair; + count++; + } + return nameValuePairArray; + } + + private static void setAcceptHeader(HttpMethodBase method, String value) { + if (!value.equals("")) { + method.setRequestHeader("Accept", value); + } else { + method.setRequestHeader("Accept", "application/xml"); + } + } + + private static void cleanResponseBody(HttpResponseMessage responseMessage) { + if (responseMessage.getResponseBody() != null) { + String temp = responseMessage.getResponseBody() + .replace("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>", ""); + responseMessage.setResponseBody(temp); + } + } +} http://git-wip-us.apache.org/repos/asf/ode/blob/f6ab51fe/bpel-rest-extensions/src/main/java/org/apache/ode/bpel/extension/bpel4restlight/http/HttpMethod.java ---------------------------------------------------------------------- diff --git a/bpel-rest-extensions/src/main/java/org/apache/ode/bpel/extension/bpel4restlight/http/HttpMethod.java b/bpel-rest-extensions/src/main/java/org/apache/ode/bpel/extension/bpel4restlight/http/HttpMethod.java new file mode 100644 index 0000000..650d095 --- /dev/null +++ b/bpel-rest-extensions/src/main/java/org/apache/ode/bpel/extension/bpel4restlight/http/HttpMethod.java @@ -0,0 +1,28 @@ +/* + * 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.ode.bpel.extension.bpel4restlight.http; + +/** + * This enumeration is intended to simplify identifying different HTTP-methods + * + * @author Michael Hahn ([email protected]) + */ +public enum HttpMethod { + PUT, POST, GET, DELETE +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ode/blob/f6ab51fe/bpel-rest-extensions/src/main/java/org/apache/ode/bpel/extension/bpel4restlight/http/HttpResponseMessage.java ---------------------------------------------------------------------- diff --git a/bpel-rest-extensions/src/main/java/org/apache/ode/bpel/extension/bpel4restlight/http/HttpResponseMessage.java b/bpel-rest-extensions/src/main/java/org/apache/ode/bpel/extension/bpel4restlight/http/HttpResponseMessage.java new file mode 100644 index 0000000..7695598 --- /dev/null +++ b/bpel-rest-extensions/src/main/java/org/apache/ode/bpel/extension/bpel4restlight/http/HttpResponseMessage.java @@ -0,0 +1,62 @@ +/* + * 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.ode.bpel.extension.bpel4restlight.http; + +/** + * This class is used to wrap information of a HTTP response message in a + * library neutral format + * + * @author Michael Hahn ([email protected]) + */ +public class HttpResponseMessage { + + private int statusCode; + private String responseBody; + + /** + * @return the statusCode + */ + public int getStatusCode() { + return this.statusCode; + } + + /** + * @param statusCode + * the statusCode to set + */ + protected void setStatusCode(int statusCode) { + this.statusCode = statusCode; + } + + /** + * @return the responseBody + */ + public String getResponseBody() { + return this.responseBody; + } + + /** + * @param responseBody + * the responseBody to set + */ + protected void setResponseBody(String responseBody) { + this.responseBody = responseBody; + } + +} http://git-wip-us.apache.org/repos/asf/ode/blob/f6ab51fe/bpel-rest-extensions/src/main/java/org/apache/ode/bpel/extension/bpel4restlight/http/LowLevelRestApi.java ---------------------------------------------------------------------- diff --git a/bpel-rest-extensions/src/main/java/org/apache/ode/bpel/extension/bpel4restlight/http/LowLevelRestApi.java b/bpel-rest-extensions/src/main/java/org/apache/ode/bpel/extension/bpel4restlight/http/LowLevelRestApi.java new file mode 100644 index 0000000..474d5ed --- /dev/null +++ b/bpel-rest-extensions/src/main/java/org/apache/ode/bpel/extension/bpel4restlight/http/LowLevelRestApi.java @@ -0,0 +1,91 @@ +/* + * 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.ode.bpel.extension.bpel4restlight.http; + +import java.io.IOException; + +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.HttpException; +import org.apache.commons.httpclient.HttpMethod; +import org.apache.ode.bpel.common.FaultException; +import org.apache.ode.bpel.extension.bpel4restlight.Bpel4RestLightExtensionBundle; + +/** + * This class eases HTTP method execution by providing fault handling and + * automated response information processing + * + * @author Michael Hahn ([email protected]) + */ +public class LowLevelRestApi { + + // HttpClient used for communication + private static HttpClient httpClient = new HttpClient(); + + /** + * Executes a passed HttpMethod (method type is either PUT, POST, GET or DELETE) + * and returns a HttpResponseMessage + * + * @param method + * Method to execute + * @return HttpResponseMessage which contains all information about the + * execution + */ + public static HttpResponseMessage executeHttpMethod(HttpMethod method) throws FaultException { + + HttpResponseMessage responseMessage = null; + + try { + // Execute Request + LowLevelRestApi.httpClient.executeMethod(method); + + responseMessage = LowLevelRestApi.extractResponseInformation(method); + } catch (HttpException e) { + throw new FaultException(Bpel4RestLightExtensionBundle.FAULT_QNAME, + "BPEL4REST: Execution of HTTP method '" + method.getName() + "' caused an exception: " + e.getMessage(), e); + } catch (IOException e) { + throw new FaultException(Bpel4RestLightExtensionBundle.FAULT_QNAME, + "BPEL4REST: Execution of HTTP method '" + method.getName() + "' caused an exception: " + e.getMessage(), e); + } finally { + // Release connection + method.releaseConnection(); + } + + // Extract response information and return + return responseMessage; + } + + /** + * Extracts the response information from an executed HttpMethod + * + * @param method + * The HTTP method + * @return The extracted response information + * @throws IOException + */ + private static HttpResponseMessage extractResponseInformation(HttpMethod method) throws IOException { + // Create and return HttpResponseMethod + HttpResponseMessage responseMessage = new HttpResponseMessage(); + + responseMessage.setStatusCode(method.getStatusCode()); + responseMessage.setResponseBody(method.getResponseBodyAsString()); + + return responseMessage; + } + +} http://git-wip-us.apache.org/repos/asf/ode/blob/f6ab51fe/bpel-test/src/test/java/org/apache/ode/test/RestExtensionActivitiesTest.java ---------------------------------------------------------------------- diff --git a/bpel-test/src/test/java/org/apache/ode/test/RestExtensionActivitiesTest.java b/bpel-test/src/test/java/org/apache/ode/test/RestExtensionActivitiesTest.java new file mode 100644 index 0000000..e300260 --- /dev/null +++ b/bpel-test/src/test/java/org/apache/ode/test/RestExtensionActivitiesTest.java @@ -0,0 +1,269 @@ +/* + * 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.ode.test; + +import java.io.IOException; +import java.net.HttpURLConnection; +import java.net.InetSocketAddress; + +import javax.xml.namespace.QName; + +import org.apache.commons.io.IOUtils; +import org.apache.ode.bpel.common.FaultException; +import org.apache.ode.bpel.extension.bpel4restlight.Bpel4RestLightExtensionBundle; +import org.apache.ode.bpel.iapi.MessageExchange; +import org.apache.ode.utils.DOMUtils; +import org.junit.Test; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.xml.sax.SAXException; + +import com.sun.net.httpserver.HttpExchange; +import com.sun.net.httpserver.HttpHandler; +import com.sun.net.httpserver.HttpServer; + +/** + * This class runs some initial test cases for the BPEL REST extension bundle + * + * @author Michael Hahn ([email protected]) + * + */ +public class RestExtensionActivitiesTest extends BPELTestAbstract { + + private HttpServer httpServer; + + private int port = 8085; + + @Override + public void setUp() throws Exception { + super.setUp(); + + // Register the extension bundle at the ODE server + _server.registerExtensionBundle(new Bpel4RestLightExtensionBundle()); + + // Start a test HTTP server for executing the REST extension activities + httpServer = HttpServer.create(new InetSocketAddress(port), 0); + + // Create handler to reply HTTP calls + httpServer.createContext("/test", new HttpHandler() { + public void handle(HttpExchange exchange) throws IOException { + handleHttpRequest(exchange); + } + }); + + httpServer.start(); + } + + /** + * Tests the "GET" REST extension activity. + * + * @throws Throwable + */ + @Test + public void testGetExtAct() throws Throwable { + go("/bpel/2.0/TestRestGetExtAct"); + } + + /** + * Tests the "POST" REST extension activity. + * + * @throws Throwable + */ + @Test + public void testPostExtAct() throws Throwable { + go("/bpel/2.0/TestRestPostExtAct"); + } + + /** + * Tests the "POST" REST extension activity with a static wrapped request + * message. + * + * @throws Throwable + */ + @Test + public void testPostExtActWithWrappedRequest() throws Throwable { + go("/bpel/2.0/TestRestPostExtAct2"); + } + + /** + * Tests the "PUT" REST extension activity. + * + * @throws Throwable + */ + @Test + public void testPutExtAct() throws Throwable { + go("/bpel/2.0/TestRestPutExtAct"); + } + + /** + * Tests the "DELETE" REST extension activity. + * + * @throws Throwable + */ + @Test + public void testDeleteExtAct() throws Throwable { + go("/bpel/2.0/TestRestDeleteExtAct"); + } + + /** + * Tests the HTTP status code variable of a REST extension activity. + * + * @throws Throwable + */ + @Test + public void testRestExtActStatusCode() throws Throwable { + go("/bpel/2.0/TestRestExtActStatusCode"); + } + + /** + * Tests a BPEL REST extension activity with complex type variables. + * + * @throws Throwable + */ + @Test + public void testRestExtActComplexTypeVar() throws Throwable { + go("/bpel/2.0/TestRestExtActComplexTypeVar"); + } + + /** + * Tests the "POST" REST extension activity with an invalid URL value message. + * + * @throws Throwable + */ + @Test + public void testPostExtActWithWrongURL() throws Throwable { + deploy("/bpel/2.0/TestPostExtActWithWrongURL"); + + Invocation inv = addInvoke("REST-POST#1", new QName("http://ode/bpel/unit-test.wsdl", "HelloService"), "hello", + "<message><TestPart>Hello</TestPart></message>", null); + inv.expectedFinalStatus = MessageExchange.Status.FAULT; + inv.expectedInvokeException = FaultException.class; + + go(); + } + + private void handleHttpRequest(HttpExchange exchange) throws IOException { + String method = exchange.getRequestMethod(); + + if (method.toUpperCase().equals("GET")) { + String response = "<service:getResponse xmlns:service=\"http://www.example.org/restApi\">\n" + + " <service:result>GET response data</service:result>\n" + + " </service:getResponse>"; + + byte[] bResponse = response.getBytes(); + + exchange.sendResponseHeaders(HttpURLConnection.HTTP_OK, bResponse.length); + exchange.getResponseBody().write(bResponse); + exchange.close(); + } else if (method.toUpperCase().equals("POST")) { + String request = IOUtils.toString(exchange.getRequestBody()); + + String requestValue = ""; + try { + Node reqNode = DOMUtils.stringToDOM(request); + + NodeList list = reqNode.getChildNodes(); + int i = 0; + while (i < list.getLength()) { + Node node = list.item(i); + if (node.getNodeType() == Node.ELEMENT_NODE && ((Element) node).getLocalName().equals("value")) { + requestValue = node.getTextContent(); + } + i++; + } + + String response = "<service:postResponse xmlns:service=\"http://www.example.org/restApi\">\n" + + " <service:result>" + requestValue + " Result</service:result>\n" + + " </service:postResponse>"; + + byte[] bResponse = response.getBytes(); + + exchange.sendResponseHeaders(HttpURLConnection.HTTP_OK, bResponse.length); + exchange.getResponseBody().write(bResponse); + } catch (SAXException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + + exchange.sendResponseHeaders(HttpURLConnection.HTTP_INTERNAL_ERROR, 0); + } + + exchange.close(); + } else if (method.toUpperCase().equals("PUT")) { + String request = IOUtils.toString(exchange.getRequestBody()); + + String requestValue = ""; + try { + Node reqNode = DOMUtils.stringToDOM(request); + + NodeList list = reqNode.getChildNodes(); + int i = 0; + while (i < list.getLength()) { + Node node = list.item(i); + if (node.getNodeType() == Node.ELEMENT_NODE && ((Element) node).getLocalName().equals("value")) { + requestValue = node.getTextContent(); + } + i++; + } + + String response = "<service:putResponse xmlns:service=\"http://www.example.org/restApi\">\n" + + " <service:result>" + requestValue + " Result</service:result>\n" + + " </service:putResponse>"; + + byte[] bResponse = response.getBytes(); + + exchange.sendResponseHeaders(HttpURLConnection.HTTP_OK, bResponse.length); + exchange.getResponseBody().write(bResponse); + } catch (SAXException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + + exchange.sendResponseHeaders(HttpURLConnection.HTTP_INTERNAL_ERROR, 0); + } + + exchange.close(); + } else if (method.toUpperCase().equals("DELETE")) { + if (exchange.getRequestURI().getPath().endsWith("/test")) { + String response = "<service:deleteResponse xmlns:service=\"http://www.example.org/restApi\">\n" + + " <service:result>DELETE Method Test</service:result>\n" + + " </service:deleteResponse>"; + + byte[] bResponse = response.getBytes(); + + exchange.sendResponseHeaders(HttpURLConnection.HTTP_OK, bResponse.length); + exchange.getResponseBody().write(bResponse); + exchange.close(); + } else { + exchange.sendResponseHeaders(HttpURLConnection.HTTP_NOT_FOUND, 0); + exchange.close(); + } + } else { + exchange.sendResponseHeaders(HttpURLConnection.HTTP_NOT_FOUND, 0); + exchange.close(); + } + } + + @Override + public void tearDown() throws Exception { + super.tearDown(); + + // Stop the server + httpServer.stop(0); + } +} http://git-wip-us.apache.org/repos/asf/ode/blob/f6ab51fe/bpel-test/src/test/resources/bpel/2.0/TestPostExtActWithWrongURL/TestPostExtActWithWrongURL.bpel ---------------------------------------------------------------------- diff --git a/bpel-test/src/test/resources/bpel/2.0/TestPostExtActWithWrongURL/TestPostExtActWithWrongURL.bpel b/bpel-test/src/test/resources/bpel/2.0/TestPostExtActWithWrongURL/TestPostExtActWithWrongURL.bpel new file mode 100644 index 0000000..da9a726 --- /dev/null +++ b/bpel-test/src/test/resources/bpel/2.0/TestPostExtActWithWrongURL/TestPostExtActWithWrongURL.bpel @@ -0,0 +1,100 @@ +<!-- + ~ 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. + --> +<process name="TestPostExtActWithWrongURL" + targetNamespace="http://ode/bpel/unit-test" + xmlns:bpws="http://docs.oasis-open.org/wsbpel/2.0/process/executable" + xmlns="http://docs.oasis-open.org/wsbpel/2.0/process/executable" + xmlns:tns="http://ode/bpel/unit-test" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:test="http://ode/bpel/unit-test.wsdl" + xmlns:service="http://www.example.org/restApi" + xmlns:bpel4RestLight="http://www.apache.org/ode/bpel/extensions/bpel4restlight" + queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath2.0" + expressionLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath2.0"> + + <import location="TestPostExtActWithWrongURL.wsdl" + namespace="http://ode/bpel/unit-test.wsdl" + importType="http://schemas.xmlsoap.org/wsdl/" /> + + <import location="restApi.xsd" + namespace="http://www.example.org/restApi" + importType="http://www.w3.org/2001/XMLSchema"/> + + <extensions> + <extension mustUnderstand="yes" namespace="http://www.apache.org/ode/bpel/extensions/bpel4restlight"/> + </extensions> + + <partnerLinks> + <partnerLink name="helloPartnerLink" + partnerLinkType="test:HelloPartnerLinkType" + myRole="me" /> + </partnerLinks> + + <variables> + <variable name="myVar" messageType="test:HelloMessage"/> + <variable name="restUrl" type="xsd:string"/> + <variable name="restRequest" element="service:postRequest"/> + <variable name="restResponse" element="service:postResponse"/> + <variable name="response" messageType="test:ResponseMessage"></variable> + </variables> + + <sequence> + <receive + name="start" + partnerLink="helloPartnerLink" + portType="test:HelloPortType" + operation="hello" + variable="myVar" + createInstance="yes"/> + + <assign name="assign1"> + <copy> + <from><literal>http://localhost:8086/test</literal></from> + <to variable="restUrl"/> + </copy> + <copy> + <from> + <literal> + <service:postRequest xmlns:service="http://www.example.org/restApi"> + <service:value>POST Method Test</service:value> + </service:postRequest> + </literal> + </from> + <to variable="restRequest"/> + </copy> + </assign> + + <extensionActivity> + <bpel4RestLight:POST accept="application/xml" request="restRequest" response="restResponse" uri="$bpelvar[restUrl]"/> + </extensionActivity> + + <assign name="assign2"> + <copy> + <from variable="restResponse"></from> + <to part="TestPart" variable="response"></to> + </copy> + </assign> + + <reply name="end" + partnerLink="helloPartnerLink" + portType="test:HelloPortType" + operation="hello" + variable="response"/> + </sequence> +</process> http://git-wip-us.apache.org/repos/asf/ode/blob/f6ab51fe/bpel-test/src/test/resources/bpel/2.0/TestPostExtActWithWrongURL/TestPostExtActWithWrongURL.wsdl ---------------------------------------------------------------------- diff --git a/bpel-test/src/test/resources/bpel/2.0/TestPostExtActWithWrongURL/TestPostExtActWithWrongURL.wsdl b/bpel-test/src/test/resources/bpel/2.0/TestPostExtActWithWrongURL/TestPostExtActWithWrongURL.wsdl new file mode 100644 index 0000000..2270a8b --- /dev/null +++ b/bpel-test/src/test/resources/bpel/2.0/TestPostExtActWithWrongURL/TestPostExtActWithWrongURL.wsdl @@ -0,0 +1,73 @@ +<?xml version="1.0" encoding="utf-8" ?> +<!-- + ~ 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. + --> + +<wsdl:definitions + targetNamespace="http://ode/bpel/unit-test.wsdl" + xmlns="http://schemas.xmlsoap.org/wsdl/" + xmlns:tns="http://ode/bpel/unit-test.wsdl" + xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" + xmlns:bpws="http://docs.oasis-open.org/wsbpel/2.0/process/executable" + xmlns:plnk="http://docs.oasis-open.org/wsbpel/2.0/plnktype"> + + <wsdl:message name="HelloMessage"> + <wsdl:part name="TestPart" type="xsd:string"/> + </wsdl:message> + + <wsdl:message name="ResponseMessage"> + <wsdl:part name="TestPart" type="xsd:anyType"/> + </wsdl:message> + + <wsdl:portType name="HelloPortType"> + <wsdl:operation name="hello"> + <wsdl:input message="tns:HelloMessage" name="TestIn"/> + <wsdl:output message="tns:ResponseMessage" name="TestOut"/> + </wsdl:operation> + </wsdl:portType> + + <wsdl:binding name="HelloSoapBinding" type="tns:HelloPortType"> + <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> + <wsdl:operation name="hello"> + <soap:operation soapAction="" style="rpc"/> + <wsdl:input> + <soap:body + namespace="http://ode/bpel/unit-test.wsdl" + use="literal"/> + </wsdl:input> + <wsdl:output> + <soap:body + namespace="http://ode/bpel/unit-test.wsdl" + use="literal"/> + </wsdl:output> + </wsdl:operation> + </wsdl:binding> + <wsdl:service name="HelloService"> + <wsdl:port name="HelloPort" binding="tns:HelloSoapBinding"> + <soap:address location="http://localhost:8080/ode/processes/helloWorld"/> + </wsdl:port> + </wsdl:service> + + <plnk:partnerLinkType name="HelloPartnerLinkType"> + <plnk:role name="me" portType="tns:HelloPortType"/> + <plnk:role name="you" portType="tns:HelloPortType"/> + </plnk:partnerLinkType> +</wsdl:definitions> + http://git-wip-us.apache.org/repos/asf/ode/blob/f6ab51fe/bpel-test/src/test/resources/bpel/2.0/TestPostExtActWithWrongURL/deploy.xml ---------------------------------------------------------------------- diff --git a/bpel-test/src/test/resources/bpel/2.0/TestPostExtActWithWrongURL/deploy.xml b/bpel-test/src/test/resources/bpel/2.0/TestPostExtActWithWrongURL/deploy.xml new file mode 100644 index 0000000..5ee5c95 --- /dev/null +++ b/bpel-test/src/test/resources/bpel/2.0/TestPostExtActWithWrongURL/deploy.xml @@ -0,0 +1,30 @@ +<!-- + ~ 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. + --> +<deploy xmlns="http://www.apache.org/ode/schemas/dd/2007/03" + xmlns:pns="http://ode/bpel/unit-test" + xmlns:wns="http://ode/bpel/unit-test.wsdl"> + + + <process name="pns:TestPostExtActWithWrongURL"> + <active>true</active> + <provide partnerLink="helloPartnerLink"> + <service name="wns:HelloService" port="HelloPort"/> + </provide> + </process> +</deploy> http://git-wip-us.apache.org/repos/asf/ode/blob/f6ab51fe/bpel-test/src/test/resources/bpel/2.0/TestPostExtActWithWrongURL/restApi.xsd ---------------------------------------------------------------------- diff --git a/bpel-test/src/test/resources/bpel/2.0/TestPostExtActWithWrongURL/restApi.xsd b/bpel-test/src/test/resources/bpel/2.0/TestPostExtActWithWrongURL/restApi.xsd new file mode 100644 index 0000000..b521dc7 --- /dev/null +++ b/bpel-test/src/test/resources/bpel/2.0/TestPostExtActWithWrongURL/restApi.xsd @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/restApi" + xmlns:tns="http://www.example.org/restApi" xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> + + <xsd:complexType name="postRequestType"> + <xsd:sequence> + <xsd:element name="value" type="xsd:string"></xsd:element> + </xsd:sequence> + </xsd:complexType> + + <xsd:complexType name="postResponseType"> + <xsd:sequence> + <xsd:element name="result" type="xsd:string"></xsd:element> + </xsd:sequence> + </xsd:complexType> + + <xsd:element name="postRequest" type="tns:postRequestType"></xsd:element> + <xsd:element name="postResponse" type="tns:postResponseType"></xsd:element> +</schema> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ode/blob/f6ab51fe/bpel-test/src/test/resources/bpel/2.0/TestRestDeleteExtAct/TestRestDeleteExtAct.bpel ---------------------------------------------------------------------- diff --git a/bpel-test/src/test/resources/bpel/2.0/TestRestDeleteExtAct/TestRestDeleteExtAct.bpel b/bpel-test/src/test/resources/bpel/2.0/TestRestDeleteExtAct/TestRestDeleteExtAct.bpel new file mode 100644 index 0000000..82a29fc --- /dev/null +++ b/bpel-test/src/test/resources/bpel/2.0/TestRestDeleteExtAct/TestRestDeleteExtAct.bpel @@ -0,0 +1,89 @@ +<!-- + ~ 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. + --> +<process name="TestRestDeleteExtAct" + targetNamespace="http://ode/bpel/unit-test" + xmlns:bpws="http://docs.oasis-open.org/wsbpel/2.0/process/executable" + xmlns="http://docs.oasis-open.org/wsbpel/2.0/process/executable" + xmlns:tns="http://ode/bpel/unit-test" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:test="http://ode/bpel/unit-test.wsdl" + xmlns:service="http://www.example.org/restApi" + xmlns:bpel4RestLight="http://www.apache.org/ode/bpel/extensions/bpel4restlight" + queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath2.0" + expressionLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath2.0"> + + <import location="TestRestDeleteExtAct.wsdl" + namespace="http://ode/bpel/unit-test.wsdl" + importType="http://schemas.xmlsoap.org/wsdl/" /> + + <import location="restApi.xsd" + namespace="http://www.example.org/restApi" + importType="http://www.w3.org/2001/XMLSchema"/> + + <extensions> + <extension mustUnderstand="yes" namespace="http://www.apache.org/ode/bpel/extensions/bpel4restlight"/> + </extensions> + + <partnerLinks> + <partnerLink name="helloPartnerLink" + partnerLinkType="test:HelloPartnerLinkType" + myRole="me" /> + </partnerLinks> + + <variables> + <variable name="myVar" messageType="test:HelloMessage"/> + <variable name="restUrl" type="xsd:string"/> + <variable name="restResponse" element="service:deleteResponse"/> + <variable name="response" messageType="test:ResponseMessage"></variable> + </variables> + + <sequence> + <receive + name="start" + partnerLink="helloPartnerLink" + portType="test:HelloPortType" + operation="hello" + variable="myVar" + createInstance="yes"/> + + <assign name="assign1"> + <copy> + <from><literal>http://localhost:8085/test</literal></from> + <to variable="restUrl"/> + </copy> + </assign> + + <extensionActivity> + <bpel4RestLight:DELETE accept="application/xml" response="restResponse" uri="$bpelvar[restUrl]"/> + </extensionActivity> + + <assign name="assign2"> + <copy> + <from variable="restResponse"></from> + <to part="TestPart" variable="response"></to> + </copy> + </assign> + + <reply name="end" + partnerLink="helloPartnerLink" + portType="test:HelloPortType" + operation="hello" + variable="response"/> + </sequence> +</process> http://git-wip-us.apache.org/repos/asf/ode/blob/f6ab51fe/bpel-test/src/test/resources/bpel/2.0/TestRestDeleteExtAct/TestRestDeleteExtAct.wsdl ---------------------------------------------------------------------- diff --git a/bpel-test/src/test/resources/bpel/2.0/TestRestDeleteExtAct/TestRestDeleteExtAct.wsdl b/bpel-test/src/test/resources/bpel/2.0/TestRestDeleteExtAct/TestRestDeleteExtAct.wsdl new file mode 100644 index 0000000..2270a8b --- /dev/null +++ b/bpel-test/src/test/resources/bpel/2.0/TestRestDeleteExtAct/TestRestDeleteExtAct.wsdl @@ -0,0 +1,73 @@ +<?xml version="1.0" encoding="utf-8" ?> +<!-- + ~ 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. + --> + +<wsdl:definitions + targetNamespace="http://ode/bpel/unit-test.wsdl" + xmlns="http://schemas.xmlsoap.org/wsdl/" + xmlns:tns="http://ode/bpel/unit-test.wsdl" + xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" + xmlns:bpws="http://docs.oasis-open.org/wsbpel/2.0/process/executable" + xmlns:plnk="http://docs.oasis-open.org/wsbpel/2.0/plnktype"> + + <wsdl:message name="HelloMessage"> + <wsdl:part name="TestPart" type="xsd:string"/> + </wsdl:message> + + <wsdl:message name="ResponseMessage"> + <wsdl:part name="TestPart" type="xsd:anyType"/> + </wsdl:message> + + <wsdl:portType name="HelloPortType"> + <wsdl:operation name="hello"> + <wsdl:input message="tns:HelloMessage" name="TestIn"/> + <wsdl:output message="tns:ResponseMessage" name="TestOut"/> + </wsdl:operation> + </wsdl:portType> + + <wsdl:binding name="HelloSoapBinding" type="tns:HelloPortType"> + <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> + <wsdl:operation name="hello"> + <soap:operation soapAction="" style="rpc"/> + <wsdl:input> + <soap:body + namespace="http://ode/bpel/unit-test.wsdl" + use="literal"/> + </wsdl:input> + <wsdl:output> + <soap:body + namespace="http://ode/bpel/unit-test.wsdl" + use="literal"/> + </wsdl:output> + </wsdl:operation> + </wsdl:binding> + <wsdl:service name="HelloService"> + <wsdl:port name="HelloPort" binding="tns:HelloSoapBinding"> + <soap:address location="http://localhost:8080/ode/processes/helloWorld"/> + </wsdl:port> + </wsdl:service> + + <plnk:partnerLinkType name="HelloPartnerLinkType"> + <plnk:role name="me" portType="tns:HelloPortType"/> + <plnk:role name="you" portType="tns:HelloPortType"/> + </plnk:partnerLinkType> +</wsdl:definitions> + http://git-wip-us.apache.org/repos/asf/ode/blob/f6ab51fe/bpel-test/src/test/resources/bpel/2.0/TestRestDeleteExtAct/deploy.xml ---------------------------------------------------------------------- diff --git a/bpel-test/src/test/resources/bpel/2.0/TestRestDeleteExtAct/deploy.xml b/bpel-test/src/test/resources/bpel/2.0/TestRestDeleteExtAct/deploy.xml new file mode 100644 index 0000000..46d55f8 --- /dev/null +++ b/bpel-test/src/test/resources/bpel/2.0/TestRestDeleteExtAct/deploy.xml @@ -0,0 +1,30 @@ +<!-- + ~ 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. + --> +<deploy xmlns="http://www.apache.org/ode/schemas/dd/2007/03" + xmlns:pns="http://ode/bpel/unit-test" + xmlns:wns="http://ode/bpel/unit-test.wsdl"> + + + <process name="pns:TestRestDeleteExtAct"> + <active>true</active> + <provide partnerLink="helloPartnerLink"> + <service name="wns:HelloService" port="HelloPort"/> + </provide> + </process> +</deploy> http://git-wip-us.apache.org/repos/asf/ode/blob/f6ab51fe/bpel-test/src/test/resources/bpel/2.0/TestRestDeleteExtAct/restApi.xsd ---------------------------------------------------------------------- diff --git a/bpel-test/src/test/resources/bpel/2.0/TestRestDeleteExtAct/restApi.xsd b/bpel-test/src/test/resources/bpel/2.0/TestRestDeleteExtAct/restApi.xsd new file mode 100644 index 0000000..7aa878b --- /dev/null +++ b/bpel-test/src/test/resources/bpel/2.0/TestRestDeleteExtAct/restApi.xsd @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> +<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/restApi" + xmlns:tns="http://www.example.org/restApi" xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> + + <xsd:complexType name="deleteResponseType"> + <xsd:sequence> + <xsd:element name="result" type="xsd:string"></xsd:element> + </xsd:sequence> + </xsd:complexType> + + <xsd:element name="deleteResponse" type="tns:deleteResponseType"></xsd:element> +</schema> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ode/blob/f6ab51fe/bpel-test/src/test/resources/bpel/2.0/TestRestDeleteExtAct/test.properties ---------------------------------------------------------------------- diff --git a/bpel-test/src/test/resources/bpel/2.0/TestRestDeleteExtAct/test.properties b/bpel-test/src/test/resources/bpel/2.0/TestRestDeleteExtAct/test.properties new file mode 100644 index 0000000..9e9d8fe --- /dev/null +++ b/bpel-test/src/test/resources/bpel/2.0/TestRestDeleteExtAct/test.properties @@ -0,0 +1,23 @@ +# +# 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. +# + +namespace=http://ode/bpel/unit-test.wsdl +service=HelloService +operation=hello +request1=<message><TestPart>Hello</TestPart></message> +response1=.*DELETE Method Test.* + http://git-wip-us.apache.org/repos/asf/ode/blob/f6ab51fe/bpel-test/src/test/resources/bpel/2.0/TestRestExtActComplexTypeVar/TestRestExtActComplexTypeVar.bpel ---------------------------------------------------------------------- diff --git a/bpel-test/src/test/resources/bpel/2.0/TestRestExtActComplexTypeVar/TestRestExtActComplexTypeVar.bpel b/bpel-test/src/test/resources/bpel/2.0/TestRestExtActComplexTypeVar/TestRestExtActComplexTypeVar.bpel new file mode 100644 index 0000000..73ee1a9 --- /dev/null +++ b/bpel-test/src/test/resources/bpel/2.0/TestRestExtActComplexTypeVar/TestRestExtActComplexTypeVar.bpel @@ -0,0 +1,90 @@ +<!-- + ~ 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. + --> +<process name="TestRestExtActComplexTypeVar" + targetNamespace="http://ode/bpel/unit-test" + xmlns:bpws="http://docs.oasis-open.org/wsbpel/2.0/process/executable" + xmlns="http://docs.oasis-open.org/wsbpel/2.0/process/executable" + xmlns:tns="http://ode/bpel/unit-test" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:test="http://ode/bpel/unit-test.wsdl" + xmlns:bpel4RestLight="http://www.apache.org/ode/bpel/extensions/bpel4restlight" + queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath2.0" + expressionLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath2.0"> + + <import location="TestRestExtActComplexTypeVar.wsdl" + namespace="http://ode/bpel/unit-test.wsdl" + importType="http://schemas.xmlsoap.org/wsdl/" /> + + <extensions> + <extension mustUnderstand="yes" namespace="http://www.apache.org/ode/bpel/extensions/bpel4restlight"/> + </extensions> + + <partnerLinks> + <partnerLink name="helloPartnerLink" + partnerLinkType="test:HelloPartnerLinkType" + myRole="me" /> + </partnerLinks> + + <variables> + <variable name="myVar" messageType="test:HelloMessage"/> + <variable name="restRequest" type="xsd:anyType"/> + <variable name="restResponse" type="xsd:anyType"/> + <variable name="response" messageType="test:ResponseMessage"/> + </variables> + + <sequence> + <receive + name="start" + partnerLink="helloPartnerLink" + portType="test:HelloPortType" + operation="hello" + variable="myVar" + createInstance="yes"/> + + <assign name="assign1"> + <copy> + <from> + <literal> + <service:postRequest xmlns:service="http://www.example.org/restApi"> + <service:value>POST Method Test</service:value> + </service:postRequest> + </literal> + </from> + <to variable="restRequest"/> + </copy> + </assign> + + <extensionActivity> + <bpel4RestLight:POST accept="application/xml" request="restRequest" response="restResponse" uri="http://localhost:8085/test"/> + </extensionActivity> + + <assign name="assign2"> + <copy> + <from variable="restResponse"></from> + <to part="TestPart" variable="response"></to> + </copy> + </assign> + + <reply name="end" + partnerLink="helloPartnerLink" + portType="test:HelloPortType" + operation="hello" + variable="response"/> + </sequence> +</process> http://git-wip-us.apache.org/repos/asf/ode/blob/f6ab51fe/bpel-test/src/test/resources/bpel/2.0/TestRestExtActComplexTypeVar/TestRestExtActComplexTypeVar.wsdl ---------------------------------------------------------------------- diff --git a/bpel-test/src/test/resources/bpel/2.0/TestRestExtActComplexTypeVar/TestRestExtActComplexTypeVar.wsdl b/bpel-test/src/test/resources/bpel/2.0/TestRestExtActComplexTypeVar/TestRestExtActComplexTypeVar.wsdl new file mode 100644 index 0000000..2270a8b --- /dev/null +++ b/bpel-test/src/test/resources/bpel/2.0/TestRestExtActComplexTypeVar/TestRestExtActComplexTypeVar.wsdl @@ -0,0 +1,73 @@ +<?xml version="1.0" encoding="utf-8" ?> +<!-- + ~ 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. + --> + +<wsdl:definitions + targetNamespace="http://ode/bpel/unit-test.wsdl" + xmlns="http://schemas.xmlsoap.org/wsdl/" + xmlns:tns="http://ode/bpel/unit-test.wsdl" + xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" + xmlns:xsd="http://www.w3.org/2001/XMLSchema" + xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" + xmlns:bpws="http://docs.oasis-open.org/wsbpel/2.0/process/executable" + xmlns:plnk="http://docs.oasis-open.org/wsbpel/2.0/plnktype"> + + <wsdl:message name="HelloMessage"> + <wsdl:part name="TestPart" type="xsd:string"/> + </wsdl:message> + + <wsdl:message name="ResponseMessage"> + <wsdl:part name="TestPart" type="xsd:anyType"/> + </wsdl:message> + + <wsdl:portType name="HelloPortType"> + <wsdl:operation name="hello"> + <wsdl:input message="tns:HelloMessage" name="TestIn"/> + <wsdl:output message="tns:ResponseMessage" name="TestOut"/> + </wsdl:operation> + </wsdl:portType> + + <wsdl:binding name="HelloSoapBinding" type="tns:HelloPortType"> + <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> + <wsdl:operation name="hello"> + <soap:operation soapAction="" style="rpc"/> + <wsdl:input> + <soap:body + namespace="http://ode/bpel/unit-test.wsdl" + use="literal"/> + </wsdl:input> + <wsdl:output> + <soap:body + namespace="http://ode/bpel/unit-test.wsdl" + use="literal"/> + </wsdl:output> + </wsdl:operation> + </wsdl:binding> + <wsdl:service name="HelloService"> + <wsdl:port name="HelloPort" binding="tns:HelloSoapBinding"> + <soap:address location="http://localhost:8080/ode/processes/helloWorld"/> + </wsdl:port> + </wsdl:service> + + <plnk:partnerLinkType name="HelloPartnerLinkType"> + <plnk:role name="me" portType="tns:HelloPortType"/> + <plnk:role name="you" portType="tns:HelloPortType"/> + </plnk:partnerLinkType> +</wsdl:definitions> + http://git-wip-us.apache.org/repos/asf/ode/blob/f6ab51fe/bpel-test/src/test/resources/bpel/2.0/TestRestExtActComplexTypeVar/deploy.xml ---------------------------------------------------------------------- diff --git a/bpel-test/src/test/resources/bpel/2.0/TestRestExtActComplexTypeVar/deploy.xml b/bpel-test/src/test/resources/bpel/2.0/TestRestExtActComplexTypeVar/deploy.xml new file mode 100644 index 0000000..f23f17a --- /dev/null +++ b/bpel-test/src/test/resources/bpel/2.0/TestRestExtActComplexTypeVar/deploy.xml @@ -0,0 +1,30 @@ +<!-- + ~ 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. + --> +<deploy xmlns="http://www.apache.org/ode/schemas/dd/2007/03" + xmlns:pns="http://ode/bpel/unit-test" + xmlns:wns="http://ode/bpel/unit-test.wsdl"> + + + <process name="pns:TestRestExtActComplexTypeVar"> + <active>true</active> + <provide partnerLink="helloPartnerLink"> + <service name="wns:HelloService" port="HelloPort"/> + </provide> + </process> +</deploy> http://git-wip-us.apache.org/repos/asf/ode/blob/f6ab51fe/bpel-test/src/test/resources/bpel/2.0/TestRestExtActComplexTypeVar/test.properties ---------------------------------------------------------------------- diff --git a/bpel-test/src/test/resources/bpel/2.0/TestRestExtActComplexTypeVar/test.properties b/bpel-test/src/test/resources/bpel/2.0/TestRestExtActComplexTypeVar/test.properties new file mode 100644 index 0000000..1c966aa --- /dev/null +++ b/bpel-test/src/test/resources/bpel/2.0/TestRestExtActComplexTypeVar/test.properties @@ -0,0 +1,23 @@ +# +# 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. +# + +namespace=http://ode/bpel/unit-test.wsdl +service=HelloService +operation=hello +request1=<message><TestPart>Hello</TestPart></message> +response1=.*POST Method Test Result.* +
