svn commit: r565576 - in /ofbiz/trunk/specialpurpose/oagis: config/ servicedef/ src/org/ofbiz/oagis/

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

svn commit: r565576 - in /ofbiz/trunk/specialpurpose/oagis: config/ servicedef/ src/org/ofbiz/oagis/

jonesde
Author: jonesde
Date: Mon Aug 13 16:50:59 2007
New Revision: 565576

URL: http://svn.apache.org/viewvc?view=rev&rev=565576
Log:
Changed the error message handling for incoming messages and sending outgoing CBOD messages; also cleaned up the services.xml file to eliminate unused service defs and organize the services better

Modified:
    ofbiz/trunk/specialpurpose/oagis/config/oagis.properties
    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
    ofbiz/trunk/specialpurpose/oagis/src/org/ofbiz/oagis/OagisShipmentServices.java

Modified: ofbiz/trunk/specialpurpose/oagis/config/oagis.properties
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/oagis/config/oagis.properties?view=diff&rev=565576&r1=565575&r2=565576
==============================================================================
--- ofbiz/trunk/specialpurpose/oagis/config/oagis.properties (original)
+++ ofbiz/trunk/specialpurpose/oagis/config/oagis.properties Mon Aug 13 16:50:59 2007
@@ -18,10 +18,10 @@
 ###############################################################################
 
 # -- logical location of server (10 char max)
-CNTROLAREA.SENDER.LOGICALID=1234567890
+CNTROLAREA.SENDER.LOGICALID=792024833
 
 # -- auth id is required to access machine that generated the BOD (50 char max)
-CNTROLAREA.SENDER.AUTHID=Ofbiz
+CNTROLAREA.SENDER.AUTHID=VUDU
 
 # if these are set to true the XML content of the messages will be saved to OagisMessageInfo.fullMessageXml
 Oagis.Debug.Save.Xml.Out=true
@@ -40,18 +40,22 @@
 Oagis.Warehouse.SyncInventoryProductStoreId=9001
 
 # email notification
-#oagis.notification.email.sendTo=[hidden email]
+oagis.notification.email.sendTo=[hidden email]
 
 # Client Cert, etc settings
 #auth.client.certificate.alias=testrpckey
-#auth.basic.username=foo
-#auth.basic.password=bar
+auth.basic.username=792024833
+auth.basic.password=aZ79202uS
 
 # URLs for outgoing messages
-#url.send.processShipment=https://foo.bar.baz/oagis/control/processShipment
-#url.send.confirmBod=https://foo.bar.baz/oagis/control/confirmBod
-#url.send.receiveDelivery=https://foo.bar.baz/oagis/control/receiveDelivery
+#url.send.processShipment=https://b2b.avnet.com:5361/invoke/wm.tn/receive
+#url.send.confirmBod=https://b2b.avnet.com:5361/invoke/wm.tn/receive
+#url.send.receiveDelivery=https://b2b.avnet.com:5361/invoke/wm.tn/receive
+# test URLs
+url.send.processShipment=https://b2b-test.avnet.com:5361/invoke/wm.tn/receive
+url.send.confirmBod=https://b2b-test.avnet.com:5361/invoke/wm.tn/receive
+url.send.receiveDelivery=https://b2b-test.avnet.com:5361/invoke/wm.tn/receive
 
 # if the test.save.outgoing.directory is specified the files will be saved there but not sent to any URL that might be specified
-test.save.outgoing.directory=.
+test.save.outgoing.directory=/Users/jonesde
 test.save.outgoing.filename.base=Test

Modified: ofbiz/trunk/specialpurpose/oagis/servicedef/secas.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/oagis/servicedef/secas.xml?view=diff&rev=565576&r1=565575&r2=565576
==============================================================================
--- ofbiz/trunk/specialpurpose/oagis/servicedef/secas.xml (original)
+++ ofbiz/trunk/specialpurpose/oagis/servicedef/secas.xml Mon Aug 13 16:50:59 2007
@@ -20,15 +20,13 @@
 
 <service-eca xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/service-eca.xsd">
-    <!-- order status changes -->
-    <!--
+    <!-- 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"/>
         <condition-field field-name="statusId" operator="not-equals" to-field-name="oldStatusId"/>
         <action service="oagisProcessShipment" mode="async" persist="true"/>
     </eca>
-    
     <eca service="updateReturnHeader" event="commit">
         <condition field-name="statusId" operator="equals" value="RETURN_ACCEPTED"/>
         <action service="oagisReceiveDelivery" mode="async" persist="true"/>
@@ -38,11 +36,4 @@
         <action service="oagisProcessShipment" mode="sync"/>
     </eca>
     -->
-
-    <eca service="oagisMessageHandler" event="commit" run-on-error="true">
-        <condition field-name="errorMapList" operator="is-not-empty"/>
-        <action service="createOagisMsgErrInfosFromErrMapList" mode="sync"/>
-        <action service="oagisSendConfirmBod" mode="sync"/>
-    </eca>
-
 </service-eca>

