svn commit: r574452 - in /ofbiz/trunk/specialpurpose/oagis: servicedef/secas.xml servicedef/services.xml src/org/ofbiz/oagis/OagisInventoryServices.java src/org/ofbiz/oagis/OagisServices.java

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

svn commit: r574452 - in /ofbiz/trunk/specialpurpose/oagis: servicedef/secas.xml servicedef/services.xml src/org/ofbiz/oagis/OagisInventoryServices.java src/org/ofbiz/oagis/OagisServices.java

jonesde
Author: jonesde
Date: Mon Sep 10 22:07:28 2007
New Revision: 574452

URL: http://svn.apache.org/viewvc?rev=574452&view=rev
Log:
Added service to re-receive messages in OagisMessageInfo records

Modified:
    ofbiz/trunk/specialpurpose/oagis/servicedef/secas.xml
    ofbiz/trunk/specialpurpose/oagis/servicedef/services.xml
    ofbiz/trunk/specialpurpose/oagis/src/org/ofbiz/oagis/OagisInventoryServices.java
    ofbiz/trunk/specialpurpose/oagis/src/org/ofbiz/oagis/OagisServices.java

Modified: ofbiz/trunk/specialpurpose/oagis/servicedef/secas.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/oagis/servicedef/secas.xml?rev=574452&r1=574451&r2=574452&view=diff
==============================================================================
--- ofbiz/trunk/specialpurpose/oagis/servicedef/secas.xml (original)
+++ ofbiz/trunk/specialpurpose/oagis/servicedef/secas.xml Mon Sep 10 22:07:28 2007
@@ -20,7 +20,7 @@
 
 <service-eca xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/service-eca.xsd">
-    <!-- uncomment these to enable OAGIS message sending
+    <!-- uncomment these to enable OAGIS message sending -->
     <eca service="changeOrderStatus" event="commit" run-on-error="false">
         <condition field-name="statusId" operator="equals" value="ORDER_APPROVED"/>
         <condition field-name="orderTypeId" operator="equals" value="SALES_ORDER"/>
@@ -35,5 +35,4 @@
         <condition field-name="statusId" operator="equals" value="RETURN_ACCEPTED"/>
         <action service="oagisSendReceiveDelivery" mode="async" persist="true"/>
     </eca>
-    -->
 </service-eca>

Modified: ofbiz/trunk/specialpurpose/oagis/servicedef/services.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/oagis/servicedef/services.xml?rev=574452&r1=574451&r2=574452&view=diff
==============================================================================
--- ofbiz/trunk/specialpurpose/oagis/servicedef/services.xml (original)
+++ ofbiz/trunk/specialpurpose/oagis/servicedef/services.xml Mon Sep 10 22:07:28 2007
@@ -68,6 +68,16 @@
         location="org.ofbiz.oagis.OagisServices" invoke="oagisMessageHandler" auth="false">
         <implements service="serviceStreamInterface"/>
         <implements service="oagisMessageIdOutInterface"/>
+        <attribute name="isErrorRetry" type="Boolean" mode="IN" optional="true"/>
+        <override name="outputStream" optional="true"/>
+    </service>
+    
+    <service name="oagisReReceiveMessage" engine="java" transaction-timeout="300"
+        location="org.ofbiz.oagis.OagisServices" invoke="oagisReReceiveMessage" auth="false">
+        <attribute name="logicalId" type="String" mode="IN" optional="true"/>
+        <attribute name="component" type="String" mode="IN" optional="true"/>
+        <attribute name="task" type="String" mode="IN" optional="true"/>
+        <attribute name="referenceId" type="String" mode="IN" optional="false"/>
     </service>
     
     <!-- Confirm BOD Messages, general flow and error handling -->    

Modified: ofbiz/trunk/specialpurpose/oagis/src/org/ofbiz/oagis/OagisInventoryServices.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/oagis/src/org/ofbiz/oagis/OagisInventoryServices.java?rev=574452&r1=574451&r2=574452&view=diff
==============================================================================
--- ofbiz/trunk/specialpurpose/oagis/src/org/ofbiz/oagis/OagisInventoryServices.java (original)
+++ ofbiz/trunk/specialpurpose/oagis/src/org/ofbiz/oagis/OagisInventoryServices.java Mon Sep 10 22:07:28 2007
@@ -692,6 +692,11 @@
 
         Element dataAreaElement = UtilXml.firstChildElement(receiveRmaElement, "ns:DATAAREA");
         Element acknowledgeDeliveryElement = UtilXml.firstChildElement(dataAreaElement, "ns:ACKNOWLEDGE_DELIVERY");
+
+        // get the first returnId from the list so we at least have something in the info record
+        Element firstReceiptlnElement = UtilXml.firstChildElement(acknowledgeDeliveryElement, "ns:RECEIPTLN");
+        Element firstDocRefElement = UtilXml.firstChildElement(firstReceiptlnElement, "os:DOCUMNTREF");
+        String firstReturnId = UtilXml.childElementValue(firstDocRefElement, "of:DOCUMENTID");
         
         String facilityId = UtilProperties.getPropertyValue("oagis.properties", "Oagis.Warehouse.PoReceiptFacilityId");
         String locationSeqId = UtilProperties.getPropertyValue("oagis.properties", "Oagis.Warehouse.ReturnReceiptLocationSeqId");
@@ -735,6 +740,7 @@
         comiCtx.put("bsrNoun", bsrNoun);
         comiCtx.put("bsrRevision", bsrRevision);
         comiCtx.put("processingStatusId", "OAGMP_RECEIVED");
