1 package de.unistuttgart.iaas.bpel.extensions.bpel4restlight;
4 import java.io.FileInputStream;
5 import java.io.InputStream;
6 import java.util.Properties;
8 import org.apache.commons.logging.Log;
9 import org.apache.commons.logging.LogFactory;
10 import org.apache.ode.bpel.common.FaultException;
11 import org.apache.ode.bpel.runtime.extension.AbstractSyncExtensionOperation;
12 import org.apache.ode.bpel.runtime.extension.ExtensionContext;
13 import org.opentosca.bpel4restlight.rest.HighLevelRestApi;
14 import org.opentosca.bpel4restlight.rest.HttpMethod;
15 import org.opentosca.bpel4restlight.rest.HttpResponseMessage;
18 * Copyright 2011 IAAS University of Stuttgart <br>
21 * This class provides 4 BPEL4RestLight ExtensionActivity-operations which
22 * correspond to the 4 typical REST-Operations GET, PUT, POST and Delete.
24 * @author uwe.breitenbuecher@iaas.uni-stuttgart.de
27 import org.w3c.dom.Element;
29 import de.unistuttgart.iaas.bpel.extensions.bpel4restlight.util.Bpel4RestLightUtil;
30 import de.unistuttgart.iaas.bpel.util.BPELVariableInjectionUtil;
31 import de.unistuttgart.iaas.bpel.util.BpelUtil;
34 public class Bpel4RestLightOperation extends AbstractSyncExtensionOperation {
35 protected static final Log log = LogFactory.getLog(Bpel4RestLightOperation.class);
36 private static final String EXT_PROPERTIES = "wso2bps-ext.properties"; // extra properties setting
37 private static final String MSB_URL = "MSB_URL"; // http://msb:port, ext property msb url, if exist replace the request url
40 public static String wrapper = "temporary-simple-type-wrapper";
41 private static String msbUrl = null;
46 File file = new File(EXT_PROPERTIES);
48 Properties p=new Properties();
49 InputStream inputStream = new FileInputStream(file);
52 msbUrl = p.getProperty(MSB_URL);
55 } catch (Exception e) {
62 private void processResponseMessage(HttpResponseMessage responseMessage, ExtensionContext context, Element element) throws FaultException {
63 // Write responsePayload to designated variable
64 String responsePayloadVariableName = Bpel4RestLightUtil.getMethodAttributeValue(element, MethodAttribute.RESPONSEPAYLOADVARIABLE);
65 String statusCodeVariableName = Bpel4RestLightUtil.getMethodAttributeValue(element, MethodAttribute.STATUSCODEVARIABLE);
67 if (responsePayloadVariableName != null && !responsePayloadVariableName.equals("")) {
68 BpelUtil.writeResponsePayloadToVariable(context, responseMessage.getResponseBody(), responsePayloadVariableName, Bpel4RestLightOperation.wrapper);
71 if (statusCodeVariableName != null && !statusCodeVariableName.equals("")) {
72 String StatusCode = "" + responseMessage.getStatusCode(); // int can not be casted to String
74 BpelUtil.writeResponsePayloadToVariable(context, StatusCode, statusCodeVariableName, Bpel4RestLightOperation.wrapper);
81 protected void runSync(ExtensionContext context, Element element) throws FaultException {
82 element = BPELVariableInjectionUtil.replaceExtensionVariables(context, element);
83 log.debug("LocalName of edited element: " + element.getLocalName());
84 String httpMethod = element.getLocalName();
87 String requestUri = getRequestUrl(element);
89 HttpResponseMessage responseMessage = null;
90 String acceptHeader = Bpel4RestLightUtil.extractAcceptHeader(context, element);
91 String contentTypeHeader = Bpel4RestLightUtil.extractContentTypeHeader(context, element);
92 String requestPayload = Bpel4RestLightUtil.extractRequestPayload(context, element);
94 // Execute corresponding HttpMethod via the HighLevelRestApi
95 switch (HttpMethod.valueOf(httpMethod)) {
98 responseMessage = HighLevelRestApi.Put(requestUri, requestPayload, acceptHeader, contentTypeHeader);
103 responseMessage = HighLevelRestApi.Post(requestUri, requestPayload, acceptHeader, contentTypeHeader);
108 responseMessage = HighLevelRestApi.Get(requestUri, acceptHeader, contentTypeHeader);
113 responseMessage = HighLevelRestApi.Delete(requestUri, acceptHeader, contentTypeHeader);
118 processResponseMessage(responseMessage, context, element);
119 // Bpel4RestLightOperation.wrapper = null;
125 * get request url from element, if exists msbUrl property, then replace the ip and port
129 private String getRequestUrl(Element element) {
130 String requestUri = Bpel4RestLightUtil.getMethodAttributeValue(element, MethodAttribute.REQUESTURI);
131 log.debug("original url:" + requestUri);
132 if(msbUrl == null || "".equals(msbUrl) || "http://msb:port".equals(msbUrl)) {
135 requestUri = requestUri.substring(requestUri.indexOf("//") + 2);
136 int index = requestUri.indexOf("/");
140 requestUri = requestUri.substring(index);
142 requestUri = msbUrl + requestUri;
143 log.debug("changed url:" + requestUri);