cocoon-cvs mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From vgritse...@apache.org
Subject cvs commit: xml-cocoon2/src/java/org/apache/cocoon/components/language/markup/xsp SOAPHelper.java
Date Thu, 20 Jun 2002 04:30:03 GMT
vgritsenko    2002/06/19 21:30:03

  Modified:    src/java/org/apache/cocoon/components/language/markup/xsp
                        SOAPHelper.java
  Log:
  Optimize inline object handling.
  Fix InputSource handling: it can have either byte or character stream.
  
  Revision  Changes    Path
  1.8       +108 -98   xml-cocoon2/src/java/org/apache/cocoon/components/language/markup/xsp/SOAPHelper.java
  
  Index: SOAPHelper.java
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/language/markup/xsp/SOAPHelper.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- SOAPHelper.java	22 Feb 2002 07:00:08 -0000	1.7
  +++ SOAPHelper.java	20 Jun 2002 04:30:03 -0000	1.8
  @@ -50,16 +50,9 @@
   */
   package org.apache.cocoon.components.language.markup.xsp;
   
  -import java.io.BufferedReader;
  -import java.io.IOException;
  -import java.io.InputStream;
  -import java.io.InputStreamReader;
  -import java.io.OutputStream;
  -import java.net.MalformedURLException;
  -import java.net.URL;
  -import java.util.HashMap;
   import org.apache.avalon.framework.component.ComponentException;
   import org.apache.avalon.framework.component.ComponentManager;
  +
   import org.apache.cocoon.ProcessingException;
   import org.apache.cocoon.components.xscript.XScriptManager;
   import org.apache.cocoon.components.xscript.XScriptObject;
  @@ -71,106 +64,123 @@
   import org.apache.commons.httpclient.methods.PostMethod;
   import org.xml.sax.InputSource;
   
  +import java.io.InputStreamReader;
  +import java.io.Reader;
  +import java.net.MalformedURLException;
  +import java.net.URL;
  +import java.util.HashMap;
  +
   /**
    * Helper for the SOAP logicsheet.
    *
    * @author <a href="mailto:ovidiu@cup.hp.com">Ovidiu Predescu</a>
  + * @author <a href="mailto:vgritsenko@apache.org">Vadim Gritsenko</a>
    * @version CVS $Id$
    * @since July 16, 2001
    */
  -public class SOAPHelper
  -{
  -  XScriptManager xscriptManager;
  -  URL url;
  -  String action = "";
  -  XScriptObject xscriptObject;
  -
  -  public SOAPHelper(ComponentManager manager, String urlContext, String url,
  -                    String action, XScriptObject xscriptObject)
  -    throws MalformedURLException, ComponentException
  -  {
  -    this.xscriptManager = (XScriptManager)manager.lookup(XScriptManager.ROLE);
  -    URL context = new URL(urlContext);
  -    this.url = new URL(context, url);
  -    this.action = action;
  -    this.xscriptObject = xscriptObject;
  -  }
  -
  -  public XScriptObject invoke()
  -    throws ProcessingException
  -  {
  -    HttpConnection conn = null;
  -
  -    try {
  -      if (action == null || action.equals(""))
  -        action = "\"\"";
  -
  -      String host = url.getHost();
  -      int port = url.getPort();
  -
  -      if (System.getProperty("http.proxyHost") != null) {
  -        String proxyHost = System.getProperty("http.proxyHost");
  -        int proxyPort = Integer.parseInt(System.getProperty("http.proxyPort"));
  -        conn = new HttpConnection(proxyHost, proxyPort, host, port);
  -      }
  -      else {
  -        conn = new HttpConnection(host, port);
  -      }
  -
  -      PostMethod method = new PostMethod(url.getFile()) {
  -          protected String generateRequestBody(HashMap params)
  -          {
  -            try {
  -              StringBuffer bodyBuffer
  -                = new StringBuffer(super.generateRequestBody(params));
  +public class SOAPHelper {
  +    XScriptManager xscriptManager;
  +    URL url;
  +    String action = "";
  +    XScriptObject xscriptObject;
  +
  +    public SOAPHelper(ComponentManager manager, String urlContext, String url,
  +                      String action, XScriptObject xscriptObject)
  +            throws MalformedURLException, ComponentException
  +    {
  +        this.xscriptManager = (XScriptManager) manager.lookup(XScriptManager.ROLE);
  +        URL context = new URL(urlContext);
  +        this.url = new URL(context, url);
  +        this.action = action;
  +        this.xscriptObject = xscriptObject;
  +    }
   
  -              // Write the SOAP request
  -              InputSource saxInputStream = xscriptObject.getInputSource();
  -              InputStream is = saxInputStream.getByteStream();
  -              InputStreamReader isr = new InputStreamReader(is);
  -
  -              char[] buffer = new char[1024];
  -              int len;
  -              while ((len = isr.read(buffer)) > 0)
  -                bodyBuffer.append(buffer, 0, len);
  -              isr.close();
  -              is.close();
  -              return bodyBuffer.toString();
  +    public XScriptObject invoke() throws ProcessingException
  +    {
  +        HttpConnection conn = null;
  +
  +        try {
  +            if (action == null || action.equals("")) {
  +                action = "\"\"";
               }
  -            catch (Exception ex) {
  -              return null;
  +
  +            String host = url.getHost();
  +            int port = url.getPort();
  +
  +            if (System.getProperty("http.proxyHost") != null) {
  +                String proxyHost = System.getProperty("http.proxyHost");
  +                int proxyPort = Integer.parseInt(System.getProperty("http.proxyPort"));
  +                conn = new HttpConnection(proxyHost, proxyPort, host, port);
  +            } else {
  +                conn = new HttpConnection(host, port);
               }
  -          }
  -        };
   
  -        method.setRequestHeader(
  -                new Header("Content-type", "text/xml; charset=\"utf-8\""));
  -        method.setRequestHeader(new Header("SOAPAction", action));
  -        method.setUseDisk(false);
  -
  -        method.execute(new HttpState(), conn);
  -
  -        String ret = method.getResponseBodyAsString();
  -        int startOfXML = ret.indexOf("<?xml");
  -        if(startOfXML == -1) { // No xml?!
  -            throw new ProcessingException("Invalid response - no xml");
  -        }
  +            PostMethod method = new PostMethod(url.getFile()) {
  +                protected String generateRequestBody(HashMap params) {
  +                    try {
  +                        StringBuffer bodyBuffer
  +                                = new StringBuffer(super.generateRequestBody(params));
  +
  +                        // Write the SOAP request body
  +                        if (xscriptObject instanceof XScriptObjectInlineXML) {
  +                            // Skip overhead
  +                            bodyBuffer.append(((XScriptObjectInlineXML) xscriptObject).getContent());
  +                        } else {
  +                            InputSource saxSource = xscriptObject.getInputSource();
  +
  +                            Reader r = null;
  +                            // Byte stream or character stream?
  +                            if (saxSource.getByteStream() != null) {
  +                                r = new InputStreamReader(saxSource.getByteStream());
  +                            } else {
  +                                r = saxSource.getCharacterStream();
  +                            }
  +
  +                            try {
  +                                char[] buffer = new char[1024];
  +                                int len;
  +                                while ((len = r.read(buffer)) > 0)
  +                                    bodyBuffer.append(buffer, 0, len);
  +                            } finally {
  +                                if (r != null) {
  +                                    r.close();
  +                                }
  +                            }
  +                        }
  +
  +                        return bodyBuffer.toString();
  +                    } catch (Exception ex) {
  +                        // FIXME (VG): Will result in NPE in httpClient code
  +                        return null;
  +                    }
  +                }
  +            };
  +
  +            method.setRequestHeader(
  +                    new Header("Content-type", "text/xml; charset=\"utf-8\""));
  +            method.setRequestHeader(new Header("SOAPAction", action));
  +            method.setUseDisk(false);
  +
  +            method.execute(new HttpState(), conn);
  +
  +            String ret = method.getResponseBodyAsString();
  +            int startOfXML = ret.indexOf("<?xml");
  +            if (startOfXML == -1) { // No xml?!
  +                throw new ProcessingException("Invalid response - no xml");
  +            }
   
  -        return new XScriptObjectInlineXML(
  -            xscriptManager,
  -            ret.substring(startOfXML));
  -    }
  -    catch (Exception ex) {
  -      throw new ProcessingException("Error invoking remote service: " + ex,
  -                                    ex);
  -    }
  -    finally {
  -      try {
  -        if (conn != null)
  -          conn.close();
  -      }
  -      catch (Exception ex) {
  -      }
  +            return new XScriptObjectInlineXML(
  +                    xscriptManager,
  +                    ret.substring(startOfXML));
  +        } catch (Exception ex) {
  +            throw new ProcessingException("Error invoking remote service: " + ex,
  +                    ex);
  +        } finally {
  +            try {
  +                if (conn != null)
  +                    conn.close();
  +            } catch (Exception ex) {
  +            }
  +        }
       }
  -  }
   }
  
  
  

----------------------------------------------------------------------
In case of troubles, e-mail:     webmaster@xml.apache.org
To unsubscribe, e-mail:          cocoon-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: cocoon-cvs-help@xml.apache.org


Mime
View raw message