Modified: ofbiz/trunk/specialpurpose/oagis/servicedef/services.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/oagis/servicedef/services.xml?view=diff&rev=565576&r1=565575&r2=565576
==============================================================================
--- ofbiz/trunk/specialpurpose/oagis/servicedef/services.xml (original)
+++ ofbiz/trunk/specialpurpose/oagis/servicedef/services.xml Mon Aug 13 16:50:59 2007
@@ -20,48 +20,28 @@
 
 <services xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/services.xsd">
-    
-    <service name="oagisMessageInfoInterface" engine="interface">
-        <attribute name="logicalId" type="String" mode="OUT" optional="false"/>
-        <attribute name="component" type="String" mode="OUT" optional="false"/>
-        <attribute name="task" type="String" mode="OUT" optional="false"/>
-        <attribute name="referenceId" type="String" mode="OUT" optional="false"/>
-        <attribute name="authId" type="String" mode="OUT" optional="true"/>
-        <attribute name="outgoingMessage" type="String" mode="OUT" optional="true"/>
-        <attribute name="sentDate" type="Timestamp" mode="OUT" optional="true"/>
-        <attribute name="receivedDate" type="Timestamp" mode="OUT" optional="true"/>
-        <attribute name="confirmation" type="String" mode="OUT" optional="true"/>
-        <attribute name="bsrVerb" type="String" mode="OUT" optional="true"/>
-        <attribute name="bsrNoun" type="String" mode="OUT" optional="true"/>
-        <attribute name="bsrRevision" type="String" mode="OUT" optional="true"/>
-        <attribute name="processingStatusId" type="String" mode="OUT" optional="true"/>        
-        <attribute name="orderId" type="String" mode="INOUT" optional="true"/>        
-        <attribute name="returnId" type="String" mode="INOUT" optional="true"/>        
-        <attribute name="shipmentId" type="String" mode="INOUT" optional="true"/>
-    </service>
-    
-    <service name="oagisMessageErrorInfoInterface" engine="interface">
+
+    <!-- General Interfaces -->    
+    <service name="oagisMessageIdOutInterface" engine="interface">
         <attribute name="logicalId" type="String" mode="OUT" optional="true"/>
         <attribute name="component" type="String" mode="OUT" optional="true"/>
         <attribute name="task" type="String" mode="OUT" optional="true"/>
         <attribute name="referenceId" type="String" mode="OUT" optional="true"/>
-        <attribute name="errorMapList" type="java.util.List" mode="OUT" optional="true"/>
     </service>
 
+    <!-- Low Level CrUD Services -->
     <service name="createOagisMessageInfo" engine="simple" default-entity-name="OagisMessageInfo" require-new-transaction="true"
             location="org/ofbiz/oagis/OagisMessageServices.xml" invoke="createOagisMessageInfo" auth="true">
          <description>Create MessageInfo</description>
          <auto-attributes mode="IN" include="pk" optional="false"/>
          <auto-attributes mode="IN" include="nonpk" optional="true"/>
     </service>
-    
     <service name="updateOagisMessageInfo" engine="simple" default-entity-name="OagisMessageInfo" require-new-transaction="true"
              location="org/ofbiz/oagis/OagisMessageServices.xml" invoke="updateOagisMessageInfo" auth="true">
         <description>Update MessageInfo</description>
         <auto-attributes mode="IN" include="pk" optional="false"/>
         <auto-attributes mode="IN" include="nonpk" optional="true"/>
     </service>
-    
     <service name="createOagisMessageErrorInfo" engine="simple" default-entity-name="OagisMessageErrorInfo"
             location="org/ofbiz/oagis/OagisMessageServices.xml" invoke="createOagisMessageErrorInfo" auth="true">
          <description>Create MessageErrorInfo</description>
@@ -69,7 +49,6 @@
          <auto-attributes mode="IN" include="nonpk" optional="true"/>
          <override name="errorSeqId" optional="true"/>        
     </service>        
-    
     <service name="updateOagisMessageErrorInfo" engine="simple" default-entity-name="OagisMessageErrorInfo"
              location="org/ofbiz/oagis/OagisMessageServices.xml" invoke="updateOagisMessageErrorInfo" auth="true">
         <description>Update MessageErrorInfo</description>
@@ -77,22 +56,21 @@
         <auto-attributes mode="IN" include="nonpk" optional="true"/>
     </service>
     
-    <service name="createOagisMsgErrInfosFromErrMapList" engine="simple" default-entity-name="OagisMessageErrorInfo"
+    <service name="createOagisMsgErrInfosFromErrMapList" engine="simple"
             location="org/ofbiz/oagis/OagisMessageServices.xml" invoke="createOagisMsgErrInfosFromErrMapList" auth="true">
          <description>Create MessageErrorInfo From Error Map List</description>
-         <auto-attributes mode="IN" include="pk" optional="false"/>
+        <auto-attributes entity-name="OagisMessageInfo" mode="IN" include="pk" optional="false"/>
          <attribute type="List" mode="IN" name="errorMapList" optional="true"/>
-         <override name="errorSeqId" optional="true"/>        
     </service>
 
