You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by ke...@apache.org on 2007/12/13 03:52:49 UTC

svn commit: r603805 - in /webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/builder: BuilderUtil.java MultipartFormDataBuilder.java

Author: keithc
Date: Wed Dec 12 18:52:47 2007
New Revision: 603805

URL: http://svn.apache.org/viewvc?rev=603805&view=rev
Log:
Applying midified version of the patch (Removing the code formatting) given in Axis2-3394. Thanks takanori.


Modified:
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/builder/BuilderUtil.java
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/builder/MultipartFormDataBuilder.java

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/builder/BuilderUtil.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/builder/BuilderUtil.java?rev=603805&r1=603804&r2=603805&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/builder/BuilderUtil.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/builder/BuilderUtil.java Wed Dec 12 18:52:47 2007
@@ -25,6 +25,7 @@
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMException;
 import org.apache.axiom.om.OMNamespace;
+import org.apache.axiom.om.OMText;
 import org.apache.axiom.om.impl.MTOMConstants;
 import org.apache.axiom.om.impl.builder.StAXBuilder;
 import org.apache.axiom.om.impl.builder.StAXOMBuilder;
@@ -60,6 +61,7 @@
 import org.apache.ws.commons.schema.XmlSchemaSequence;
 import org.apache.ws.commons.schema.XmlSchemaType;
 
+import javax.activation.DataHandler;
 import javax.xml.namespace.QName;
 import javax.xml.parsers.FactoryConfigurationError;
 import javax.xml.stream.XMLStreamException;
@@ -136,16 +138,17 @@
                         boolean nillable = innerElement.isNillable();
                         String name =
                                 qName != null ? qName.getLocalPart() : innerElement.getName();
-                        String value;
+                            Object value;
                         OMNamespace ns = (qName == null ||
                                 qName.getNamespaceURI() == null
                                 || qName.getNamespaceURI().length() == 0) ?
                                 null : soapFactory.createOMNamespace(
                                 qName.getNamespaceURI(), null);
-                        while ((value = (String) requestParameterMap.get(name)) != null) {
 
-                            soapFactory.createOMElement(name, ns,
-                                                        bodyFirstChild).setText(value);
+                            // FIXME changed
+                            while ((value = requestParameterMap.get(name)) != null) {
+                                addRequestParameter(soapFactory,
+                                        bodyFirstChild, ns, name, value);
                             minOccurs--;
                         }
                         if (minOccurs > 0) {
@@ -182,15 +185,34 @@
             Iterator requestParamMapIter = requestParameterMap.keySet().iterator();
             while (requestParamMapIter.hasNext()) {
                 String key = (String) requestParamMapIter.next();
-                String value = (String) requestParameterMap.get(key);
+                Object value = requestParameterMap.get(key);
                 if (value != null) {
-                    soapFactory.createOMElement(key, null, bodyFirstChild).setText(value);
+                    addRequestParameter(soapFactory, bodyFirstChild, null, key,
+                            value);
                 }
 
             }
         }
     }
 
+    private static void addRequestParameter(SOAPFactory soapFactory,
+                                            OMElement bodyFirstChild,
+                                            OMNamespace ns,
+                                            String key,
+                                            Object parameter) {
+        if (parameter instanceof DataHandler) {
+            DataHandler dataHandler = (DataHandler)parameter;
+            OMText dataText = bodyFirstChild.getOMFactory().createOMText(
+                    dataHandler, true);
+            soapFactory.createOMElement(key, ns, bodyFirstChild).addChild(
+                    dataText);
+        } else {
+            String textValue = parameter.toString();
+            soapFactory.createOMElement(key, ns, bodyFirstChild).setText(
+                    textValue);
+        }
+    }
+
     public static StAXBuilder getPOXBuilder(InputStream inStream, String charSetEnc)
             throws XMLStreamException {
         StAXBuilder builder;
@@ -213,7 +235,7 @@
         String encoding = getCharSetEncoding(is2, charSetEncoding);
         return new BufferedReader(new InputStreamReader(is2, encoding));
     }
