Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  1. Iteration 1: SendESMEMessage is called directly from the ECA. SendESME service has a hardcoded Stax URL with a hardcoded taken, server URL and message.
  2. Iteration 2: A dynamic message that contains event details is sent to SendESMEMessage
  3. Iteration 3: A specific service is created that calls with generic service with amessage to send as a parameter
  4. 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();
    }
}