You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by jo...@apache.org on 2007/07/03 12:17:06 UTC

svn commit: r552772 - in /ofbiz/trunk/specialpurpose/oagis: config/oagis.properties servicedef/secas.xml servicedef/services.xml src/org/ofbiz/oagis/OagisShipmentServices.java

Author: jonesde
Date: Tue Jul  3 03:17:05 2007
New Revision: 552772

URL: http://svn.apache.org/viewvc?view=rev&rev=552772
Log:
Some changes to the processShipment service (which is now oagisProcessShipment to separate it further) so it can do various things with the export output

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/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=552772&r1=552771&r2=552772
==============================================================================
--- ofbiz/trunk/specialpurpose/oagis/config/oagis.properties (original)
+++ ofbiz/trunk/specialpurpose/oagis/config/oagis.properties Tue Jul  3 03:17:05 2007
@@ -27,7 +27,10 @@
 Oagis.Template.ReceiveDelivery=component://oagis/widget/MessageInfoScreens.xml#ReceiveDelivery
 Oagis.Template.ProcessShipment=component://oagis/widget/MessageInfoScreens.xml#ProcessShipment
 
+# Client Cert, etc settings
+auth.client.certificate.alias=testrpckey
+
 # 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://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

Modified: ofbiz/trunk/specialpurpose/oagis/servicedef/secas.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/oagis/servicedef/secas.xml?view=diff&rev=552772&r1=552771&r2=552772
==============================================================================
--- ofbiz/trunk/specialpurpose/oagis/servicedef/secas.xml (original)
+++ ofbiz/trunk/specialpurpose/oagis/servicedef/secas.xml Tue Jul  3 03:17:05 2007
@@ -26,7 +26,7 @@
         <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="processShipment" mode="sync"/>
+        <action service="oagisProcessShipment" mode="sync"/>
     </eca-->
     <eca service="processShipment" event="commit" run-on-error="false">
         <action service="createOagisMessageInfo" mode="sync"/>

Modified: ofbiz/trunk/specialpurpose/oagis/servicedef/services.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/specialpurpose/oagis/servicedef/services.xml?view=diff&rev=552772&r1=552771&r2=552772
==============================================================================
--- ofbiz/trunk/specialpurpose/oagis/servicedef/services.xml (original)
+++ ofbiz/trunk/specialpurpose/oagis/servicedef/services.xml Tue Jul  3 03:17:05 2007
@@ -104,11 +104,16 @@
         <attribute name="bodyParameters" type="Map" mode="IN" optional="true"/>
         <attribute name="body" type="String" mode="OUT" optional="true"/>
     </service>
-    <service name="processShipment" max-retry="0" engine="java"
-        location="org.ofbiz.oagis.OagisShipmentServices" invoke="processShipment">
-        <description>Process Shipment</description>
+    <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="outputStream" type="java.io.OutputStream" mode="IN"/>
+        <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"/>
+        <attribute name="outputStream" type="java.io.OutputStream" mode="IN" optional="true"/>
         <override name="orderId" mode="INOUT" type="String" optional="false"/>
     </service>
     <service name="sendProcessShipmentMsg" max-retry="0" engine="simple"

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=552772&r1=552771&r2=552772
==============================================================================
--- ofbiz/trunk/specialpurpose/oagis/src/org/ofbiz/oagis/OagisShipmentServices.java (original)
+++ ofbiz/trunk/specialpurpose/oagis/src/org/ofbiz/oagis/OagisShipmentServices.java Tue Jul  3 03:17:05 2007
@@ -18,9 +18,14 @@
 specific language governing permissions and limitations
 under the License.
 **/
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileOutputStream;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.io.OutputStreamWriter;
+import java.io.PrintWriter;
+import java.io.StringWriter;
 import java.io.Writer;
 import java.sql.Timestamp;
 import java.text.DateFormat;
@@ -37,9 +42,12 @@
 import javolution.util.FastList;
 
 import org.ofbiz.base.util.Debug;
+import org.ofbiz.base.util.HttpClient;
+import org.ofbiz.base.util.SSLUtil;
 import org.ofbiz.base.util.UtilDateTime;
 import org.ofbiz.base.util.UtilMisc;
 import org.ofbiz.base.util.UtilProperties;
+import org.ofbiz.base.util.UtilValidate;
 import org.ofbiz.base.util.UtilXml;
 import org.ofbiz.base.util.collections.MapStack;
 import org.ofbiz.entity.GenericDelegator;
@@ -71,6 +79,8 @@
     protected static final FoFormRenderer foFormRenderer = new FoFormRenderer();
     
     public static final String resource = "OagisUiLabels";