-    <!-- DEJ20070808 added max-rety=3 because this is run async persisted just in case there is a transaction problem under heavy load -->
-    <service name="showShipment" engine="java" transaction-timeout="300" max-retry="3"
-            location="org.ofbiz.oagis.OagisShipmentServices" invoke="showShipment" auth="false">
-        <description>Process incoming shipment message</description>
-        <implements service="oagisMessageErrorInfoInterface"/>
-        <attribute name="document" type="org.w3c.dom.Document" mode="IN" optional="false"/>
+    <!-- Routing service to handle all incoming messages and send them to the appropriate processing service -->
+    <service name="oagisMessageHandler" engine="java" transaction-timeout="300"
+        location="org.ofbiz.oagis.OagisServices" invoke="oagisMessageHandler" auth="false">
+        <implements service="serviceStreamInterface"/>
+        <implements service="oagisMessageIdOutInterface"/>
     </service>
     
+    <!-- Confirm BOD Messages, general flow and error handling -->    
     <service name="oagisSendConfirmBod" engine="java" transaction-timeout="300"
             location="org.ofbiz.oagis.OagisServices" invoke="oagisSendConfirmBod" auth="false">
         <description>Send ConfirmBod</description>
@@ -107,18 +85,10 @@
         <attribute name="errorMapList" type="java.util.List" mode="IN" optional="true"/>
         <attribute name="origRefId" type="String" mode="IN" optional="true"/>
     </service>
-    
     <service name="receiveConfirmBod" engine="java" transaction-timeout="300"
             location="org.ofbiz.oagis.OagisServices" invoke="receiveConfirmBod" auth="false">
         <description>Process incoming ConfirmBod</description>
-        <implements service="oagisMessageErrorInfoInterface"/>
-        <attribute name="document" type="org.w3c.dom.Document" mode="IN" optional="false"/>
-    </service>
-    
-    <service name="syncInventory" engine="java" transaction-timeout="300" max-retry="3"
-            location="org.ofbiz.oagis.OagisInventoryServices" invoke="syncInventory" auth="false">
-        <description>Process incoming Inventory Sync message</description>
-        <implements service="oagisMessageErrorInfoInterface"/>
+        <implements service="oagisMessageIdOutInterface"/>
         <attribute name="document" type="org.w3c.dom.Document" mode="IN" optional="false"/>
     </service>
     
@@ -130,12 +100,13 @@
         <attribute name="body" type="String" mode="OUT" optional="true"/>
     </service>
     
+    <!-- ==================================== -->
+    <!-- Outgoing Message Services -->
     <service name="oagisProcessShipment" max-retry="0" engine="java"
         location="org.ofbiz.oagis.OagisShipmentServices" invoke="oagisProcessShipment">
         <description>Prepare and Optionally Send OAGIS Process Shipment Message.
             Note on usage: you can pass in either sendToUrl, saveToFilename, or outputStream.
             If none are passed in the URL in oagis.properties will be used at the target for the message.</description>
-        <!--implements service="oagisMessageInfoInterface"/-->
         <attribute name="sendToUrl" type="String" mode="IN" optional="true"/>
         <attribute name="saveToFilename" type="String" mode="IN" optional="true"/>
         <attribute name="saveToDirectory" type="String" mode="IN" optional="true"/>
@@ -143,16 +114,6 @@
         <attribute name="orderId" mode="IN" type="String" optional="false"/>
     </service>
     
-    <service name="sendProcessShipmentMsg" max-retry="0" engine="simple"
-        location="org/ofbiz/oagis/OagisMessageServices.xml" invoke="sendProcessShipmentMsg">
-        <description>Send Process Shipment Message</description>
-        <attribute name="shipmentId" mode="IN" type="String" optional="false"/>
-        <attribute name="logicalId" mode="IN" type="String" optional="false"/>
-        <attribute name="authId" mode="IN" type="String" optional="false"/>
-        <attribute name="referenceId" mode="IN" type="String" optional="false"/>
-        <attribute name="sentDate" mode="IN" type="Timestamp" optional="false"/>
-    </service>
-    
     <service name="oagisReceiveDelivery" max-retry="0" engine="java"
         location="org.ofbiz.oagis.OagisShipmentServices" invoke="oagisReceiveDelivery">
         <description>Receive Delivery</description>
@@ -163,28 +124,35 @@
         <attribute name="returnId" mode="IN" type="String" optional="false"/>
     </service>
     
+    <!-- ==================================== -->
+    <!-- Incoming Message Services -->
+    <service name="syncInventory" engine="java" transaction-timeout="300" max-retry="3"
+        location="org.ofbiz.oagis.OagisInventoryServices" invoke="syncInventory" auth="false">
+        <description>Process incoming Inventory Sync message</description>
+        <implements service="oagisMessageIdOutInterface"/>
+        <attribute name="document" type="org.w3c.dom.Document" mode="IN" optional="false"/>
+    </service>
+    
+    <!-- DEJ20070808 added max-rety=3 because this is run async persisted just in case there is a transaction problem under heavy load -->
+    <service name="showShipment" engine="java" transaction-timeout="300" max-retry="3"
+        location="org.ofbiz.oagis.OagisShipmentServices" invoke="showShipment" auth="false">
+        <description>Process incoming shipment message</description>
+        <implements service="oagisMessageIdOutInterface"/>
+        <attribute name="document" type="org.w3c.dom.Document" mode="IN" optional="false"/>
+    </service>
+    
     <service name="receivePoAcknowledge" engine="java" transaction-timeout="300" max-retry="3"
