You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@turbine.apache.org by gk...@apache.org on 2018/10/22 10:25:40 UTC
svn commit: r1844542 - in /turbine/fulcrum/trunk/parser/src:
java/org/apache/fulcrum/parser/DefaultParameterParser.java
java/org/apache/fulcrum/parser/ParameterParser.java
test/org/apache/fulcrum/parser/ParameterParserTest.java
Author: gk
Date: Mon Oct 22 10:25:40 2018
New Revision: 1844542
URL: http://svn.apache.org/viewvc?rev=1844542&view=rev
Log:
- reorder methods
- add getFilename extracting from header
Modified:
turbine/fulcrum/trunk/parser/src/java/org/apache/fulcrum/parser/DefaultParameterParser.java
turbine/fulcrum/trunk/parser/src/java/org/apache/fulcrum/parser/ParameterParser.java
turbine/fulcrum/trunk/parser/src/test/org/apache/fulcrum/parser/ParameterParserTest.java
Modified: turbine/fulcrum/trunk/parser/src/java/org/apache/fulcrum/parser/DefaultParameterParser.java
URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/parser/src/java/org/apache/fulcrum/parser/DefaultParameterParser.java?rev=1844542&r1=1844541&r2=1844542&view=diff
==============================================================================
--- turbine/fulcrum/trunk/parser/src/java/org/apache/fulcrum/parser/DefaultParameterParser.java (original)
+++ turbine/fulcrum/trunk/parser/src/java/org/apache/fulcrum/parser/DefaultParameterParser.java Mon Oct 22 10:25:40 2018
@@ -26,6 +26,8 @@ import java.util.Collection;
import java.util.Enumeration;
import java.util.List;
import java.util.StringTokenizer;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
import java.util.stream.Collectors;
import javax.servlet.http.HttpServletRequest;
@@ -151,29 +153,7 @@ public class DefaultParameterParser
uploadData = null;
- String enc = request.getCharacterEncoding();
-
- if (enc == null && !parserService.getParameterEncoding().equals(ParserService.PARAMETER_ENCODING_DEFAULT )) {
- try
- {
- // no-op if data was read (parameter, POST..)
- request.setCharacterEncoding( parserService.getParameterEncoding() );
- enc = request.getCharacterEncoding();
- if (enc != null) {
- getLogger().debug("Set the request encoding successfully to parameterEncoding of parser: "+enc );
- } else {
- getLogger().warn("Unsuccessfully (data read happened) tried to set the request encoding to "+ parserService.getParameterEncoding() );
- }
- }
- catch ( UnsupportedEncodingException e )
- {
- getLogger().error("Found only unsupported encoding "+ e.getMessage());
- }
- }
-
- setCharacterEncoding(enc != null
- ? enc
- : parserService.getParameterEncoding());
+ handleEncoding( request );
String contentType = request.getHeader("Content-type");
@@ -210,6 +190,22 @@ public class DefaultParameterParser
request.getParameterValues(paramName));
}
+ handlePathInfo( request );
+
+ this.request = request;
+
+ if (getLogger().isDebugEnabled())
+ {
+ getLogger().debug("Parameters found in the Request:");
+ for (String key : keySet())
+ {
+ getLogger().debug("Key: " + key + " -> " + getString(key));
+ }
+ }
+ }
+
+ private void handlePathInfo( HttpServletRequest request )
+ {
// Also cache any pathinfo variables that are passed around as
// if they are query string data.
try
@@ -245,17 +241,33 @@ public class DefaultParameterParser
// things that depend on it being right will fail later
// and should be caught later.
}
+ }
- this.request = request;
-
- if (getLogger().isDebugEnabled())
- {
- getLogger().debug("Parameters found in the Request:");
- for (String key : keySet())
+ private void handleEncoding( HttpServletRequest request )
+ {
+ String enc = request.getCharacterEncoding();
+
+ if (enc == null && !parserService.getParameterEncoding().equals(ParserService.PARAMETER_ENCODING_DEFAULT )) {
+ try
+ {
+ // no-op if data was read (parameter, POST..)
+ request.setCharacterEncoding( parserService.getParameterEncoding() );
+ enc = request.getCharacterEncoding();
+ if (enc != null) {
+ getLogger().debug("Set the request encoding successfully to parameterEncoding of parser: "+enc );
+ } else {
+ getLogger().warn("Unsuccessfully (data read happened) tried to set the request encoding to "+ parserService.getParameterEncoding() );
+ }
+ }
+ catch ( UnsupportedEncodingException e )
{
- getLogger().debug("Key: " + key + " -> " + getString(key));
+ getLogger().error("Found only unsupported encoding "+ e.getMessage());
}
}
+
+ setCharacterEncoding(enc != null
+ ? enc
+ : parserService.getParameterEncoding());
}
/**
@@ -340,7 +352,7 @@ public class DefaultParameterParser
}
catch ( ClassCastException e )
{
- return null;
+ return new Part[0];// empty array
}
}
@@ -353,4 +365,29 @@ public class DefaultParameterParser
collect( Collectors.toList() );
}
+
+ @Override
+ public String getFileName( Part part )
+ {
+ final String partHeader = part.getHeader("content-disposition");
+ Pattern regex = Pattern.compile("filename\\*?=\"?(.[^\"]+)\"?"); // rfc2183, rfc5987 quoted string, but attachments may have not?
+ for (String content : partHeader.split(";")) {
+ if (content.trim().contains( "filename" )) { // could also filename*=<encoding>''<value>
+ String fnTmp = "";
+ String srcStr = content.trim();
+ Matcher regexMatcher = regex.matcher(srcStr);
+ if (regexMatcher.find()) {
+ fnTmp = regexMatcher.group(1);
+ if (getLogger().isDebugEnabled()) {
+ getLogger().debug( "matched fileName:" + fnTmp );
+ }
+ } else { // last resort
+ fnTmp = srcStr.substring(srcStr.indexOf('=')+1).replace( "\"", "" );
+ getLogger().debug( "second fileName match:" + fnTmp );
+ }
+ return fnTmp.trim();
+ }
+ }
+ return null;
+ }
}
Modified: turbine/fulcrum/trunk/parser/src/java/org/apache/fulcrum/parser/ParameterParser.java
URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/parser/src/java/org/apache/fulcrum/parser/ParameterParser.java?rev=1844542&r1=1844541&r2=1844542&view=diff
==============================================================================
--- turbine/fulcrum/trunk/parser/src/java/org/apache/fulcrum/parser/ParameterParser.java (original)
+++ turbine/fulcrum/trunk/parser/src/java/org/apache/fulcrum/parser/ParameterParser.java Mon Oct 22 10:25:40 2018
@@ -128,4 +128,12 @@ public interface ParameterParser
* @return Collection<Part>
*/
Collection<Part> getParts();
+
+ /**
+ * Convenience fileName utility, which extracts the filename from header
+ *
+ *
+ * @return the fileName String object.
+ */
+ String getFileName(Part part);
}
Modified: turbine/fulcrum/trunk/parser/src/test/org/apache/fulcrum/parser/ParameterParserTest.java
URL: http://svn.apache.org/viewvc/turbine/fulcrum/trunk/parser/src/test/org/apache/fulcrum/parser/ParameterParserTest.java?rev=1844542&r1=1844541&r2=1844542&view=diff
==============================================================================
--- turbine/fulcrum/trunk/parser/src/test/org/apache/fulcrum/parser/ParameterParserTest.java (original)
+++ turbine/fulcrum/trunk/parser/src/test/org/apache/fulcrum/parser/ParameterParserTest.java Mon Oct 22 10:25:40 2018
@@ -47,7 +47,7 @@ public class ParameterParserTest extends
{
private ParameterParser parameterParser = null;
- private Part test;
+ private Part mockTest;
@Before
public void setUpBefore() throws Exception
@@ -57,7 +57,7 @@ public class ParameterParserTest extends
ParserService parserService = (ParserService)this.lookup(ParserService.ROLE);
parameterParser = parserService.getParser(DefaultParameterParser.class);
- test = new Part()
+ mockTest = new Part()
{
@Override
@@ -104,6 +104,11 @@ public class ParameterParserTest extends
@Override
public String getHeader(String name)
{
+ if (name.equals( "content-disposition")) {
+ //return "form-data; name=\"file\"; filename*=utf-8''%c2%a3%20uploadedFileName.ext";
+ //return "attachment; filename=genome.jpeg;";
+ return "form-data; name=\"file\"; filename=\"uploadedFileName.ext\"";
+ }
return null;
}
@@ -158,7 +163,7 @@ public class ParameterParserTest extends
assertEquals("keySet() is not empty!", 0, parameterParser.keySet().size());
// Push this into the parser using DefaultParameterParser's add() method.
- ((DefaultParameterParser) parameterParser).add("upload-field", test);
+ ((DefaultParameterParser) parameterParser).add("upload-field", mockTest);
assertEquals("Part not found in keySet()!", 1, parameterParser.keySet().size());
@@ -185,6 +190,30 @@ public class ParameterParserTest extends
assertNull("The returned should be null because a String is not a Part", parameterParser.getPart( "other-field" ));
Part uploadField = parameterParser.getPart( "upload-field" );
assertTrue(uploadField.getName().equals( "upload-field" ));
+
+ }
+
+ /**
+ * This Test method checks the DefaultParameterParser which filename convenience mapping from Part.
+ *
+ * @throws Exception
+ */
+ @Test
+ public void testFilename4Path() throws Exception
+ {
+ assertEquals("keySet() is not empty!", 0, parameterParser.keySet().size());
+
+ // Push this into the parser using DefaultParameterParser's add() method.
+ ((DefaultParameterParser) parameterParser).add("upload-field", mockTest);
+
+ assertTrue(parameterParser.containsKey("upload-field"));
+
+ Part uploadField = parameterParser.getPart( "upload-field" );
+ assertEquals("upload-field", uploadField.getName());
+
+ String fileName = parameterParser.getFileName( uploadField );
+ assertEquals("uploadedFileName.ext",fileName);
+
}
}