Revision: 8008
          
http://languagetool.svn.sourceforge.net/languagetool/?rev=8008&view=rev
Author:   dnaber
Date:     2012-09-09 10:26:59 +0000 (Sun, 09 Sep 2012)
Log Message:
-----------
HTTP API: small internal cleanup for better exception and charset handling 
(always expects UTF-8)

Modified Paths:
--------------
    trunk/JLanguageTool/CHANGES.txt
    
trunk/JLanguageTool/src/main/java/org/languagetool/server/LanguageToolHttpHandler.java

Modified: trunk/JLanguageTool/CHANGES.txt
===================================================================
--- trunk/JLanguageTool/CHANGES.txt     2012-09-09 09:38:13 UTC (rev 8007)
+++ trunk/JLanguageTool/CHANGES.txt     2012-09-09 10:26:59 UTC (rev 8008)
@@ -80,6 +80,9 @@
   language with its variant, e.g.:
   <language name="Catalan" abbr="ca" abbrWithVariant="ca-ES"/>
 
+ -HTTP API: small internal cleanup for better exception and charset handling 
(always
+  expects UTF-8)
+
  -HTTP API and XML output: extended XML to include the version and build date
   of LanguageTool and the category of each match
 

Modified: 
trunk/JLanguageTool/src/main/java/org/languagetool/server/LanguageToolHttpHandler.java
===================================================================
--- 
trunk/JLanguageTool/src/main/java/org/languagetool/server/LanguageToolHttpHandler.java
      2012-09-09 09:38:13 UTC (rev 8007)
+++ 
trunk/JLanguageTool/src/main/java/org/languagetool/server/LanguageToolHttpHandler.java
      2012-09-09 10:26:59 UTC (rev 8008)
@@ -28,8 +28,8 @@
 class LanguageToolHttpHandler implements HttpHandler {
 
   private static final String CONTENT_TYPE_VALUE = "text/xml; charset=UTF-8";
+  private static final String ENCODING = "utf-8";
   private static final int CONTEXT_SIZE = 40; // characters
-  private static final String ENCODING = "utf-8";
 
   private final Set<String> allowedIps;  
   private final boolean verbose;
@@ -39,8 +39,8 @@
   
   private boolean useQuerySettings;
   
-  private String[] enabledRules = new String[0];
-  private String[] disabledRules = new String[0];
+  private String[] enabledRules = {};
+  private String[] disabledRules = {};
  
   LanguageToolHttpHandler(boolean verbose, Set<String> allowedIps,
                  boolean internal) throws IOException {
@@ -52,11 +52,11 @@
 
   @Override
   public void handle(HttpExchange httpExchange) throws IOException {
-    final URI requestedUri = httpExchange.getRequestURI();
-    final Map<String, String> parameters = getRequestQuery(httpExchange, 
requestedUri);
     final long timeStart = System.currentTimeMillis();
     String text = null;
     try {
+      final URI requestedUri = httpExchange.getRequestURI();
+      final Map<String, String> parameters = getRequestQuery(httpExchange, 
requestedUri);
       final String remoteAddress = 
httpExchange.getRemoteAddress().getAddress().getHostAddress();
       if (allowedIps.contains(remoteAddress)) {
         if (requestedUri.getRawPath().endsWith("/Languages")) {
@@ -96,7 +96,7 @@
   private Map<String, String> getRequestQuery(HttpExchange httpExchange, URI 
requestedUri) throws IOException {
     Map<String, String> parameters;
     if ("post".equalsIgnoreCase(httpExchange.getRequestMethod())) { // POST
-      final InputStreamReader isr = new 
InputStreamReader(httpExchange.getRequestBody(), "utf-8");
+      final InputStreamReader isr = new 
InputStreamReader(httpExchange.getRequestBody(), ENCODING);
       try {
         final BufferedReader br = new BufferedReader(isr);
         try {
@@ -182,18 +182,20 @@
     final Map<String, String> parameters = new HashMap<String, String>();
     if (query != null) {
       final String[] pairs = query.split("[&]");
-      for (String pair : pairs) {
-        final String param = pair.substring(0, pair.indexOf("="));
-        String key = null;
-        String value;
-        if (param != null) {
-          key = URLDecoder.decode(param, System.getProperty("file.encoding"));
-        }
-        if (pair.substring(pair.indexOf("=") + 1) == null || 
pair.substring(pair.indexOf("=") + 1).equals("")) {
-          value = "";
-        } else {
-          value = URLDecoder.decode(pair.substring(pair.indexOf("=") + 1), 
"UTF-8");
-        }
+      final Map<String, String> parameterMap = getParameterMap(pairs);
+      parameters.putAll(parameterMap);
+    }
+    return parameters;
+  }
+
+  private Map<String, String> getParameterMap(String[] pairs) throws 
UnsupportedEncodingException {
+    final Map<String, String> parameters = new HashMap<String, String>();
+    for (String pair : pairs) {
+      final int delimPos = pair.indexOf("=");
+      if (delimPos != -1) {
+        final String param = pair.substring(0, delimPos);
+        final String key = URLDecoder.decode(param, ENCODING);
+        final String value = URLDecoder.decode(pair.substring(delimPos + 1), 
ENCODING);
         parameters.put(key, value);
       }
     }
@@ -278,7 +280,7 @@
         return o1.getName().compareTo(o2.getName());
       }
     });
-    final StringBuilder xmlBuffer = new StringBuilder("<?xml version='1.0' 
encoding='UTF-8'?>\n<languages>\n");
+    final StringBuilder xmlBuffer = new StringBuilder("<?xml version='1.0' 
encoding='" + ENCODING + "'?>\n<languages>\n");
     for (Language lang : languages) {
       xmlBuffer.append(String.format("\t<language name=\"%s\" abbr=\"%s\" 
abbrWithVariant=\"%s\"/> \n", lang.getName(),
               lang.getShortName(), lang.getShortNameWithVariant()));

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.


------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
Languagetool-cvs mailing list
Languagetool-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/languagetool-cvs

Reply via email to