+
+    public static final String certAlias = UtilProperties.getPropertyValue("oagis.properties", "auth.client.certificate.alias");
     
     public static Map showShipment(DispatchContext ctx, Map context) {
         InputStream in = (InputStream) context.get("inputStream");
@@ -177,12 +187,18 @@
         return result;
     }
 
-    public static Map processShipment(DispatchContext ctx, Map context) {
+    public static Map oagisProcessShipment(DispatchContext ctx, Map context) {
         LocalDispatcher dispatcher = ctx.getDispatcher();
         GenericDelegator delegator = ctx.getDelegator();
         String orderId = (String) context.get("orderId");
         String shipmentId = (String) context.get("shipmentId");
         GenericValue userLogin = (GenericValue) context.get("userLogin");
+        
+        String sendToUrl = (String) context.get("sendToUrl");
+        String saveToFilename = (String) context.get("saveToFilename");
+        String saveToDirectory = (String) context.get("saveToDirectory");
+        OutputStream out = (OutputStream) context.get("outputStream");
+        
         Map result = ServiceUtil.returnSuccess();
         MapStack bodyParameters =  MapStack.create();
         if (userLogin == null) {
@@ -241,8 +257,10 @@
                     while (oiIter.hasNext()) {
                         GenericValue orderItem = (GenericValue) oiIter.next();
                         String correspondingPoId = orderItem.getString("correspondingPoId");
-                        correspondingPoIdSet.add(correspondingPoId);
-                        bodyParameters.put("correspondingPoIdSet", correspondingPoIdSet);
+                        if (correspondingPoId != null) {
+	                        correspondingPoIdSet.add(correspondingPoId);
+	                        bodyParameters.put("correspondingPoIdSet", correspondingPoIdSet);
+                        }
                     }
                 } catch (GenericEntityException e) {
                     Debug.logError(e, module);
@@ -315,14 +333,60 @@
                 bodyParameters.put("orderId", orderId);
                 bodyParameters.put("userLogin", userLogin);
                 String bodyScreenUri = UtilProperties.getPropertyValue("oagis.properties", "Oagis.Template.ProcessShipment");
-                OutputStream out = (OutputStream) context.get("outputStream");
-                Writer writer = new OutputStreamWriter(out);
+
+                Writer writer = null;
+                if (out != null) {
+                    writer = new OutputStreamWriter(out);
+                } else if (UtilValidate.isNotEmpty(saveToFilename)) {
+                	try {
+                        File outdir = new File(saveToDirectory);
+                        if (!outdir.exists()) {
+                            outdir.mkdir();
+                        }
+                        writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File(outdir, saveToFilename)), "UTF-8")));
+                	} catch (Exception e) {
+                		String errMsg = "Error opening file to save message to [" + saveToFilename + "]: " + e.toString();
+                        Debug.logError(e, errMsg, module);
+                        return ServiceUtil.returnError(errMsg);
+                	}
+                } else if (UtilValidate.isNotEmpty(sendToUrl)) {
+                	writer = new StringWriter();
+                }
+
                 ScreenRenderer screens = new ScreenRenderer(writer, bodyParameters, new HtmlScreenRenderer());
                 try {
                     screens.render(bodyScreenUri);
+                    writer.close();
                 } catch (Exception e) {
-                      Debug.logError(e, "Error rendering [text/xml]: ", module);
+                	String errMsg = "Error rendering message: " + e.toString();
+                    Debug.logError(e, errMsg, module);
+                    return ServiceUtil.returnError(errMsg);
                 }
+                
+                // TODO: call service with require-new-transaction=true to save the OagisMessageInfo data (to make sure it saves before)
+
+                if (UtilValidate.isNotEmpty(sendToUrl)) {
+                    HttpClient http = new HttpClient(sendToUrl);
+
+                    // test parameters
+                    http.setHostVerificationLevel(SSLUtil.HOSTCERT_NO_CHECK);
+                    http.setAllowUntrusted(true);
+                    http.setDebug(true);
+                      
+                    // needed XML post parameters
+                    http.setClientCertificateAlias(certAlias);
+                    http.setContentType("text/xml");
+                    http.setKeepAlive(true);
+
+                    try {
+                    	String resp = http.post(writer.toString());
+                    } catch (Exception e) {
+                    	String errMsg = "Error posting message to server with UTL [" + sendToUrl + "]: " + e.toString();
+                        Debug.logError(e, errMsg, module);
+                        return ServiceUtil.returnError(errMsg);
+                    }
+                }
+
                 // prepare map to Create Oagis Message Info
                 result.put("component", "INVENTORY");
                 result.put("task", "SHIPREQUES"); // Actual value of task is "SHIPREQUEST" which is more than 10 char