-            location="org.ofbiz.oagis.OagisInventoryServices" invoke="receivePoAcknowledge" auth="false">
+        location="org.ofbiz.oagis.OagisInventoryServices" invoke="receivePoAcknowledge" auth="false">
         <description>Process PO Acknowledge message</description>
-        <implements service="oagisMessageErrorInfoInterface"/>
+        <implements service="oagisMessageIdOutInterface"/>
         <attribute name="document" type="org.w3c.dom.Document" mode="IN" optional="false"/>
     </service>
-
+    
     <service name="receiveRmaAcknowledge" engine="java" transaction-timeout="300" max-retry="3"
-            location="org.ofbiz.oagis.OagisInventoryServices" invoke="receiveRmaAcknowledge" auth="false">
+        location="org.ofbiz.oagis.OagisInventoryServices" invoke="receiveRmaAcknowledge" auth="false">
         <description>Process RMA Acknowledge message</description>
-        <implements service="oagisMessageErrorInfoInterface"/>
+        <implements service="oagisMessageIdOutInterface"/>
         <attribute name="document" type="org.w3c.dom.Document" mode="IN" optional="false"/>
         <attribute name="inventoryItemIdList" type="List" mode="OUT" optional="true"/>
     </service>
-
-    <service name="oagisMessageHandler" engine="java" transaction-timeout="300"
-            location="org.ofbiz.oagis.OagisServices" invoke="oagisMessageHandler" auth="false">
-        <implements service="serviceStreamInterface"/>
-        <implements service="oagisMessageErrorInfoInterface"/>
-        <!--Added the following attribute for RMA Acknowledge service to be used in the development environment.
-            Might not be used and hence can be removed in the production when the RMA service is called Asynchronously.-->
-        <attribute name="inventoryItemIdList" type="List" mode="OUT" optional="true"/>
-    </service>
-    
 </services>

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?view=diff&rev=565576&r1=565575&r2=565576
==============================================================================
--- ofbiz/trunk/specialpurpose/oagis/src/org/ofbiz/oagis/OagisInventoryServices.java (original)
+++ ofbiz/trunk/specialpurpose/oagis/src/org/ofbiz/oagis/OagisInventoryServices.java Mon Aug 13 16:50:59 2007
@@ -98,7 +98,7 @@
         String authId = UtilXml.childElementValue(docSenderElement, "of:AUTHID");
         
         // create oagis message info
-        Map comiCtx= FastMap.newInstance();
+        Map comiCtx = FastMap.newInstance();
         comiCtx.put("logicalId", logicalId);
         comiCtx.put("component", component);
         comiCtx.put("task", task);
@@ -294,14 +294,6 @@
             }
         }
         
-        comiCtx.put("processingStatusId", "OAGMP_PROC_SUCCESS");
-        try {
-            dispatcher.runSync("updateOagisMessageInfo", comiCtx, 60, true);
-        } catch (GenericServiceException e) {
-            String errMsg = "Error updating OagisMessageInfo for the Incoming Message: " + e.toString();
-            Debug.logError(e, errMsg, module);
-        }
-        
         Map result = FastMap.newInstance();
         result.put("logicalId", logicalId);
         result.put("component", component);
@@ -309,14 +301,49 @@
         result.put("referenceId", referenceId);
         result.put("userLogin", userLogin);
 
-        // check error list if there is any
         if (errorMapList.size() > 0) {
-            result.put("errorMapList", errorMapList);
-            String errMsg = "Error Processing Received Messages";
-            result.putAll(ServiceUtil.returnError(errMsg));
+            // call services createOagisMsgErrInfosFromErrMapList and for incoming messages oagisSendConfirmBod
+            Map saveErrorMapListCtx = FastMap.newInstance();
+            saveErrorMapListCtx.put("logicalId", logicalId);
+            saveErrorMapListCtx.put("component", component);
+            saveErrorMapListCtx.put("task", task);
+            saveErrorMapListCtx.put("referenceId", referenceId);
+            saveErrorMapListCtx.put("errorMapList", errorMapList);
+            try {
+                dispatcher.runSync("createOagisMsgErrInfosFromErrMapList", saveErrorMapListCtx, 60, true);
+            } catch (GenericServiceException e){
+                String errMsg = "Error updating OagisMessageInfo for the Incoming Message: " + e.toString();
+                Debug.logError(e, errMsg, module);
+            }
+
+            try {
+                Map sendConfirmBodCtx = FastMap.newInstance();
+                sendConfirmBodCtx.putAll(saveErrorMapListCtx);
+                // NOTE: this is different for each service, should be shipmentId or returnId or PO orderId or etc
+                // for sync inventory no such ID: sendConfirmBodCtx.put("origRefId", shipmentId);
+
+                // run async because this will send a message back to the other server and may take some time, and/or fail
+                dispatcher.runAsync("oagisSendConfirmBod", sendConfirmBodCtx, null, true, 60, true);
+            } catch (GenericServiceException e){
+                String errMsg = "Error updating OagisMessageInfo for the Incoming Message: " + e.toString();
+                Debug.logError(e, errMsg, module);
+            }
+            
+            // DEJ20070807 what was this next line commented out? if there are errors we want to return an error so this will roll back
+            result.putAll(ServiceUtil.returnError("Errors found processing message; information saved and return error sent back"));
             return result;
+        } else {
+            comiCtx.put("processingStatusId", "OAGMP_PROC_SUCCESS");
+            try {
+                dispatcher.runSync("updateOagisMessageInfo", comiCtx, 60, true);
+            } catch (GenericServiceException e){
+                String errMsg = "Error updating OagisMessageInfo for the Incoming Message: " + e.toString();
+                // don't pass this back, nothing they can do about it: errorMapList.add(UtilMisc.toMap("description", errMsg, "reasonCode", "GenericServiceException"));
+                Debug.logError(e, errMsg, module);
+            }
         }
