From 83d452ee0cf309d9fc0e68b8c9ca79a847a0d413 Mon Sep 17 00:00:00 2001
From: Ramin Yaghoubzadeh <ryaghoubzadeh@uni-bielefeld.de>
Date: Thu, 26 Feb 2015 00:19:44 +0100
Subject: [PATCH] Java: pseudoConvert now uses StringEscapeUtils for correct
 unescaping

(This was sufficient for basic interoperation, e.g. DM<->realizer)
---
 ipaacalib/java/ivy.xml                 |  1 +
 ipaacalib/java/src/ipaaca/Payload.java | 25 ++++++++++++++-----------
 2 files changed, 15 insertions(+), 11 deletions(-)

diff --git a/ipaacalib/java/ivy.xml b/ipaacalib/java/ivy.xml
index 8023c27..e1baa4b 100644
--- a/ipaacalib/java/ivy.xml
+++ b/ipaacalib/java/ivy.xml
@@ -9,5 +9,6 @@
       <dependency org="google"  name="protobuf-java"          rev="latest.release"  />
       <dependency org="rsb"     name="rsb"                    rev="latest.release"  />
       <dependency org="lombok"  name="lombok"                 rev="latest.release"  />
+      <dependency org="apache"  name="commons-lang"           rev="latest.release"  />
    </dependencies>
 </ivy-module>
diff --git a/ipaacalib/java/src/ipaaca/Payload.java b/ipaacalib/java/src/ipaaca/Payload.java
index 315d686..f2d0833 100644
--- a/ipaacalib/java/src/ipaaca/Payload.java
+++ b/ipaacalib/java/src/ipaaca/Payload.java
@@ -34,6 +34,8 @@ package ipaaca;
 
 import ipaaca.protobuf.Ipaaca.PayloadItem;
 
+import org.apache.commons.lang.StringEscapeUtils;
+
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
@@ -93,18 +95,19 @@ public class Payload implements Map<String, String>
             map.put(item.getKey(), pseudoConvertFromJSON(item.getValue(), item.getType()));
         }
     }
-    
+
     public String pseudoConvertFromJSON(String value, String type) {
-    	if (type.equals("JSON")) {
-    		if (value.startsWith("\"")) {
-    			return value.replaceAll("\\\"", "");
-    		} else if (value.startsWith("{") || value.startsWith("[") || value.matches("true") || value.matches("false") || value.matches("-?[0-9]*[.,]?[0-9][0-9]*.*")) { 
-    			return value;
-    		} else if (value.equals("null")) {
-    			return "";
-    		}
-    	}
-    	return value;
+        if (type.equals("JSON")) {
+            if (value.startsWith("\"")) {
+                //return value.replaceAll("\\\"", "");
+                return StringEscapeUtils.unescapeJava(value.substring(1, value.length() - 1));
+            } else if (value.startsWith("{") || value.startsWith("[") || value.matches("true") || value.matches("false") || value.matches("-?[0-9]*[.,]?[0-9][0-9]*.*")) { 
+                return value;
+            } else if (value.equals("null")) {
+                return "";
+            }
+        }
+        return value;
     }
 
     void enforcedSetItem(String key, String value)
-- 
GitLab