Repository: incubator-juneau
Updated Branches:
  refs/heads/master 100006611 -> 8995e2ab1


Bug fixes.

Project: http://git-wip-us.apache.org/repos/asf/incubator-juneau/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-juneau/commit/8995e2ab
Tree: http://git-wip-us.apache.org/repos/asf/incubator-juneau/tree/8995e2ab
Diff: http://git-wip-us.apache.org/repos/asf/incubator-juneau/diff/8995e2ab

Branch: refs/heads/master
Commit: 8995e2ab1e52430f565caa42cb09968035ab3f5a
Parents: 1000066
Author: JamesBognar <[email protected]>
Authored: Sun Apr 2 15:40:08 2017 -0400
Committer: JamesBognar <[email protected]>
Committed: Sun Apr 2 15:40:08 2017 -0400

----------------------------------------------------------------------
 .../urlencoding/UrlEncodingParserTest.java      |  6 ---
 .../java/org/apache/juneau/uon/UonParser.java   |  2 +
 .../juneau/urlencoding/UrlEncodingParser.java   | 49 +++++++++-----------
 .../apache/juneau/rest/test/ContentTest.java    | 48 +++++--------------
 .../juneau/rest/test/InterfaceProxyTest.java    | 11 ++++-
 5 files changed, 46 insertions(+), 70 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/8995e2ab/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/UrlEncodingParserTest.java
----------------------------------------------------------------------
diff --git 
a/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/UrlEncodingParserTest.java
 