-        result.putAll(ServiceUtil.returnSuccess("Action Performed Successfully"));
+        
+        result.putAll(ServiceUtil.returnSuccess("Service Completed Successfully"));
         return result;
     }
     
@@ -393,6 +420,7 @@
 
         String facilityId = UtilProperties.getPropertyValue("oagis.properties", "Oagis.Warehouse.PoReceiptFacilityId");
         String productId = null;
+        String orderId = null;
         // get RECEIPTLN elements from message
         List acknowledgeElementList = UtilXml.childElementList(acknowledgeDeliveryElement, "ns:RECEIPTLN");
         if (UtilValidate.isNotEmpty(acknowledgeElementList)) {
@@ -409,7 +437,7 @@
                 productId = UtilXml.childElementValue(receiptLnElement, "of:ITEM");
                 
                 Element documentRefElement = UtilXml.firstChildElement(receiptLnElement, "os:DOCUMNTREF");
-                String orderId = UtilXml.childElementValue(documentRefElement, "of:DOCUMENTID");
+                orderId = UtilXml.childElementValue(documentRefElement, "of:DOCUMENTID");
                 String orderTypeId = UtilXml.childElementValue(documentRefElement, "of:DOCTYPE");
                 if(orderTypeId.equals("PO")) {
                     orderTypeId = "PURCHASE_ORDER";
@@ -420,7 +448,7 @@
                 ripCtx.put("datetimeReceived", timestampItemReceived);
                 // Check reference to PO number, if exists
                 GenericValue orderHeader = null;
-                if(orderId != null) {
+                if (orderId != null) {
                     try {
                         List toStore = FastList.newInstance();
                         orderHeader = delegator.findByPrimaryKey("OrderHeader", UtilMisc.toMap("orderId", orderId));
@@ -487,14 +515,6 @@
                 }    
             }
         }
-        
-        comiCtx.put("processingStatusId", "OAGMP_PROC_SUCCESS");
-        try {
-            dispatcher.runSync("updateOagisMessageInfo", comiCtx, 60, true);
-        } catch (GenericServiceException e) {
-            String errMsg = "Error updating OagisMessageInfo for the Incoming Message: " + e.toString();
-            Debug.logError(e, errMsg, module);
-        }
 
         Map result = FastMap.newInstance();
         result.put("logicalId", logicalId);
@@ -502,14 +522,50 @@
         result.put("task", task);
         result.put("referenceId", referenceId);
         result.put("userLogin", userLogin);
-        
+
         if (errorMapList.size() > 0) {
-            result.put("errorMapList", errorMapList);
-            String errMsg = "Error Processing Received Messages";
-            result.putAll(ServiceUtil.returnError(errMsg));
+            // call services createOagisMsgErrInfosFromErrMapList and for incoming messages oagisSendConfirmBod
+            Map saveErrorMapListCtx = FastMap.newInstance();
+            saveErrorMapListCtx.put("logicalId", logicalId);
+            saveErrorMapListCtx.put("component", component);
+            saveErrorMapListCtx.put("task", task);
+            saveErrorMapListCtx.put("referenceId", referenceId);
+            saveErrorMapListCtx.put("errorMapList", errorMapList);
+            try {
+                dispatcher.runSync("createOagisMsgErrInfosFromErrMapList", saveErrorMapListCtx, 60, true);
+            } catch (GenericServiceException e){
+                String errMsg = "Error updating OagisMessageInfo for the Incoming Message: " + e.toString();
+                Debug.logError(e, errMsg, module);
+            }
+
+            try {
+                Map sendConfirmBodCtx = FastMap.newInstance();
+                sendConfirmBodCtx.putAll(saveErrorMapListCtx);
+                // NOTE: this is different for each service, should be shipmentId or returnId or PO orderId or etc
+                sendConfirmBodCtx.put("origRefId", orderId);
+
+                // run async because this will send a message back to the other server and may take some time, and/or fail
+                dispatcher.runAsync("oagisSendConfirmBod", sendConfirmBodCtx, null, true, 60, true);
+            } catch (GenericServiceException e){
+                String errMsg = "Error updating OagisMessageInfo for the Incoming Message: " + e.toString();
+                Debug.logError(e, errMsg, module);
+            }
+            
+            // DEJ20070807 what was this next line commented out? if there are errors we want to return an error so this will roll back
+            result.putAll(ServiceUtil.returnError("Errors found processing message; information saved and return error sent back"));
             return result;
+        } else {
+            comiCtx.put("processingStatusId", "OAGMP_PROC_SUCCESS");
+            try {
+                dispatcher.runSync("updateOagisMessageInfo", comiCtx, 60, true);
+            } catch (GenericServiceException e){
+                String errMsg = "Error updating OagisMessageInfo for the Incoming Message: " + e.toString();
+                // don't pass this back, nothing they can do about it: errorMapList.add(UtilMisc.toMap("description", errMsg, "reasonCode", "GenericServiceException"));
+                Debug.logError(e, errMsg, module);
+            }
         }
-        result.putAll(ServiceUtil.returnSuccess("Action Performed Successfully"));
+        
+        result.putAll(ServiceUtil.returnSuccess("Service Completed Successfully"));
         return result;
     }
     
@@ -604,7 +660,7 @@
                 String sign = UtilXml.childElementValue(qtyElement, "of:SIGN");
 
                 String productId = UtilXml.childElementValue(receiptLnElement, "of:ITEM");
-                if ( productId == null ) {
+                if (productId == null) {
                     String errMsg = "productId not available in Message" ;
                     errorMapList.add(UtilMisc.toMap("reasonCode", "ParseException", "description", errMsg));
                     Debug.logError(errMsg, module);
@@ -793,23 +849,50 @@
         result.put("task", task);
         result.put("referenceId", referenceId);
         result.put("userLogin", userLogin);
+
         if (errorMapList.size() > 0) {
-            result.put("errorMapList", errorMapList);
-            String errMsg = "Error Processing Received Messages";
-            result.putAll(ServiceUtil.returnError(errMsg));
+            // call services createOagisMsgErrInfosFromErrMapList and for incoming messages oagisSendConfirmBod
+            Map saveErrorMapListCtx = FastMap.newInstance();
+            saveErrorMapListCtx.put("logicalId", logicalId);
+            saveErrorMapListCtx.put("component", component);
+            saveErrorMapListCtx.put("task", task);
+            saveErrorMapListCtx.put("referenceId", referenceId);
+            saveErrorMapListCtx.put("errorMapList", errorMapList);
+            try {
+                dispatcher.runSync("createOagisMsgErrInfosFromErrMapList", saveErrorMapListCtx, 60, true);
+            } catch (GenericServiceException e){
+                String errMsg = "Error updating OagisMessageInfo for the Incoming Message: " + e.toString();
+                Debug.logError(e, errMsg, module);
+            }
+
+            try {
+                Map sendConfirmBodCtx = FastMap.newInstance();
+                sendConfirmBodCtx.putAll(saveErrorMapListCtx);
+                // NOTE: this is different for each service, should be shipmentId or returnId or PO orderId or etc
+                sendConfirmBodCtx.put("origRefId", returnId);
+
+                // run async because this will send a message back to the other server and may take some time, and/or fail
+                dispatcher.runAsync("oagisSendConfirmBod", sendConfirmBodCtx, null, true, 60, true);
+            } catch (GenericServiceException e){
+                String errMsg = "Error updating OagisMessageInfo for the Incoming Message: " + e.toString();
+                Debug.logError(e, errMsg, module);
+            }
+            
+            // DEJ20070807 what was this next line commented out? if there are errors we want to return an error so this will roll back
+            result.putAll(ServiceUtil.returnError("Errors found processing message; information saved and return error sent back"));
             return result;
         } else {
-            comiCtx.put("returnId", returnId);
             comiCtx.put("processingStatusId", "OAGMP_PROC_SUCCESS");
             try {
                 dispatcher.runSync("updateOagisMessageInfo", comiCtx, 60, true);
             } catch (GenericServiceException e){
                 String errMsg = "Error updating OagisMessageInfo for the Incoming Message: " + e.toString();
+                // don't pass this back, nothing they can do about it: errorMapList.add(UtilMisc.toMap("description", errMsg, "reasonCode", "GenericServiceException"));
                 Debug.logError(e, errMsg, module);
             }
         }
         
-        result.putAll(ServiceUtil.returnSuccess("Action Performed Successfully"));
+        result.putAll(ServiceUtil.returnSuccess("Service Completed Successfully"));
         result.put("inventoryItemIdList", invItemIds);
         return result;
     }

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?view=diff&rev=565576&r1=565575&r2=565576
==============================================================================
--- ofbiz/trunk/specialpurpose/oagis/src/org/ofbiz/oagis/OagisServices.java (original)
+++ ofbiz/trunk/specialpurpose/oagis/src/org/ofbiz/oagis/OagisServices.java Mon Aug 13 16:50:59 2007
@@ -351,20 +351,49 @@
         result.put("task", task);
         result.put("referenceId", referenceId);
         result.put("userLogin", userLogin);
-        
+
         if (errorMapList.size() > 0) {
-            String errMsg = "Error Processing Received Message";
-            result.put("errorMapList", errorMapList);
-            //result.putAll(ServiceUtil.returnError(errMsg));
+            // call services createOagisMsgErrInfosFromErrMapList and for incoming messages oagisSendConfirmBod
+            Map saveErrorMapListCtx = FastMap.newInstance();
+            saveErrorMapListCtx.put("logicalId", logicalId);
+            saveErrorMapListCtx.put("component", component);
+            saveErrorMapListCtx.put("task", task);
+            saveErrorMapListCtx.put("referenceId", referenceId);
+            saveErrorMapListCtx.put("errorMapList", errorMapList);
+            try {
+                dispatcher.runSync("createOagisMsgErrInfosFromErrMapList", saveErrorMapListCtx, 60, true);
+            } catch (GenericServiceException e){
+                String errMsg = "Error updating OagisMessageInfo for the Incoming Message: " + e.toString();
+                Debug.logError(e, errMsg, module);
+            }
+
+            
+            // TODO and NOTE DEJ20070813: should we really send back a Confirm BOD if there is an error with the Confirm BOD they send us? probably so... will do for now...
+            try {
+                Map sendConfirmBodCtx = FastMap.newInstance();
+                sendConfirmBodCtx.putAll(saveErrorMapListCtx);
+                // NOTE: this is different for each service, should be shipmentId or returnId or PO orderId or etc
+                // no such thing for confirm bod: sendConfirmBodCtx.put("origRefId", shipmentId);
+
+                // run async because this will send a message back to the other server and may take some time, and/or fail
+                dispatcher.runAsync("oagisSendConfirmBod", sendConfirmBodCtx, null, true, 60, true);
+            } catch (GenericServiceException e){
+                String errMsg = "Error updating OagisMessageInfo for the Incoming Message: " + e.toString();
+                Debug.logError(e, errMsg, module);
+            }
+            
+            // DEJ20070807 what was this next line commented out? if there are errors we want to return an error so this will roll back
+            result.putAll(ServiceUtil.returnError("Errors found processing message; information saved and return error sent back"));
             return result;
-        }
-        
-        oagisMsgInfoCtx.put("processingStatusId", "OAGMP_PROC_SUCCESS");
-        try {
-            dispatcher.runSync("updateOagisMessageInfo", oagisMsgInfoCtx, 60, true);
-        } catch (GenericServiceException e){
-            String errMsg = "Error updating OagisMessageInfo for the Incoming Message: " + e.toString();
-            Debug.logError(e, errMsg, module);
+        } else {
+            oagisMsgInfoCtx.put("processingStatusId", "OAGMP_PROC_SUCCESS");
+            try {
+                dispatcher.runSync("updateOagisMessageInfo", oagisMsgInfoCtx, 60, true);
+            } catch (GenericServiceException e){
+                String errMsg = "Error updating OagisMessageInfo for the Incoming Message: " + e.toString();
+                // don't pass this back, nothing they can do about it: errorMapList.add(UtilMisc.toMap("description", errMsg, "reasonCode", "GenericServiceException"));
+                Debug.logError(e, errMsg, module);
+            }
         }
         
         result.putAll(ServiceUtil.returnSuccess("Service Completed Successfully"));
@@ -437,11 +466,12 @@
             Debug.logError(e, errMsg, module);
         }
         
-        Map subServiceResult = FastMap.newInstance();
+        // call async, no additional results to return: Map subServiceResult = FastMap.newInstance();
         if (UtilValidate.isEmpty(oagisMessageInfo)) {
             if (bsrVerb.equalsIgnoreCase("CONFIRM") && bsrNoun.equalsIgnoreCase("BOD")) {
                 try {
-                    subServiceResult = dispatcher.runSync("receiveConfirmBod", UtilMisc.toMap("document", doc));
+                    // subServiceResult = dispatcher.runSync("receiveConfirmBod", UtilMisc.toMap("document", doc));
+                    dispatcher.runAsync("receiveConfirmBod", UtilMisc.toMap("document", doc), true);
                 } catch (GenericServiceException e) {
                     String errMsg = "Error running service receiveConfirmBod: " + e.toString();
                     errorList.add(UtilMisc.toMap("description", errMsg, "reasonCode", "GenericServiceException"));
@@ -506,9 +536,10 @@
         }
         
         Map result = ServiceUtil.returnSuccess();
-        result.putAll(subServiceResult);
         result.put("contentType", "text/plain");
 
+        /* no sub-service error processing to be done here, all handled in the sub-services:
+        result.putAll(subServiceResult);
         List errorMapList = (List) subServiceResult.get("errorMapList");
         if (UtilValidate.isNotEmpty(errorList)) {
             Iterator errListItr = errorList.iterator();
@@ -518,6 +549,7 @@
             }
             result.put("errorMapList", errorMapList);
         }
+        */
         
         return result;
     }

Modified: ofbiz/trunk/specialpurpose/oagis/src/org/ofbiz/oagis/OagisShipmentServices.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/oagis/src/org/ofbiz/oagis/OagisShipmentServices.java?view=diff&rev=565576&r1=565575&r2=565576
==============================================================================
--- ofbiz/trunk/specialpurpose/oagis/src/org/ofbiz/oagis/OagisShipmentServices.java (original)
+++ ofbiz/trunk/specialpurpose/oagis/src/org/ofbiz/oagis/OagisShipmentServices.java Mon Aug 13 16:50:59 2007
@@ -122,13 +122,6 @@
         Element shipmentElement = UtilXml.firstChildElement(daShowShipmentElement, "ns:SHIPMENT"); // n                              
         String shipmentId = UtilXml.childElementValue(shipmentElement, "of:DOCUMENTID"); // of          
 
-        Map result = FastMap.newInstance();
-        result.put("logicalId", logicalId);
-        result.put("component", component);
-        result.put("task", task);
-        result.put("referenceId", referenceId);
-        result.put("userLogin", userLogin);
-
         oagisMsgInfoCtx.put("logicalId", logicalId);
         oagisMsgInfoCtx.put("component", component);
         oagisMsgInfoCtx.put("task", task);
@@ -180,17 +173,11 @@
             errorMapList.add(UtilMisc.toMap("description", errMsg, "reasonCode", "ShipmentIdNotValid"));
         }
         
-        if (errorMapList.size() > 0) {
-            result.putAll(ServiceUtil.returnError("Errors found getting shipment information for incoming Show Shipment message; here is the first: " + errorMapList.get(0)));
-            result.put("errorMapList", errorMapList);
-            return result;
-        }
-
         String shipGroupSeqId = shipment.getString("primaryShipGroupSeqId");                
         String originFacilityId = shipment.getString("originFacilityId");                              
         
         List shipUnitElementList = UtilXml.childElementList(daShowShipmentElement, "ns:SHIPUNIT"); // n
-        if(UtilValidate.isNotEmpty(shipUnitElementList)) {
+        if(errorMapList.size() == 0 && UtilValidate.isNotEmpty(shipUnitElementList)) {
             Element shipUnitElement = (Element)shipUnitElementList.get(0);
             String trackingNum = UtilXml.childElementValue(shipUnitElement, "of:TRACKINGID"); // of
             String carrierCode = UtilXml.childElementValue(shipUnitElement, "of:CARRIER"); // of
@@ -257,7 +244,7 @@
                                 requireInventory = "N";
                             }
                             
-                            // TODO and NOTE: could there be more than one reservation record for a given shipment item? for example if there wasn't enough quantity in one inventory item and reservations on two were needed? yes
+                            // NOTE: there could be more than one reservation record for a given shipment item? for example if there wasn't enough quantity in one inventory item and reservations on two were needed
                             List orderItemShipGrpInvReservationList = delegator.findByAnd("OrderItemShipGrpInvRes", UtilMisc.toMap("orderId", orderId, "orderItemSeqId", orderItemSeqId,"shipGroupSeqId",shipGroupSeqId));
                             
                             // find the total quantity for all reservations
@@ -298,6 +285,8 @@
                                 continueLoop = true;
                             }
                             
+                            // TODO: if serialNumber does not exist in database add an error message
+                            
                             if (continueLoop) {
                                 continue;
                             }
@@ -359,7 +348,6 @@
                                     }            
                                 }
                             }