-    
+
     /**
      * Convenience method to get a PushbackInputStream so that we can read the BOM
      * @param is
@@ -222,7 +244,7 @@
     public static PushbackInputStream getPushbackInputStream(InputStream is) {
         return new PushbackInputStream(is, BOM_SIZE);
     }
-    
+
     /**
      * Use the BOM Mark to identify the encoding to be used. Fall back to
      * default encoding specified
@@ -235,9 +257,9 @@
         String encoding;
         byte bom[] = new byte[BOM_SIZE];
         int n, unread;
-        
+
         n = is2.read(bom, 0, bom.length);
-        
+
         if ((bom[0] == (byte) 0xEF) && (bom[1] == (byte) 0xBB) && (bom[2] == (byte) 0xBF)) {
             encoding = "UTF-8";
             if (log.isDebugEnabled()) {
@@ -271,7 +293,7 @@
             }
             unread = n - 4;
         } else {
-            
+
             // Unicode BOM mark not found, unread all bytes
             encoding = defaultEncoding;
             if (log.isDebugEnabled()) {
@@ -279,7 +301,7 @@
             }
             unread = n;
         }
-        
+
         if (unread > 0) {
             is2.unread(bom, (n - unread), unread);
         }
@@ -375,7 +397,7 @@
         try {
             PushbackInputStream pis = getPushbackInputStream(attachments.getSOAPPartInputStream());
             String actualCharSetEncoding = getCharSetEncoding(pis, charSetEncoding);
-            
+
             streamReader = StAXUtils.createXMLStreamReader(pis, actualCharSetEncoding);
         } catch (IOException e) {
             throw new XMLStreamException(e);
@@ -504,7 +526,7 @@
             if (log.isDebugEnabled()) {
                 log.debug("Creating an Attachments map.  The content-length is" + contentLength);
             }
-            attachments = 
+            attachments =
                 new Attachments(inStream,
                                 contentTypeString,
                                 fileCacheForAttachments,
@@ -515,14 +537,14 @@
             if (log.isDebugEnabled()) {
                 log.debug("Creating an Attachments map.");
             }
-            attachments = 
+            attachments =
                 new Attachments(inStream,
                                 contentTypeString,
                                 fileCacheForAttachments,
                                 attachmentRepoDir,
                                 attachmentSizeThreshold);
         }
-            
+
         return attachments;
     }
 

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/builder/MultipartFormDataBuilder.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/builder/MultipartFormDataBuilder.java?rev=603805&r1=603804&r2=603805&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/builder/MultipartFormDataBuilder.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/builder/MultipartFormDataBuilder.java Wed Dec 12 18:52:47 2007
@@ -19,9 +19,12 @@
 
 package org.apache.axis2.builder;
 
+import org.apache.axiom.attachments.ByteArrayDataSource;
+import org.apache.axiom.attachments.CachedFileDataSource;
 import org.apache.axiom.om.OMAbstractFactory;
 import org.apache.axiom.om.OMElement;
 import org.apache.axis2.AxisFault;
+import org.apache.axis2.Constants;
 import org.apache.axis2.context.MessageContext;
 import org.apache.axis2.transport.http.HTTPConstants;
 import org.apache.axis2.util.MultipleEntryHashMap;
@@ -32,6 +35,8 @@
 import org.apache.commons.fileupload.servlet.ServletFileUpload;
 import org.apache.commons.fileupload.servlet.ServletRequestContext;
 
+import javax.activation.DataHandler;
+import javax.activation.DataSource;
 import javax.servlet.http.HttpServletRequest;
 import java.io.InputStream;
 import java.util.Iterator;
@@ -51,8 +56,19 @@
         if (request == null) {
             throw new AxisFault("Cannot create DocumentElement without HttpServletRequest");
         }
+
+        // TODO: Do check ContentLength for the max size,
+        //       but it can't be configured anywhere.
+        //       I think that it cant be configured at web.xml or axis2.xml.
+        
+        // FIXME changed
+        String charSetEncoding = (String)messageContext.getProperty(Constants.Configuration.CHARACTER_SET_ENCODING);
+        if (charSetEncoding == null) {
+            charSetEncoding = request.getCharacterEncoding();
+        }
+
         try {
-            parameterMap = getParameterMap(request);
+            parameterMap = getParameterMap(request, charSetEncoding);
             return BuilderUtil.buildsoapMessage(messageContext, parameterMap,
                                                 OMAbstractFactory.getSOAP12Factory());
 
@@ -63,7 +79,8 @@
     }
 
 
-    private MultipleEntryHashMap getParameterMap(HttpServletRequest request)
+    private MultipleEntryHashMap getParameterMap(HttpServletRequest request,
+                                                 String charSetEncoding)
             throws FileUploadException {
 
         MultipleEntryHashMap parameterMap = new MultipleEntryHashMap();
@@ -71,9 +88,22 @@
         List items = parseRequest(new ServletRequestContext(request));
         Iterator iter = items.iterator();
         while (iter.hasNext()) {
-            String[] value = new String[1];
-            DiskFileItem diskFileItem = (DiskFileItem) iter.next();
-            value[0] = diskFileItem.getString();
+            DiskFileItem diskFileItem = (DiskFileItem)iter.next();
+
+            // FIXME changed
+            boolean isFormField = diskFileItem.isFormField();
+
+            Object value;
+            try {
+                if (isFormField) {
+                    value = getTextParameter(diskFileItem, charSetEncoding);
+                } else {
+                    value = getFileParameter(diskFileItem);
+                }
+            } catch (Exception ex) {
+                // TODO: handle exception
+                throw new FileUploadException(ex.getLocalizedMessage());
+            }
             parameterMap.put(diskFileItem.getFieldName(), value);
         }
 
@@ -88,6 +118,42 @@
         ServletFileUpload upload = new ServletFileUpload(factory);
         // Parse the request
         return upload.parseRequest(requestContext);
+    }
+
+    private String getTextParameter(DiskFileItem diskFileItem,
+                                    String characterEncoding) throws Exception {
+
+        String encoding = diskFileItem.getCharSet();
+
+        if (encoding == null) {
+            encoding = characterEncoding;
+}
+
+        String textValue;
+        if (encoding == null) {
+            textValue = new String(diskFileItem.get());
+        } else {
+            textValue = new String(diskFileItem.get(), encoding);
+        }
+
+        return textValue;
+    }
+
+    private DataHandler getFileParameter(DiskFileItem diskFileItem)
+            throws Exception {
+
+        DataSource dataSource;
+        if (diskFileItem.isInMemory()) {
+            dataSource = new ByteArrayDataSource(diskFileItem.get());
+        } else {
+            // TODO: must create the original DataSource,
+            //       because the cache file is deleted.
+            //       maybe, the diskFileItem is not referenced from any object.
+            dataSource = new CachedFileDataSource(diskFileItem.getStoreLocation());
+        }
+        DataHandler dataHandler = new DataHandler(dataSource);
+
+        return dataHandler;
     }
 
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org