You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by ja...@apache.org on 2007/04/06 21:30:23 UTC

svn commit: r526262 - in /ofbiz/trunk/framework: common/servicedef/ common/src/org/ofbiz/common/ service/servicedef/ webapp/src/org/ofbiz/webapp/event/ webtools/webapp/webtools/WEB-INF/

Author: jaz
Date: Fri Apr  6 12:30:22 2007
New Revision: 526262

URL: http://svn.apache.org/viewvc?view=rev&rev=526262
Log:
implemented simple service stream handler; allows reading the inputstream of a request from inside a service; useful for processing non-standard requests

Added:
    ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/event/ServiceStreamHandler.java   (with props)
Modified:
    ofbiz/trunk/framework/common/servicedef/services_test.xml
    ofbiz/trunk/framework/common/src/org/ofbiz/common/CommonServices.java
    ofbiz/trunk/framework/service/servicedef/services.xml
    ofbiz/trunk/framework/webtools/webapp/webtools/WEB-INF/controller.xml

Modified: ofbiz/trunk/framework/common/servicedef/services_test.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/common/servicedef/services_test.xml?view=diff&rev=526262&r1=526261&r2=526262
==============================================================================
--- ofbiz/trunk/framework/common/servicedef/services_test.xml (original)
+++ ofbiz/trunk/framework/common/servicedef/services_test.xml Fri Apr  6 12:30:22 2007
@@ -171,6 +171,11 @@
         <implements service="serviceEcaConditionInterface"/>
     </service>
 
+    <service name="serviceStreamTest" engine="java" auth="false"
+            location="org.ofbiz.common.CommonServices" invoke="streamTest">
+        <implements service="serviceStreamInterface"/>
+    </service>
+    
     <service name="ping" engine="java" export="true" require-new-transaction="true"
             location="org.ofbiz.common.CommonServices" invoke="ping">
         <description>Test Ping Service</description>

Modified: ofbiz/trunk/framework/common/src/org/ofbiz/common/CommonServices.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/common/src/org/ofbiz/common/CommonServices.java?view=diff&rev=526262&r1=526261&r2=526262
==============================================================================
--- ofbiz/trunk/framework/common/src/org/ofbiz/common/CommonServices.java (original)
+++ ofbiz/trunk/framework/common/src/org/ofbiz/common/CommonServices.java Fri Apr  6 12:30:22 2007
@@ -18,9 +18,7 @@
  *******************************************************************************/
 package org.ofbiz.common;
 
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.RandomAccessFile;
+import java.io.*;
 import java.sql.Timestamp;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -435,6 +433,35 @@
             Debug.logError(e, module);
         }
         return ServiceUtil.returnSuccess();