-                            
                         } catch (NumberFormatException e) {
                             String errMsg = "Error in format for number: " + e.toString();
                             errorMapList.add(UtilMisc.toMap("description", errMsg, "reasonCode", "NumberFormatException"));
@@ -386,10 +374,43 @@
             }  
         }  
         
+        Map result = FastMap.newInstance();
+        result.put("logicalId", logicalId);
+        result.put("component", component);
+        result.put("task", task);
+        result.put("referenceId", referenceId);
+        result.put("userLogin", userLogin);
+
         if (errorMapList.size() > 0) {
+            // call services createOagisMsgErrInfosFromErrMapList and for incoming messages oagisSendConfirmBod
+            Map saveErrorMapListCtx = FastMap.newInstance();
+            saveErrorMapListCtx.put("logicalId", logicalId);
+            saveErrorMapListCtx.put("component", component);
+            saveErrorMapListCtx.put("task", task);
+            saveErrorMapListCtx.put("referenceId", referenceId);
+            saveErrorMapListCtx.put("errorMapList", errorMapList);
+            try {
+                dispatcher.runSync("createOagisMsgErrInfosFromErrMapList", saveErrorMapListCtx, 60, true);
+            } catch (GenericServiceException e){
+                String errMsg = "Error updating OagisMessageInfo for the Incoming Message: " + e.toString();
+                Debug.logError(e, errMsg, module);
+            }
+
+            try {
+                Map sendConfirmBodCtx = FastMap.newInstance();
+                sendConfirmBodCtx.putAll(saveErrorMapListCtx);
+                // NOTE: this is different for each service, should be shipmentId or returnId or PO orderId or etc
+                sendConfirmBodCtx.put("origRefId", shipmentId);
+
+                // run async because this will send a message back to the other server and may take some time, and/or fail
+                dispatcher.runAsync("oagisSendConfirmBod", sendConfirmBodCtx, null, true, 60, true);
+            } catch (GenericServiceException e){
+                String errMsg = "Error updating OagisMessageInfo for the Incoming Message: " + e.toString();
+                Debug.logError(e, errMsg, module);
+            }
+            
             // DEJ20070807 what was this next line commented out? if there are errors we want to return an error so this will roll back
-            result.putAll(ServiceUtil.returnError("Errors found processing message"));
-            result.put("errorMapList", errorMapList);
+            result.putAll(ServiceUtil.returnError("Errors found processing message; information saved and return error sent back"));
             return result;
         } else {
             oagisMsgInfoCtx.put("processingStatusId", "OAGMP_PROC_SUCCESS");