+        comiCtx.put("returnId", firstReturnId);
         comiCtx.put("userLogin", userLogin);
         if (OagisServices.debugSaveXmlIn) {
             try {
@@ -846,7 +852,8 @@
                         List serialNumsList = FastList.newInstance();
                         List invDetailList = UtilXml.childElementList(receiptLnElement, "ns:INVDETAIL");
                         if (UtilValidate.isNotEmpty(invDetailList)) {
-                            for (Iterator j = invDetailList.iterator(); j.hasNext();) {
+                            Iterator j = invDetailList.iterator();
+                            while (j.hasNext()) {
                                 Element invDetailElement = (Element) j.next();
                                 String serialNumber = UtilXml.childElementValue(invDetailElement, "of:SERIALNUM");
                                 if (UtilValidate.isNotEmpty(serialNumber)) {

Modified: ofbiz/trunk/specialpurpose/oagis/src/org/ofbiz/oagis/OagisServices.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/oagis/src/org/ofbiz/oagis/OagisServices.java?rev=574452&r1=574451&r2=574452&view=diff
==============================================================================
--- ofbiz/trunk/specialpurpose/oagis/src/org/ofbiz/oagis/OagisServices.java (original)
+++ ofbiz/trunk/specialpurpose/oagis/src/org/ofbiz/oagis/OagisServices.java Mon Sep 10 22:07:28 2007
@@ -46,6 +46,7 @@
 import javolution.util.FastMap;
 
 import org.ofbiz.base.util.Debug;
+import org.ofbiz.base.util.GeneralException;
 import org.ofbiz.base.util.HttpClient;
 import org.ofbiz.base.util.SSLUtil;
 import org.ofbiz.base.util.UtilDateTime;
@@ -432,11 +433,60 @@
         return result;
     }
     
+    public static Map oagisReReceiveMessage(DispatchContext ctx, Map context) {
+        GenericDelegator delegator = ctx.getDelegator();
+        LocalDispatcher dispatcher = ctx.getDispatcher();
+
+        String logicalId = (String) context.get("logicalId");
+        String component = (String) context.get("component");
+        String task = (String) context.get("task");
+        String referenceId = (String) context.get("referenceId");
+        Map oagisMessageInfoKey = UtilMisc.toMap("logicalId", logicalId, "component", component, "task", task, "referenceId", referenceId);
+        
+        try {
+            GenericValue oagisMessageInfo = null;
+            
+            if (UtilValidate.isNotEmpty(referenceId) && (UtilValidate.isEmpty(component) || UtilValidate.isEmpty(task) || UtilValidate.isEmpty(referenceId))) {
+                // try looking up by just the referenceId, those alone are often unique, return error if there is more than one result
+                List oagisMessageInfoList = delegator.findByAnd("OagisMessageInfo", UtilMisc.toMap("referenceId", referenceId));
+                if (oagisMessageInfoList.size() == 1) {
+                    oagisMessageInfo = (GenericValue) oagisMessageInfoList.get(0);
+                } else if (oagisMessageInfoList.size() > 1) {
+                    return ServiceUtil.returnError("Looked up by referenceId because logicalId, component, or task were not passed in but found more than one [" + oagisMessageInfoList.size() + "] record with referenceId [" + referenceId + "]");
+                }
+            } else {
+                oagisMessageInfo = delegator.findByPrimaryKey("OagisMessageInfo", oagisMessageInfoKey);
+            }
+            
+            if (oagisMessageInfo == null) {
+                return ServiceUtil.returnError("Could not find OagisMessageInfo record with key [" + oagisMessageInfoKey + "], not rerunning message.");
+            }
+            
+            String fullMessageXml = oagisMessageInfo.getString("fullMessageXml");
+            if (UtilValidate.isEmpty(fullMessageXml)) {
+                return ServiceUtil.returnError("There was no fullMessageXml text in OagisMessageInfo record with key [" + oagisMessageInfoKey + "], not rerunning message.");
+            }
+            
+            // we know we have text now, run it!
+            ByteArrayInputStream bis = new ByteArrayInputStream(fullMessageXml.getBytes("UTF-8"));
+            Map result = dispatcher.runSync("oagisMessageHandler", UtilMisc.toMap("inputStream", bis, "isErrorRetry", Boolean.TRUE));
+            if (ServiceUtil.isError(result)) {
+                return ServiceUtil.returnError("Error trying to re-receive message with ID [" + oagisMessageInfoKey + "]", null, null, result);
+            }
+            return ServiceUtil.returnSuccess();
+        } catch (Exception e) {
+            String errMsg = "Error re-receiving message with ID [" + oagisMessageInfoKey + "]: " + e.toString();
+            Debug.logError(e, errMsg, module);
+            return ServiceUtil.returnError(errMsg);
+        }
+    }
+    
     public static Map oagisMessageHandler(DispatchContext ctx, Map context) {
         GenericDelegator delegator = ctx.getDelegator();
         LocalDispatcher dispatcher = ctx.getDispatcher();
         InputStream in = (InputStream) context.get("inputStream");
         List errorList = FastList.newInstance();
+        Boolean isErrorRetry = (Boolean) context.get("isErrorRetry");
 
         GenericValue userLogin = null;
         try {
@@ -511,7 +561,7 @@
         
         // call async, no additional results to return: Map subServiceResult = FastMap.newInstance();
         if (UtilValidate.isNotEmpty(oagisMessageInfo)) {
-            if ("OAGMP_SYS_ERROR".equals(oagisMessageInfo.getString("processingStatusId"))) {
+            if (Boolean.TRUE.equals(isErrorRetry) || "OAGMP_SYS_ERROR".equals(oagisMessageInfo.getString("processingStatusId"))) {
                 // there was an error last time, tell the service this is a retry
                 messageProcessContext.put("isErrorRetry", Boolean.TRUE);
             } else {