+    }
+
+    public static Map streamTest(DispatchContext dctx, Map context) {
+        InputStream in = (InputStream) context.get("inputStream");
+        OutputStream out = (OutputStream) context.get("outputStream");
+
+        BufferedReader reader = new BufferedReader(new InputStreamReader(in));
+        Writer writer = new OutputStreamWriter(out);
+        String line;
+
+        try {
+            while ((line = reader.readLine()) != null) {
+                Debug.log("Read line: " + line, module);
+                writer.write(line);               
+            }                       
+        } catch (IOException e) {
+            Debug.logError(e, module);
+            return ServiceUtil.returnError(e.getMessage());
+        } finally {
+            try {
+                writer.close();
+            } catch (Exception e) {
+                Debug.logError(e, module);
+            }
+        }       
+
+        Map result = ServiceUtil.returnSuccess();
+        result.put("contentType", "text/plain");
+        return result;
     }
 
     public static Map ping(DispatchContext dctx, Map context) {

Modified: ofbiz/trunk/framework/service/servicedef/services.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/service/servicedef/services.xml?view=diff&rev=526262&r1=526261&r2=526262
==============================================================================
--- ofbiz/trunk/framework/service/servicedef/services.xml (original)
+++ ofbiz/trunk/framework/service/servicedef/services.xml Fri Apr  6 12:30:22 2007
@@ -73,6 +73,13 @@
         <attribute name="userLogin" type="org.ofbiz.entity.GenericValue" mode="OUT"/>
         <attribute name="userLoginSession" type="java.util.Map" mode="OUT" optional="true"/>
     </service>
+
+    <service name="serviceStreamInterface" engine="interface">
+        <description>Inteface to describe services call with streams</description>
+        <attribute name="inputStream" type="java.io.InputStream" mode="IN"/>
+        <attribute name="outputStream" type="java.io.OutputStream" mode="IN"/>
+        <attribute name="contentType" type="String" mode="OUT"/> 
+    </service>
     
     <service name="serviceEcaConditionInterface" engine="interface">
         <description>Interface to describe services which are used as SECA conditions</description>

Added: ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/event/ServiceStreamHandler.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/event/ServiceStreamHandler.java?view=auto&rev=526262
==============================================================================
--- ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/event/ServiceStreamHandler.java (added)
+++ ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/event/ServiceStreamHandler.java Fri Apr  6 12:30:22 2007
@@ -0,0 +1,97 @@
+/*
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+ */
+
+package org.ofbiz.webapp.event;
+
+import org.ofbiz.entity.GenericDelegator;
+import org.ofbiz.service.GenericDispatcher;
+import org.ofbiz.service.LocalDispatcher;
+import org.ofbiz.service.GenericServiceException;
+import org.ofbiz.service.ServiceUtil;
+import org.ofbiz.base.util.Debug;
+
+import javax.servlet.ServletContext;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.*;
+import java.util.Map;
+
+import javolution.util.FastMap;
+
+/**
+ * ServiceStreamHandler
+ */
+public class ServiceStreamHandler implements EventHandler {
+
+    public static final String module = ServiceStreamHandler.class.getName();
+    public static final String dispatcherName = "sstream-dispatcher";
+    protected LocalDispatcher dispatcher;
+    protected GenericDelegator delegator;
+
+    public void init(ServletContext context) throws EventHandlerException {
+        String delegatorName = context.getInitParameter("delegatorName");
+        this.delegator = GenericDelegator.getGenericDelegator(delegatorName);
+        this.dispatcher = GenericDispatcher.getLocalDispatcher(dispatcherName, delegator);
+    }
+
+    public String invoke(String eventPath, String eventMethod, HttpServletRequest request, HttpServletResponse response) throws EventHandlerException {        
+        InputStream in;
+        try {
+            in = request.getInputStream();
+        } catch (IOException e) {
+            throw new EventHandlerException(e.getMessage(), e);
+        }
+        OutputStream out;
+        try {
+            out = response.getOutputStream();
+        } catch (IOException e) {
+            throw new EventHandlerException(e.getMessage(), e);
+        }
+
+        Map context = FastMap.newInstance();
+        context.put("inputStream", in);
+        context.put("outputStream", out);
+
+        Debug.log("Running service with context: " + context, module);
+        Map resp;
+        try {
+            resp = dispatcher.runSync(eventMethod, context);
+        } catch (GenericServiceException e) {
+            throw new EventHandlerException(e.getMessage(), e);
+        }
+        Debug.log("Received respone: " + resp, module);
+        if (ServiceUtil.isError(resp)) {
+            throw new EventHandlerException(ServiceUtil.getErrorMessage(resp));
+        }
+        String contentType = (String) resp.get("contentType");
+        if (contentType != null) {
+            response.setContentType(contentType);
+        }
+
+        if (out != null) {
+            try {
+                out.close();
+            } catch (IOException e) {
+                throw new EventHandlerException(ServiceUtil.getErrorMessage(resp));
+            }
+        }
+        
+        return null;
+    }
+}

Propchange: ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/event/ServiceStreamHandler.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/event/ServiceStreamHandler.java
------------------------------------------------------------------------------
    svn:keywords = "Date Rev Author URL Id"

Propchange: ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/event/ServiceStreamHandler.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: ofbiz/trunk/framework/webtools/webapp/webtools/WEB-INF/controller.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/webtools/webapp/webtools/WEB-INF/controller.xml?view=diff&rev=526262&r1=526261&r2=526262
==============================================================================
--- ofbiz/trunk/framework/webtools/webapp/webtools/WEB-INF/controller.xml (original)
+++ ofbiz/trunk/framework/webtools/webapp/webtools/WEB-INF/controller.xml Fri Apr  6 12:30:22 2007
@@ -27,6 +27,7 @@
     <handler name="java" type="request" class="org.ofbiz.webapp.event.JavaEventHandler"/>
     <handler name="soap" type="request" class="org.ofbiz.webapp.event.SOAPEventHandler"/>
     <handler name="xmlrpc" type="request" class="org.ofbiz.webapp.event.XmlRpcEventHandler"/>
+    <handler name="stream" type="request" class="org.ofbiz.webapp.event.ServiceStreamHandler"/>
     <handler name="service" type="request" class="org.ofbiz.webapp.event.ServiceEventHandler"/>
     <handler name="service-multi" type="request" class="org.ofbiz.webapp.event.ServiceMultiEventHandler"/>
     <handler name="simple" type="request" class="org.ofbiz.webapp.event.SimpleEventHandler"/>
@@ -100,6 +101,11 @@
         <event type="service" invoke="testScv" />
         <response name="error" type="view" value="error"/>
         <response name="success" type="view" value="error"/>
+    </request-map>
+    <request-map uri="streamTest">
+        <event type="stream" invoke="serviceStreamTest"/>
+        <response name="success" type="none"/>
+        <response name="error" type="none"/>
     </request-map>
 
     <request-map uri="yahoo">