b/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/UrlEncodingParserTest.java
index 474c467..3fd318e 100755
--- 
a/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/UrlEncodingParserTest.java
+++ 
b/juneau-core-test/src/test/java/org/apache/juneau/urlencoding/UrlEncodingParserTest.java
@@ -120,12 +120,6 @@ public class UrlEncodingParserTest {
 
                // Empty array
                // Top level
-               t = "_value=@()";
-               l = (List)p.parse(t, Object.class);
-               assertTrue(l.isEmpty());
-               t = "_value= @( ) ";
-               l = p.parse(t, List.class);
-               assertTrue(l.isEmpty());
                t = "@()";
                l = (List)p.parseParameter(t, Object.class);
                assertTrue(l.isEmpty());

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/8995e2ab/juneau-core/src/main/java/org/apache/juneau/uon/UonParser.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/uon/UonParser.java 
b/juneau-core/src/main/java/org/apache/juneau/uon/UonParser.java
index 347f0a3..52ff871 100644
--- a/juneau-core/src/main/java/org/apache/juneau/uon/UonParser.java
+++ b/juneau-core/src/main/java/org/apache/juneau/uon/UonParser.java
@@ -223,6 +223,8 @@ public class UonParser extends ReaderParser {
                        throw new ParseException(session, "Class ''{0}'' could 
not be instantiated.  Reason: ''{1}''", sType.getInnerClass().getName(), 
sType.getNotABeanReason());
                }
 
+               if (o == null && sType.isPrimitive())
+                       o = sType.getPrimitiveDefault();
                if (transform != null && o != null)
                        o = transform.unswap(session, o, eType);
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/8995e2ab/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParser.java
----------------------------------------------------------------------
diff --git 
a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParser.java
 
b/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParser.java
index 953d004..5fd9647 100644
--- 
a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParser.java
+++ 
b/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParser.java
@@ -91,43 +91,38 @@ public class UrlEncodingParser extends UonParser {
 
                if (sType.isObject()) {
                        ObjectMap m = new ObjectMap(session);
-                       parseIntoMap(session, r, m, 
session.getClassMeta(Map.class, String.class, Object.class));
+                       parseIntoMap(session, r, m, 
session.getClassMeta(Map.class, String.class, Object.class), outer);
                        if (m.containsKey("_value"))
                                o = m.get("_value");
                        else
                                o = session.cast(m, null, eType);
                } else if (sType.isMap()) {
                        Map m = (sType.canCreateNewInstance() ? 
(Map)sType.newInstance() : new ObjectMap(session));
-                       o = parseIntoMap(session, r, m, sType);
+                       o = parseIntoMap(session, r, m, sType, m);
                } else if (sType.canCreateNewBean(outer)) {
                        BeanMap m = session.newBeanMap(outer, 
sType.getInnerClass());
                        m = parseIntoBeanMap(session, r, m);
                        o = m == null ? null : m.getBean();
+               } else if (sType.isCollection() || sType.isArray() || 
sType.isArgs()) {
+                       // ?1=foo&2=bar...
+                       Collection c2 = ((sType.isArray() || sType.isArgs()) || 
! sType.canCreateNewInstance(outer)) ? new ObjectList(session) : 
(Collection)sType.newInstance();
+                       Map<Integer,Object> m = new TreeMap<Integer,Object>();
+                       parseIntoMap(session, r, m, sType, c2);
+                       c2.addAll(m.values());
+                       if (sType.isArray())
+                               o = ArrayUtils.toArray(c2, 
sType.getElementType().getInnerClass());
+                       else if (sType.isArgs())
+                               o = c2.toArray(new Object[c2.size()]);
+                       else
+                               o = c2;
                } else {
                        // It could be a non-bean with _type attribute.
                        ObjectMap m = new ObjectMap(session);
-                       parseIntoMap(session, r, m, 
session.getClassMeta(Map.class, String.class, Object.class));
+                       parseIntoMap(session, r, m, 
session.getClassMeta(Map.class, String.class, Object.class), outer);
                        if (m.containsKey(session.getBeanTypePropertyName()))
                                o = session.cast(m, null, eType);
-                       else if (m.containsKey("_value"))
+                       else if (m.containsKey("_value")) {
                                o = session.convertToType(m.get("_value"), 
sType);
-                       else if (sType.isCollection() || sType.isArray() || 
sType.isArgs()) {
-                               // ?1=foo&2=bar...
-                               Collection c2 = ((sType.isArray() || 
sType.isArgs()) || ! sType.canCreateNewInstance(outer)) ? new 
ObjectList(session) : (Collection)sType.newInstance();
-                               Map<Integer,Object> t = new 
TreeMap<Integer,Object>();
-                               int argIndex = 0;
-                               for (Map.Entry<String,Object> e : m.entrySet()) 
{
-                                       String k = e.getKey();
-                                       if (StringUtils.isNumeric(k))
-                                               t.put(Integer.valueOf(k), 
session.convertToType(e.getValue(), sType.isArgs() ? sType.getArg(argIndex++) : 
sType.getElementType()));
-                               }
-                               c2.addAll(t.values());
-                               if (sType.isArray())
-                                       o = ArrayUtils.toArray(c2, 
sType.getElementType().getInnerClass());
-                               else if (sType.isArgs())
-                                       o = c2.toArray(new Object[c2.size()]);
-                               else
-                                       o = c2;
                        } else {
                                if (sType.getNotABeanReason() != null)
                                        throw new ParseException(session, 
"Class ''{0}'' could not be instantiated as application/x-www-form-urlencoded.  
Reason: ''{1}''", sType, sType.getNotABeanReason());
@@ -144,10 +139,9 @@ public class UrlEncodingParser extends UonParser {
                return (T)o;
        }
 
-       private <K,V> Map<K,V> parseIntoMap(UonParserSession session, 
ParserReader r, Map<K,V> m, ClassMeta<?> type) throws Exception {
+       private <K,V> Map<K,V> parseIntoMap(UonParserSession session, 
ParserReader r, Map<K,V> m, ClassMeta<?> type, Object outer) throws Exception {
 
-               ClassMeta<K> keyType = (ClassMeta<K>)type.getKeyType();
-               ClassMeta<V> valueType = (ClassMeta<V>)type.getValueType();
+               ClassMeta<K> keyType = (ClassMeta<K>)(type.isArgs() || 
type.isCollectionOrArray() ? session.getClassMeta(Integer.class) : 
type.getKeyType());
 
                int c = r.peekSkipWs();
                if (c == -1)
@@ -160,6 +154,7 @@ public class UrlEncodingParser extends UonParser {
                boolean isInEscape = false;
 
                int state = S1;
+               int argIndex = 0;
                K currAttr = null;
                while (c != -1) {
                        c = r.read();
@@ -183,6 +178,7 @@ public class UrlEncodingParser extends UonParser {
                                        }
                                } else if (state == S3) {
                                        if (c == -1 || c == '\u0001') {
+                                               ClassMeta<V> valueType = 
(ClassMeta<V>)(type.isArgs() ? type.getArg(argIndex++) : 
type.isCollectionOrArray() ? type.getElementType() : type.getValueType());
                                                V value = 
convertAttrToType(session, m, "", valueType);
                                                m.put(currAttr, value);
                                                if (c == -1)
@@ -190,7 +186,8 @@ public class UrlEncodingParser extends UonParser {
                                                state = S1;
                                        } else  {
                                                // For performance, we bypass 
parseAnything for string values.
-                                               V value = 
(V)(valueType.isString() ? super.parseString(session, r.unread(), true) : 
super.parseAnything(session, valueType, r.unread(), m, true, null));
+                                               ClassMeta<V> valueType = 
(ClassMeta<V>)(type.isArgs() ? type.getArg(argIndex++) : 
type.isCollectionOrArray() ? type.getElementType() : type.getValueType());
+                                               V value = 
(V)(valueType.isString() ? super.parseString(session, r.unread(), true) : 
super.parseAnything(session, valueType, r.unread(), outer, true, null));
 
                                                // If we already encountered 
this parameter, turn it into a list.
                                                if (m.containsKey(currAttr) && 
valueType.isObject()) {
@@ -518,7 +515,7 @@ public class UrlEncodingParser extends UonParser {
                UonReader r = s.getReader();
                if (r.peekSkipWs() == '?')
                        r.read();
-               m = parseIntoMap(s, r, m, session.getClassMeta(Map.class, 
keyType, valueType));
+               m = parseIntoMap(s, r, m, session.getClassMeta(Map.class, 
keyType, valueType), null);
                return m;
        }
 }

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/8995e2ab/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/ContentTest.java
----------------------------------------------------------------------
diff --git 
a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/ContentTest.java 
b/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/ContentTest.java
index 386aad1..c5f637d 100644
--- 
a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/ContentTest.java
+++ 
b/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/ContentTest.java
@@ -43,12 +43,8 @@ public class ContentTest extends RestTestcase {
                assertEquals("true", r);
                r = c.doPost(URL + "/boolean?body=false", 
null).getResponseAsString();
                assertEquals("false", r);
-               try {
-                       r = c.doPost(URL + "/boolean?body=null&noTrace=true", 
null).getResponseAsString();
-                       fail("Exception expected!");
-               } catch (RestCallException e) {
-                       assertEquals(400, e.getResponseCode());
-               }
+               r = c.doPost(URL + "/boolean?body=null", 
null).getResponseAsString();
+               assertEquals("false", r);
                try {
                        r = c.doPost(URL + "/boolean?body=bad&noTrace=true", 
null).getResponseAsString();
                        fail("Exception expected!");
@@ -80,12 +76,8 @@ public class ContentTest extends RestTestcase {
                //      }
                r = c.doPost(URL + "/int?body=-123", 
null).getResponseAsString();
                assertEquals("-123", r);
-               try {
-                       r = c.doPost(URL + "/int?body=null&noTrace=true", 
null).getResponseAsString();
-                       fail("Exception expected!");
-               } catch (RestCallException e) {
-                       assertEquals(400, e.getResponseCode());
-               }
+               r = c.doPost(URL + "/int?body=null", 
null).getResponseAsString();
+               assertEquals("0", r);
                try {
                        r = c.doPost(URL + "/int?body=bad&noTrace=true", 
null).getResponseAsString();
                        fail("Exception expected!");
@@ -114,12 +106,8 @@ public class ContentTest extends RestTestcase {
                //      }
                r = c.doPost(URL + "/float?body=-1.23", 
null).getResponseAsString();
                assertEquals("-1.23", r);
-               try {
-                       r = c.doPost(URL + "/float?body=null&noTrace=true", 
null).getResponseAsString();
-                       fail("Exception expected!");
-               } catch (RestCallException e) {
-                       assertEquals(400, e.getResponseCode());
-               }
+               r = c.doPost(URL + "/float?body=null", 
null).getResponseAsString();
+               assertEquals("0.0", r);
                try {
                        r = c.doPost(URL + "/float?body=bad&noTrace=true", 
null).getResponseAsString();
                        fail("Exception expected!");
@@ -341,12 +329,8 @@ public class ContentTest extends RestTestcase {
                assertEquals("true", r);
                r = c.doPost(URL + "/boolean", "false").getResponseAsString();
                assertEquals("false", r);
-               try {
-                       r = c.doPost(URL + "/boolean?noTrace=true", 
"null").getResponseAsString();
-                       fail("Exception expected!");
-               } catch (RestCallException e) {
-                       assertEquals(400, e.getResponseCode());
-               }
+               r = c.doPost(URL + "/boolean", "null").getResponseAsString();
+               assertEquals("false", r);
                try {
                        r = c.doPost(URL + "/boolean?noTrace=true", 
"bad").getResponseAsString();
                        fail("Exception expected!");
@@ -378,12 +362,8 @@ public class ContentTest extends RestTestcase {
                //      }
                r = c.doPost(URL + "/int", "-123").getResponseAsString();
                assertEquals("-123", r);
-               try {
-                       r = c.doPost(URL + "/int?noTrace=true", 
"null").getResponseAsString();
-                       fail("Exception expected!");
-               } catch (RestCallException e) {
-                       assertEquals(400, e.getResponseCode());
-               }
+               r = c.doPost(URL + "/int", "null").getResponseAsString();
+               assertEquals("0", r);
                try {
                        r = c.doPost(URL + "/int?noTrace=true", 
"bad").getResponseAsString();
                        fail("Exception expected!");
@@ -412,12 +392,8 @@ public class ContentTest extends RestTestcase {
                //      }
                r = c.doPost(URL + "/float", "-1.23").getResponseAsString();
                assertEquals("-1.23", r);
-               try {
-                       r = c.doPost(URL + "/float?noTrace=true", 
"null").getResponseAsString();
-                       fail("Exception expected!");
-               } catch (RestCallException e) {
-                       assertEquals(400, e.getResponseCode());
-               }
+               r = c.doPost(URL + "/float", "null").getResponseAsString();
+               assertEquals("0.0", r);
                try {
                        r = c.doPost(URL + "/float?noTrace=true", 
"bad").getResponseAsString();
                        fail("Exception expected!");

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/8995e2ab/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/InterfaceProxyTest.java
----------------------------------------------------------------------
diff --git 
a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/InterfaceProxyTest.java
 
b/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/InterfaceProxyTest.java
index 25df423..4cf5f50 100644
--- 
a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/InterfaceProxyTest.java
+++ 
b/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/InterfaceProxyTest.java
@@ -816,19 +816,26 @@ public class InterfaceProxyTest extends RestTestcase {
                Map<TestEnum,List<TestEnum[][][]>> x5n = null;
                getProxy().setMultiParamsEnum(x1, x2, x2n, x3, x3n, x4, x4n, 
x5, x5n);
        }
-//
+
 //
 //     public static void main(String[] args) {
-//             List<TypedBean[][][]> l = new 
AList<TypedBean[][][]>().append(new TypedBean[][][]{{{new 
TypedBeanImpl().init(),null},null},null}).append(null);
+//             List<TypedBean[][][]> l = new 
AList<TypedBean[][][]>().append(new TypedBean[][][]{{{new 
TypedBeanImpl().init()}}});
 //             JsonSerializer.DEFAULT_LAX.println(l);
 //             UrlEncodingSerializer.DEFAULT.println(l);
 //             try {
 //                     String r = UrlEncodingSerializer.DEFAULT.serialize(l);
+//                     System.err.println("***Test1***");
 //                     l = UrlEncodingParser.DEFAULT.parse(r, List.class, 
TypedBean[][][].class);
+//                     JsonSerializer.DEFAULT_LAX.println(l);
+//                     System.err.println(l.get(0)[0][0][0].getClass());
 //
+//                     System.err.println("***Test2***");
 //                     l = (List<TypedBean[][][]>) 
UrlEncodingParser.DEFAULT.parse(r, 
InterfaceProxy.class.getMethod("returnTypedBean1d3dListMap").getGenericReturnType());
+//                     JsonSerializer.DEFAULT_LAX.println(l);
+//                     System.err.println(l.get(0)[0][0][0].getClass());
 //
 //                     JsonSerializer.DEFAULT_LAX.println(l);
+//                     System.err.println(l.get(0)[0][0][0].getClass());
 //             } catch (Exception e) {
 //                     // TODO Auto-generated catch block
 //                     e.printStackTrace();

Reply via email to