summaryrefslogtreecommitdiffstats
path: root/wso2/wso2bpel-ext/wso2bpel-core/BPEL4RESTLight/src/main/java/de/unistuttgart/iaas/bpel/extensions/bpel4restlight
diff options
context:
space:
mode:
Diffstat (limited to 'wso2/wso2bpel-ext/wso2bpel-core/BPEL4RESTLight/src/main/java/de/unistuttgart/iaas/bpel/extensions/bpel4restlight')
-rw-r--r--wso2/wso2bpel-ext/wso2bpel-core/BPEL4RESTLight/src/main/java/de/unistuttgart/iaas/bpel/extensions/bpel4restlight/Bpel4RestLightExtensionBundle.java48
-rw-r--r--wso2/wso2bpel-ext/wso2bpel-core/BPEL4RESTLight/src/main/java/de/unistuttgart/iaas/bpel/extensions/bpel4restlight/Bpel4RestLightOperation.java147
-rw-r--r--wso2/wso2bpel-ext/wso2bpel-core/BPEL4RESTLight/src/main/java/de/unistuttgart/iaas/bpel/extensions/bpel4restlight/EPRDemoOperation.java74
-rw-r--r--wso2/wso2bpel-ext/wso2bpel-core/BPEL4RESTLight/src/main/java/de/unistuttgart/iaas/bpel/extensions/bpel4restlight/MethodAttribute.java17
-rw-r--r--wso2/wso2bpel-ext/wso2bpel-core/BPEL4RESTLight/src/main/java/de/unistuttgart/iaas/bpel/extensions/bpel4restlight/util/Bpel4RestLightUtil.java113
5 files changed, 399 insertions, 0 deletions
diff --git a/wso2/wso2bpel-ext/wso2bpel-core/BPEL4RESTLight/src/main/java/de/unistuttgart/iaas/bpel/extensions/bpel4restlight/Bpel4RestLightExtensionBundle.java b/wso2/wso2bpel-ext/wso2bpel-core/BPEL4RESTLight/src/main/java/de/unistuttgart/iaas/bpel/extensions/bpel4restlight/Bpel4RestLightExtensionBundle.java
new file mode 100644
index 0000000..88ac53e
--- /dev/null
+++ b/wso2/wso2bpel-ext/wso2bpel-core/BPEL4RESTLight/src/main/java/de/unistuttgart/iaas/bpel/extensions/bpel4restlight/Bpel4RestLightExtensionBundle.java
@@ -0,0 +1,48 @@
+/**
+ * Copyright 2011 IAAS University of Stuttgart <br>
+ * <br>
+ *
+ * @author uwe.breitenbuecher@iaas.uni-stuttgart.de
+ *
+ */
+/**
+ * Copyright 2017 ZTE Corporation.
+ *
+ * Licensed 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 de.unistuttgart.iaas.bpel.extensions.bpel4restlight;
+
+import org.apache.ode.bpel.runtime.extension.AbstractExtensionBundle;
+
+
+public class Bpel4RestLightExtensionBundle extends AbstractExtensionBundle {
+
+ public static final String NAMESPACE = "http://iaas.uni-stuttgart.de/bpel/extensions/bpel4restlight";
+
+
+ /** {@inheritDoc} */
+ @Override
+ public String getNamespaceURI() {
+ return NAMESPACE;
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public void registerExtensionActivities() {
+ super.registerExtensionOperation("logNodes", EPRDemoOperation.class);
+ super.registerExtensionOperation("PUT", Bpel4RestLightOperation.class);
+ super.registerExtensionOperation("GET", Bpel4RestLightOperation.class);
+ super.registerExtensionOperation("POST", Bpel4RestLightOperation.class);
+ super.registerExtensionOperation("DELETE", Bpel4RestLightOperation.class);
+ }
+}
diff --git a/wso2/wso2bpel-ext/wso2bpel-core/BPEL4RESTLight/src/main/java/de/unistuttgart/iaas/bpel/extensions/bpel4restlight/Bpel4RestLightOperation.java b/wso2/wso2bpel-ext/wso2bpel-core/BPEL4RESTLight/src/main/java/de/unistuttgart/iaas/bpel/extensions/bpel4restlight/Bpel4RestLightOperation.java
new file mode 100644
index 0000000..2335f49
--- /dev/null
+++ b/wso2/wso2bpel-ext/wso2bpel-core/BPEL4RESTLight/src/main/java/de/unistuttgart/iaas/bpel/extensions/bpel4restlight/Bpel4RestLightOperation.java
@@ -0,0 +1,147 @@
+package de.unistuttgart.iaas.bpel.extensions.bpel4restlight;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.util.Properties;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.ode.bpel.common.FaultException;
+import org.apache.ode.bpel.runtime.extension.AbstractSyncExtensionOperation;
+import org.apache.ode.bpel.runtime.extension.ExtensionContext;
+import org.opentosca.bpel4restlight.rest.HighLevelRestApi;
+import org.opentosca.bpel4restlight.rest.HttpMethod;
+import org.opentosca.bpel4restlight.rest.HttpResponseMessage;
+/**
+ *
+ * Copyright 2011 IAAS University of Stuttgart <br>
+ * <br>
+ *
+ * This class provides 4 BPEL4RestLight ExtensionActivity-operations which
+ * correspond to the 4 typical REST-Operations GET, PUT, POST and Delete.
+ *
+ * @author uwe.breitenbuecher@iaas.uni-stuttgart.de
+ *
+ */
+import org.w3c.dom.Element;
+
+import de.unistuttgart.iaas.bpel.extensions.bpel4restlight.util.Bpel4RestLightUtil;
+import de.unistuttgart.iaas.bpel.util.BPELVariableInjectionUtil;
+import de.unistuttgart.iaas.bpel.util.BpelUtil;
+
+
+public class Bpel4RestLightOperation extends AbstractSyncExtensionOperation {
+ protected static final Log log = LogFactory.getLog(Bpel4RestLightOperation.class);
+ private static final String EXT_PROPERTIES = "wso2bps-ext.properties"; // extra properties setting
+ private static final String MSB_URL = "MSB_URL"; // http://msb:port, ext property msb url, if exist replace the request url
+
+
+ public static String wrapper = "temporary-simple-type-wrapper";
+ private static String msbUrl = null;
+
+ static {
+
+ try {
+ File file = new File(EXT_PROPERTIES);
+ if(file.exists()) {
+ Properties p=new Properties();
+ InputStream inputStream = new FileInputStream(file);
+ p.load(inputStream);
+ inputStream.close();
+ msbUrl = p.getProperty(MSB_URL);
+ }
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ }
+
+
+ private void processResponseMessage(HttpResponseMessage responseMessage, ExtensionContext context, Element element) throws FaultException {
+ // Write responsePayload to designated variable
+ String responsePayloadVariableName = Bpel4RestLightUtil.getMethodAttributeValue(element, MethodAttribute.RESPONSEPAYLOADVARIABLE);
+ String statusCodeVariableName = Bpel4RestLightUtil.getMethodAttributeValue(element, MethodAttribute.STATUSCODEVARIABLE);
+
+ if (responsePayloadVariableName != null && !responsePayloadVariableName.equals("")) {
+ BpelUtil.writeResponsePayloadToVariable(context, responseMessage.getResponseBody(), responsePayloadVariableName, Bpel4RestLightOperation.wrapper);
+ }
+
+ if (statusCodeVariableName != null && !statusCodeVariableName.equals("")) {
+ String StatusCode = "" + responseMessage.getStatusCode(); // int can not be casted to String
+
+ BpelUtil.writeResponsePayloadToVariable(context, StatusCode, statusCodeVariableName, Bpel4RestLightOperation.wrapper);
+
+ }
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ protected void runSync(ExtensionContext context, Element element) throws FaultException {
+ element = BPELVariableInjectionUtil.replaceExtensionVariables(context, element);
+ log.debug("LocalName of edited element: " + element.getLocalName());
+ String httpMethod = element.getLocalName();
+
+ // Extract requestUri
+ String requestUri = getRequestUrl(element);
+
+ HttpResponseMessage responseMessage = null;
+ String acceptHeader = Bpel4RestLightUtil.extractAcceptHeader(context, element);
+ String contentTypeHeader = Bpel4RestLightUtil.extractContentTypeHeader(context, element);
+ String requestPayload = Bpel4RestLightUtil.extractRequestPayload(context, element);
+
+ // Execute corresponding HttpMethod via the HighLevelRestApi
+ switch (HttpMethod.valueOf(httpMethod)) {
+
+ case PUT: {
+ responseMessage = HighLevelRestApi.Put(requestUri, requestPayload, acceptHeader, contentTypeHeader);
+ break;
+ }
+
+ case POST: {
+ responseMessage = HighLevelRestApi.Post(requestUri, requestPayload, acceptHeader, contentTypeHeader);
+ break;
+ }
+
+ case GET: {
+ responseMessage = HighLevelRestApi.Get(requestUri, acceptHeader, contentTypeHeader);
+ break;
+ }
+
+ case DELETE: {
+ responseMessage = HighLevelRestApi.Delete(requestUri, acceptHeader, contentTypeHeader);
+ break;
+ }
+ }
+
+ processResponseMessage(responseMessage, context, element);
+ // Bpel4RestLightOperation.wrapper = null;
+ }
+
+
+ /**
+ * getRequestUrl
+ * get request url from element, if exists msbUrl property, then replace the ip and port
+ * @param element
+ * @return
+ */
+ private String getRequestUrl(Element element) {
+ String requestUri = Bpel4RestLightUtil.getMethodAttributeValue(element, MethodAttribute.REQUESTURI);
+ log.debug("original url:" + requestUri);
+ if(msbUrl == null || "".equals(msbUrl) || "http://msb:port".equals(msbUrl)) {
+ return requestUri;
+ } else {
+ requestUri = requestUri.substring(requestUri.indexOf("//") + 2);
+ int index = requestUri.indexOf("/");
+ if(index == -1) {
+
+ } else {
+ requestUri = requestUri.substring(index);
+ }
+ requestUri = msbUrl + requestUri;
+ log.debug("changed url:" + requestUri);
+ return requestUri;
+ }
+ }
+}
diff --git a/wso2/wso2bpel-ext/wso2bpel-core/BPEL4RESTLight/src/main/java/de/unistuttgart/iaas/bpel/extensions/bpel4restlight/EPRDemoOperation.java b/wso2/wso2bpel-ext/wso2bpel-core/BPEL4RESTLight/src/main/java/de/unistuttgart/iaas/bpel/extensions/bpel4restlight/EPRDemoOperation.java
new file mode 100644
index 0000000..fd7b4b3
--- /dev/null
+++ b/wso2/wso2bpel-ext/wso2bpel-core/BPEL4RESTLight/src/main/java/de/unistuttgart/iaas/bpel/extensions/bpel4restlight/EPRDemoOperation.java
@@ -0,0 +1,74 @@
+/**
+ *
+ * Copyright 2011 IAAS University of Stuttgart <br>
+ * <br>
+ *
+ * THIS CLASS IS USED FOR TEST PURPOSES!
+ *
+ * @author uwe.breitenbuecher@iaas.uni-stuttgart.de
+ *
+ */
+package de.unistuttgart.iaas.bpel.extensions.bpel4restlight;
+
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+import org.apache.ode.bpel.common.FaultException;
+import org.apache.ode.bpel.o.OPartnerLink;
+import org.apache.ode.bpel.runtime.PartnerLinkInstance;
+import org.apache.ode.bpel.runtime.extension.AbstractSyncExtensionOperation;
+import org.apache.ode.bpel.runtime.extension.ExtensionContext;
+import org.w3c.dom.Element;
+
+import de.unistuttgart.iaas.xml.DomXmlConverter;
+
+
+public class EPRDemoOperation extends AbstractSyncExtensionOperation {
+
+ /** {@inheritDoc} */
+ @Override
+ protected void runSync(ExtensionContext context, Element element) throws FaultException {
+ System.out.println("bin hier");
+ try {
+ for (OPartnerLink l : context.getInternalInstance().getProcessModel().allPartnerLinks) {
+
+ PartnerLinkInstance pli = context.getPartnerLinkInstance(l);
+
+ Element epr = context.getInternalInstance().fetchPartnerRoleEndpointReferenceData(pli);
+ System.out.println("EPR|||");
+ System.out.println(DomXmlConverter.nodeToString(epr, null));
+
+ System.out.println(epr.getChildNodes().item(0).getChildNodes().item(1).getNodeName());
+ System.out.println(epr.getChildNodes().item(0).getChildNodes().item(1).getTextContent());
+ System.out.println("..");
+ System.out.println(epr.getChildNodes().item(0).getChildNodes().item(1).getChildNodes().item(0).getTextContent());
+
+ epr.getChildNodes().item(0).getChildNodes().item(1).getChildNodes().item(0).setTextContent("http://localhost:8084/FRP/rrr");
+
+ System.out.println(epr.getChildNodes().item(0).getChildNodes().item(1).getChildNodes().item(0).getTextContent());
+
+ System.out.println(context.getDUDir().toString());
+
+ }
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ System.out.println("ich bin hiiiiiiiiiier!!");
+
+ try {
+ URL url = new URL("http://localhost:8084/FRP/rrr");
+
+ HttpURLConnection connection = (HttpURLConnection) url.openConnection();
+ connection.setRequestMethod("PUT");
+
+ int responseCode = connection.getResponseCode();
+ System.out.println(responseCode);
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+}
diff --git a/wso2/wso2bpel-ext/wso2bpel-core/BPEL4RESTLight/src/main/java/de/unistuttgart/iaas/bpel/extensions/bpel4restlight/MethodAttribute.java b/wso2/wso2bpel-ext/wso2bpel-core/BPEL4RESTLight/src/main/java/de/unistuttgart/iaas/bpel/extensions/bpel4restlight/MethodAttribute.java
new file mode 100644
index 0000000..ce80c16
--- /dev/null
+++ b/wso2/wso2bpel-ext/wso2bpel-core/BPEL4RESTLight/src/main/java/de/unistuttgart/iaas/bpel/extensions/bpel4restlight/MethodAttribute.java
@@ -0,0 +1,17 @@
+/**
+ *
+ * Copyright 2011 IAAS University of Stuttgart <br>
+ * <br>
+ *
+ * This enum is used to decouple DOM-Attribute names from their
+ * String-representation within a certain library (for portability issues)
+ *
+ * @author uwe.breitenbuecher@iaas.uni-stuttgart.de
+ *
+ */
+package de.unistuttgart.iaas.bpel.extensions.bpel4restlight;
+
+
+public enum MethodAttribute {
+ REQUESTURI, REQUESTPAYLOADVARIABLE, RESPONSEPAYLOADVARIABLE, STATUSCODEVARIABLE, ACCEPTHEADER, CONTENTTYPE;
+} \ No newline at end of file
diff --git a/wso2/wso2bpel-ext/wso2bpel-core/BPEL4RESTLight/src/main/java/de/unistuttgart/iaas/bpel/extensions/bpel4restlight/util/Bpel4RestLightUtil.java b/wso2/wso2bpel-ext/wso2bpel-core/BPEL4RESTLight/src/main/java/de/unistuttgart/iaas/bpel/extensions/bpel4restlight/util/Bpel4RestLightUtil.java
new file mode 100644
index 0000000..1c9d7d1
--- /dev/null
+++ b/wso2/wso2bpel-ext/wso2bpel-core/BPEL4RESTLight/src/main/java/de/unistuttgart/iaas/bpel/extensions/bpel4restlight/util/Bpel4RestLightUtil.java
@@ -0,0 +1,113 @@
+/**
+ * Copyright 2011 IAAS University of Stuttgart <br>
+ * <br>
+ *
+ * @author uwe.breitenbuecher@iaas.uni-stuttgart.de
+ *
+ */
+package de.unistuttgart.iaas.bpel.extensions.bpel4restlight.util;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.ode.bpel.common.FaultException;
+import org.apache.ode.bpel.runtime.extension.ExtensionContext;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+
+import de.unistuttgart.iaas.bpel.extensions.bpel4restlight.Bpel4RestLightOperation;
+import de.unistuttgart.iaas.bpel.extensions.bpel4restlight.MethodAttribute;
+import de.unistuttgart.iaas.xml.DomXmlConverter;
+
+
+public class Bpel4RestLightUtil {
+ protected static final Log log = LogFactory.getLog(Bpel4RestLightUtil.class);
+ /**
+ * This function extracts the requestPayload specified in the passed
+ * element. This requestPayload is either the content contained in a special
+ * BPEL-Variable which is referenced by name by a special attribute of the
+ * passed element or the content contained in the first child node of the
+ * passed element
+ *
+ * @param context ExtensionContext
+ * @param element Element from which the requestPayload has to be extracted
+ * @return RequestPayload as String
+ * @throws FaultException
+ */
+ public static String extractRequestPayload(ExtensionContext context, Element element) throws FaultException {
+
+ String requestPayload = "";
+
+ String requestPayloadVariableName = getMethodAttributeValue(element, MethodAttribute.REQUESTPAYLOADVARIABLE);
+
+ if (requestPayloadVariableName != null && requestPayloadVariableName != "") {
+ Node requestVariableNode = context.readVariable(requestPayloadVariableName);
+ if (requestVariableNode.getLocalName().equals("temporary-simple-type-wrapper")) {
+ Bpel4RestLightOperation.wrapper = "temporary-simple-type-wrapper";
+ requestPayload = DomXmlConverter.nodeToString(requestVariableNode, "temporary-simple-type-wrapper");
+ } else {
+ requestPayload = DomXmlConverter.nodeToString(requestVariableNode, null);
+ }
+ log.debug("The pure request variable as String: \n" + DomXmlConverter.nodeToString(requestVariableNode, null) + "\n");
+ }
+
+ return requestPayload;
+ }
+
+ public static String extractAcceptHeader(ExtensionContext context, Element element) throws FaultException {
+ return getMethodAttributeValue(element, MethodAttribute.ACCEPTHEADER);
+ }
+
+ public static String extractContentTypeHeader(ExtensionContext context, Element element) throws FaultException {
+ return getMethodAttributeValue(element, MethodAttribute.CONTENTTYPE);
+ }
+
+ /**
+ * This function extracts special predefined attributes (see
+ * {@link MethodAttribute}) from a passed DOM-Element
+ *
+ * @param element Element containing the requested Attribute-Value
+ * @param methodAttribute Attribute whose content has to be returned
+ * @return Value / Content of the attribute
+ */
+ public static String getMethodAttributeValue(Element element, MethodAttribute methodAttribute) {
+
+ String result = "";
+
+ switch (methodAttribute) {
+
+ case REQUESTURI:
+ result = element.getAttribute("uri");
+
+ if (result == null || "".equals(result)) {
+ result = element.getAttribute("requestUri");
+ }
+ break;
+ case REQUESTPAYLOADVARIABLE:
+ result = element.getAttribute("request");
+
+ if (result == null || "".equals(result)) {
+ result = element.getAttribute("requestPayload");
+ }
+ break;
+ case RESPONSEPAYLOADVARIABLE:
+ result = element.getAttribute("response");
+
+ if (result == null || "".equals(result)) {
+ result = element.getAttribute("responsePayload");
+ }
+ break;
+ case STATUSCODEVARIABLE:
+ result = element.getAttribute("statusCode");
+ break;
+ case ACCEPTHEADER:
+ result = element.getAttribute("accept");
+ break;
+ case CONTENTTYPE:
+ result = element.getAttribute("contentType");
+ break;
+ }
+
+ return result;
+ }
+
+}