...
- Iteration 1: SendESMEMessage is called directly from the ECA. SendESME service has a hardcoded Stax URL with a hardcoded taken, server URL and message.
- Iteration 2: A dynamic message that contains event details is sent to SendESMEMessage
- Iteration 3: A specific service is created that calls with generic service with amessage to send as a parameter
- Iteration 4: The details for the ESME Call (Server URL, Token, etc) are made configurable via a UI.
Implementation Details
...
services.xml
...
Location: servicedef directory
<service name="sendMessage" engine="java"
location="org.ofbiz.example.ESMEServices" invoke="sendMessage">
<attribute name="exampleId" type="String" mode="IN" optional="false"/>
<description>Send Message to ESME</description>
</service>
eecas.xml
Location: entitydef directory
<entity-eca xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/entity-eca.xsd">
<?xml version="1.0" encoding="UTF-8"?>
<- WorkEffort Keyword Indexing ECAs ->
<eca entity="Example" operation="create-store" event="return">
<action service="sendMessage" mode="sync"/>
</eca></entity-eca>eca>
</entity-eca>
ESMEServices.java
Location: src directory
Code Block |
---|
package org.ofbiz.example;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.math.BigDecimal;
import java.net.HttpURLConnection;
import java.net.URL;
import java.sql.Timestamp;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.io.*;
import java.net.*;
import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;
import javolution.util.FastList;
import javolution.util.FastMap;
import javolution.util.FastSet;
import org.ofbiz.base.util.DateRange;
import org.ofbiz.base.util.Debug;
import org.ofbiz.base.util.TimeDuration;
import org.ofbiz.base.util.UtilDateTime;
import org.ofbiz.base.util.UtilGenerics;
import org.ofbiz.base.util.UtilMisc;
import org.ofbiz.base.util.UtilProperties;
import org.ofbiz.base.util.UtilValidate;
import org.ofbiz.entity.Delegator;
import org.ofbiz.entity.GenericEntityException;
import org.ofbiz.entity.GenericValue;
import org.ofbiz.entity.condition.EntityCondition;
import org.ofbiz.entity.condition.EntityConditionList;
import org.ofbiz.entity.condition.EntityExpr;
import org.ofbiz.entity.condition.EntityJoinOperator;
import org.ofbiz.entity.condition.EntityOperator;
import org.ofbiz.entity.model.ModelEntity;
import org.ofbiz.entity.util.EntityListIterator;
import org.ofbiz.entity.util.EntityUtil;
import org.ofbiz.security.Security;
import org.ofbiz.service.DispatchContext;
import org.ofbiz.service.LocalDispatcher;
import org.ofbiz.service.ServiceUtil;
import org.ofbiz.service.calendar.TemporalExpression;
import org.ofbiz.service.calendar.TemporalExpressionWorker;
public class ESMEServices {
public static final String module = ESMEServices.class.getName();
public static Map sendMessage(DispatchContext ctx, Map context) {
String twitterUrl="http://localhost:8081/twitter/statuses/update.xml";
Map result = FastMap.newInstance();
try {
Delegator delegator = ctx.getDelegator();
String exampleId = (String)context.get("exampleId");
String user = "test1";
String password = "5XCQ2CQRYWFZDHYP3Y23HZ3ZOLFBZYGC";
OutputStreamWriter ostreamwriter;
String statusmsg="Test" + exampleId;
int i=2;
URL url = new URL(twitterUrl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setRequestProperty("Authorization", "Basic " + Base64.encode((user+":"+password).getBytes()));
String encStatus = "status="+URLEncoder.encode(statusmsg, "UTF-8");
ostreamwriter = new OutputStreamWriter(conn.getOutputStream());
ostreamwriter.write(encStatus); //--> Magic Magic
ostreamwriter.flush();
int responseCode = conn.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_CREATED || responseCode == HttpURLConnection.HTTP_OK) {
result = ServiceUtil.returnSuccess();
} else {
result = ServiceUtil.returnFailure();
}
}
catch (Exception e) {
result = ServiceUtil.returnFailure();
}
return ServiceUtil.returnSuccess();
}
public static String toString(InputStream inputStream) throws IOException {
String string;
StringBuilder outputBuilder = new StringBuilder();
if (inputStream != null) {
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
while (null != (string = reader.readLine())) {
outputBuilder.append(string).append('\n');
}
}
return outputBuilder.toString();
}
}
|