Repository: incubator-juneau
Updated Branches:
  refs/heads/master cdebb74d7 -> 788b84886


http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/788b8488/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/ThirdPartyProxyTest.java
----------------------------------------------------------------------
diff --git 
a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/ThirdPartyProxyTest.java
 
b/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/ThirdPartyProxyTest.java
index 24900d2..59868e6 100644
--- 
a/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/ThirdPartyProxyTest.java
+++ 
b/juneau-rest-test/src/test/java/org/apache/juneau/rest/test/ThirdPartyProxyTest.java
@@ -18,6 +18,7 @@ import static org.junit.Assert.*;
 
 import java.util.*;
 
+import org.apache.juneau.annotation.*;
 import org.apache.juneau.html.*;
 import org.apache.juneau.jena.*;
 import org.apache.juneau.json.*;
@@ -25,6 +26,7 @@ import org.apache.juneau.msgpack.*;
 import org.apache.juneau.parser.*;
 import org.apache.juneau.remoteable.*;
 import org.apache.juneau.rest.client.*;
+import org.apache.juneau.rest.test.ThirdPartyProxyTest.ThirdPartyProxy.*;
 import org.apache.juneau.rest.test.pojos.*;
 import org.apache.juneau.serializer.*;
 import org.apache.juneau.uon.*;
@@ -1256,7 +1258,9 @@ public class ThirdPartyProxyTest extends RestTestcase {
                proxy.setEnum1d3dListMap(new 
AMap<TestEnum,List<TestEnum[][][]>>().append(TestEnum.ONE, new 
AList<TestEnum[][][]>().append(new 
TestEnum[][][]{{{TestEnum.TWO,null},null},null}).append(null)));
        }
 
+       
//--------------------------------------------------------------------------------
        // Path variables
+       
//--------------------------------------------------------------------------------
 
        @Test
        public void f01_pathVars1() {
@@ -1280,239 +1284,1092 @@ public class ThirdPartyProxyTest extends 
RestTestcase {
                assertEquals("OK", r);
        }
 
-
        
//--------------------------------------------------------------------------------
-       // Proxy class
+       // RequestBean tests - Path
        
//--------------------------------------------------------------------------------
 
-       @Remoteable(path="/testThirdPartyProxy")
-       public static interface ThirdPartyProxy {
-
-               
//--------------------------------------------------------------------------------
-               // Header tests
-               
//--------------------------------------------------------------------------------
-
-               @RemoteMethod(httpMethod="GET", path="/primitiveHeaders")
-               String primitiveHeaders(
-                       @Header("a") String a,
-                       @Header("an") String an,
-                       @Header("b") int b,
-                       @Header("c") Integer c,
-                       @Header("cn") Integer cn,
-                       @Header("d") Boolean d,
-                       @Header("e") float e,
-                       @Header("f") Float f
+       @Test
+       public void ga01_reqBeanPath1() throws Exception {
+               String r = proxy.reqBeanPath1(
+                       new ReqBeanPath1() {
+                               @Override
+                               public int getA() {
+                                       return 1;
+                               }
+                               @Override
+                               public String getB() {
+                                       return "foo";
+                               }
+                       }
                );
+               assertEquals("OK", r);
+       }
 
-               @RemoteMethod(httpMethod="GET", 
path="/primitiveCollectionHeaders")
-               String primitiveCollectionHeaders(
-                       @Header("a") int[][][] a,
-                       @Header("b") Integer[][][] b,
-                       @Header("c") String[][][] c,
-                       @Header("d") List<Integer> d,
-                       @Header("e") List<List<List<Integer>>> e,
-                       @Header("f") List<Integer[][][]> f,
-                       @Header("g") List<int[][][]> g,
-                       @Header("h") List<String> h
+       @Test
+       public void ga01_reqBeanPath1a() throws Exception {
+               String r = proxy.reqBeanPath1(
+                       new ReqBeanPath1Impl()
                );
+               assertEquals("OK", r);
+       }
 
-               @RemoteMethod(httpMethod="GET", path="/beanHeaders")
-               String beanHeaders(
-                       @Header("a") ABean a,
-                       @Header("an") ABean an,
-                       @Header("b") ABean[][][] b,
-                       @Header("c") List<ABean> c,
-                       @Header("d") List<ABean[][][]> d,
-                       @Header("e") Map<String,ABean> e,
-                       @Header("f") Map<String,List<ABean>> f,
-                       @Header("g") Map<String,List<ABean[][][]>> g,
-                       @Header("h") Map<Integer,List<ABean>> h
+       @Test
+       public void ga02_reqBeanPath2() throws Exception {
+               String r = proxy.reqBeanPath2(
+                       new ReqBeanPath2()
                );
+               assertEquals("OK", r);
+       }
 
-               @RemoteMethod(httpMethod="GET", path="/typedBeanHeaders")
-               String typedBeanHeaders(
-                       @Header("a") TypedBean a,
-                       @Header("an") TypedBean an,
-                       @Header("b") TypedBean[][][] b,
-                       @Header("c") List<TypedBean> c,
-                       @Header("d") List<TypedBean[][][]> d,
-                       @Header("e") Map<String,TypedBean> e,
-                       @Header("f") Map<String,List<TypedBean>> f,
-                       @Header("g") Map<String,List<TypedBean[][][]>> g,
-                       @Header("h") Map<Integer,List<TypedBean>> h
+       @Test
+       public void ga03_reqBeanPath3() throws Exception {
+               String r = proxy.reqBeanPath3(
+                       new ReqBeanPath3() {
+                               @Override
+                               public int getX() {
+                                       return 1;
+                               }
+                               @Override
+                               public String getY() {
+                                       return "foo";
+                               }
+                       }
                );
+               assertEquals("OK", r);
+       }
 
-               @RemoteMethod(httpMethod="GET", path="/swappedPojoHeaders")
-               String swappedPojoHeaders(
-                       @Header("a") SwappedPojo a,
-                       @Header("b") SwappedPojo[][][] b,
-                       @Header("c") Map<SwappedPojo,SwappedPojo> c,
-                       @Header("d") Map<SwappedPojo,SwappedPojo[][][]> d
+       @Test
+       public void ga04_reqBeanPath4() throws Exception {
+               String r = proxy.reqBeanPath4(
+                       new ReqBeanPath4() {
+                               @Override
+                               public int getX() {
+                                       return 1;
+                               }
+                               @Override
+                               public String getY() {
+                                       return "foo";
+                               }
+                       }
                );
+               assertEquals("OK", r);
+       }
 
-               @RemoteMethod(httpMethod="GET", 
path="/implicitSwappedPojoHeaders")
-               String implicitSwappedPojoHeaders(
-                       @Header("a") ImplicitSwappedPojo a,
-                       @Header("b") ImplicitSwappedPojo[][][] b,
-                       @Header("c") 
Map<ImplicitSwappedPojo,ImplicitSwappedPojo> c,
-                       @Header("d") 
Map<ImplicitSwappedPojo,ImplicitSwappedPojo[][][]> d
+       @Test
+       public void ga05_reqBeanPath5() throws Exception {
+               String r = proxy.reqBeanPath5(
+                       new ReqBeanPath5() {
+                               @Override
+                               public int getX() {
+                                       return 1;
+                               }
+                               @Override
+                               public String getY() {
+                                       return "foo";
+                               }
+                       }
                );
+               assertEquals("OK", r);
+       }
 
-               @RemoteMethod(httpMethod="GET", path="/enumHeaders")
-               String enumHeaders(
-                       @Header("a") TestEnum a,
-                       @Header("an") TestEnum an,
-                       @Header("b") TestEnum[][][] b,
-                       @Header("c") List<TestEnum> c,
-                       @Header("d") List<List<List<TestEnum>>> d,
-                       @Header("e") List<TestEnum[][][]> e,
-                       @Header("f") Map<TestEnum,TestEnum> f,
-                       @Header("g") Map<TestEnum,TestEnum[][][]> g,
-                       @Header("h") Map<TestEnum,List<TestEnum[][][]>> h
-               );
+       @Test
+       public void ga06_reqBeanPath6() throws Exception {
+               String r = proxy.reqBeanPath6(
+                       new ReqBeanPath6() {
+                               @Override
+                               public Map<String,Object> getX() {
+                                       return new 
AMap<String,Object>().append("a",1).append("b","foo");
+                               }
 
-               @RemoteMethod(httpMethod="GET", path="/mapHeader")
-               String mapHeader(
-                       @Header("*") Map<String,Object> a
+                       }
                );
+               assertEquals("OK", r);
+       }
 
-               @RemoteMethod(httpMethod="GET", path="/beanHeader")
-               String beanHeader(
-                       @Header("*") NeBean a
+       @Test
+       public void ga07_reqBeanPath7() throws Exception {
+               String r = proxy.reqBeanPath7(
+                       new ReqBeanPath7() {
+                               @Override
+                               public ABean getX() {
+                                       return new ABean().init();
+                               }
+                       }
                );
+               assertEquals("OK", r);
+       }
 
-               @RemoteMethod(httpMethod="GET", path="/nameValuePairsHeader")
-               String nameValuePairsHeader(
-                       @Header("*") NameValuePairs a
-               );
+       
//--------------------------------------------------------------------------------
+       // RequestBean tests - Query
+       
//--------------------------------------------------------------------------------
 
-               @RemoteMethod(httpMethod="GET", path="/headerIfNE1")
-               String headerIfNE1(
-                       @HeaderIfNE("a") String a
+       @Test
+       public void gb01_reqBeanQuery1() throws Exception {
+               String r = proxy.reqBeanQuery1(
+                       new ReqBeanQuery1() {
+                               @Override
+                               public int getA() {
+                                       return 1;
+                               }
+                               @Override
+                               public String getB() {
+                                       return "foo";
+                               }
+                       }
                );
+               assertEquals("OK", r);
+       }
 
-               @RemoteMethod(httpMethod="GET", path="/headerIfNE2")
-               String headerIfNE2(
-                       @HeaderIfNE("a") String a
+       @Test
+       public void gb01_reqBeanQuery1a() throws Exception {
+               String r = proxy.reqBeanQuery1(
+                       new ReqBeanQuery1Impl()
                );
+               assertEquals("OK", r);
+       }
 
-               @RemoteMethod(httpMethod="GET", path="/headerIfNEMap")
-               String headerIfNEMap(
-                       @HeaderIfNE("*") Map<String,Object> a
+       @Test
+       public void gb02_reqBeanQuery2() throws Exception {
+               String r = proxy.reqBeanQuery2(
+                       new ReqBeanQuery2()
                );
+               assertEquals("OK", r);
+       }
 
-               @RemoteMethod(httpMethod="GET", path="/headerIfNEBean")
-               String headerIfNEBean(
-                       @HeaderIfNE("*") NeBean a
+       @Test
+       public void gb03_reqBeanQuery3() throws Exception {
+               String r = proxy.reqBeanQuery3(
+                       new ReqBeanQuery3() {
+                               @Override
+                               public int getX() {
+                                       return 1;
+                               }
+                               @Override
+                               public String getY() {
+                                       return "foo";
+                               }
+                       }
                );
+               assertEquals("OK", r);
+       }
 
-               @RemoteMethod(httpMethod="GET", 
path="/headerIfNEnameValuePairs")
-               String headerIfNEnameValuePairs(
-                       @HeaderIfNE("*") NameValuePairs a
+       @Test
+       public void gb04_reqBeanQuery4() throws Exception {
+               String r = proxy.reqBeanQuery4(
+                       new ReqBeanQuery4() {
+                               @Override
+                               public int getX() {
+                                       return 1;
+                               }
+                               @Override
+                               public String getY() {
+                                       return "foo";
+                               }
+                       }
                );
+               assertEquals("OK", r);
+       }
 
+       @Test
+       public void gb05_reqBeanQuery5() throws Exception {
+               String r = proxy.reqBeanQuery5(
+                       new ReqBeanQuery5() {
+                               @Override
+                               public int getX() {
+                                       return 1;
+                               }
+                               @Override
+                               public String getY() {
+                                       return "foo";
+                               }
+                       }
+               );
+               assertEquals("OK", r);
+       }
 
-               
//--------------------------------------------------------------------------------
-               // Query tests
-               
//--------------------------------------------------------------------------------
+       @Test
+       public void gb06_reqBeanQuery6() throws Exception {
+               String r = proxy.reqBeanQuery6(
+                       new ReqBeanQuery6() {
+                               @Override
+                               public Map<String,Object> getX() {
+                                       return new 
AMap<String,Object>().append("a",1).append("b","foo");
+                               }
 
-               @RemoteMethod(httpMethod="GET", path="/primitiveQueries")
-               String primitiveQueries(
-                       @Query("a") String a,
-                       @Query("an") String an,
-                       @Query("b") int b,
-                       @Query("c") Integer c,
-                       @Query("cn") Integer cn,
-                       @Query("d") Boolean d,
-                       @Query("e") float e,
-                       @Query("f") Float f
+                       }
                );
+               assertEquals("OK", r);
+       }
 
-               @RemoteMethod(httpMethod="GET", 
path="/primitiveCollectionQueries")
-               String primitiveCollectionQueries(
-                       @Query("a") int[][][] a,
-                       @Query("b") Integer[][][] b,
-                       @Query("c") String[][][] c,
-                       @Query("d") List<Integer> d,
-                       @Query("e") List<List<List<Integer>>> e,
-                       @Query("f") List<Integer[][][]> f,
-                       @Query("g") List<int[][][]> g,
-                       @Query("h") List<String> h
+       @Test
+       public void gb07_reqBeanQuery7() throws Exception {
+               String r = proxy.reqBeanQuery7(
+                       new ReqBeanQuery7() {
+                               @Override
+                               public ABean getX() {
+                                       return new ABean().init();
+                               }
+                       }
                );
+               assertEquals("OK", r);
+       }
 
-               @RemoteMethod(httpMethod="GET", path="/beanQueries")
-               String beanQueries(
-                       @Query("a") ABean a,
-                       @Query("an") ABean an,
-                       @Query("b") ABean[][][] b,
-                       @Query("c") List<ABean> c,
-                       @Query("d") List<ABean[][][]> d,
-                       @Query("e") Map<String,ABean> e,
-                       @Query("f") Map<String,List<ABean>> f,
-                       @Query("g") Map<String,List<ABean[][][]>> g,
-                       @Query("h") Map<Integer,List<ABean>> h
-               );
+       
//--------------------------------------------------------------------------------
+       // RequestBean tests - QueryIfNE
+       
//--------------------------------------------------------------------------------
 
-               @RemoteMethod(httpMethod="GET", path="/typedBeanQueries")
-               String typedBeanQueries(
-                       @Query("a") TypedBean a,
-                       @Query("an") TypedBean an,
-                       @Query("b") TypedBean[][][] b,
-                       @Query("c") List<TypedBean> c,
-                       @Query("d") List<TypedBean[][][]> d,
-                       @Query("e") Map<String,TypedBean> e,
-                       @Query("f") Map<String,List<TypedBean>> f,
-                       @Query("g") Map<String,List<TypedBean[][][]>> g,
-                       @Query("h") Map<Integer,List<TypedBean>> h
+       @Test
+       public void gc01_reqBeanQueryIfNE1() throws Exception {
+               String r = proxy.reqBeanQueryIfNE1(
+                       new ReqBeanQueryIfNE1() {
+                               @Override
+                               public String getA() {
+                                       return "foo";
+                               }
+                               @Override
+                               public String getB() {
+                                       return "";
+                               }
+                               @Override
+                               public String getC() {
+                                       return null;
+                               }
+                       }
                );
+               assertEquals("OK", r);
+       }
 
-               @RemoteMethod(httpMethod="GET", path="/swappedPojoQueries")
-               String swappedPojoQueries(
-                       @Query("a") SwappedPojo a,
-                       @Query("b") SwappedPojo[][][] b,
-                       @Query("c") Map<SwappedPojo,SwappedPojo> c,
-                       @Query("d") Map<SwappedPojo,SwappedPojo[][][]> d
+       @Test
+       public void gc01_reqBeanQueryIfNE1a() throws Exception {
+               String r = proxy.reqBeanQueryIfNE1(
+                       new ReqBeanQueryIfNE1Impl()
                );
+               assertEquals("OK", r);
+       }
 
-               @RemoteMethod(httpMethod="GET", 
path="/implicitSwappedPojoQueries")
-               String implicitSwappedPojoQueries(
-                       @Query("a") ImplicitSwappedPojo a,
-                       @Query("b") ImplicitSwappedPojo[][][] b,
-                       @Query("c") 
Map<ImplicitSwappedPojo,ImplicitSwappedPojo> c,
-                       @Query("d") 
Map<ImplicitSwappedPojo,ImplicitSwappedPojo[][][]> d
+       @Test
+       public void gc02_reqBeanQueryIfNE2() throws Exception {
+               String r = proxy.reqBeanQueryIfNE2(
+                       new ReqBeanQueryIfNE2()
                );
+               assertEquals("OK", r);
+       }
 
-               @RemoteMethod(httpMethod="GET", path="/enumQueries")
-               String enumQueries(
-                       @Query("a") TestEnum a,
-                       @Query("an") TestEnum an,
-                       @Query("b") TestEnum[][][] b,
-                       @Query("c") List<TestEnum> c,
-                       @Query("d") List<List<List<TestEnum>>> d,
-                       @Query("e") List<TestEnum[][][]> e,
-                       @Query("f") Map<TestEnum,TestEnum> f,
-                       @Query("g") Map<TestEnum,TestEnum[][][]> g,
-                       @Query("h") Map<TestEnum,List<TestEnum[][][]>> h
+       @Test
+       public void gc03_reqBeanQueryIfNE3() throws Exception {
+               String r = proxy.reqBeanQueryIfNE3(
+                       new ReqBeanQueryIfNE3() {
+                               @Override
+                               public String getX() {
+                                       return "foo";
+                               }
+                               @Override
+                               public String getY() {
+                                       return "";
+                               }
+                               @Override
+                               public String getZ() {
+                                       return null;
+                               }
+                       }
                );
+               assertEquals("OK", r);
+       }
 
-               @RemoteMethod(httpMethod="GET", path="/stringQuery1")
-               String stringQuery1(
-                       @Query String a
+       @Test
+       public void gc04_reqBeanQueryIfNE4() throws Exception {
+               String r = proxy.reqBeanQueryIfNE4(
+                       new ReqBeanQueryIfNE4() {
+                               @Override
+                               public String getX() {
+                                       return "foo";
+                               }
+                               @Override
+                               public String getY() {
+                                       return "";
+                               }
+                               @Override
+                               public String getZ() {
+                                       return null;
+                               }
+                       }
                );
+               assertEquals("OK", r);
+       }
 
-               @RemoteMethod(httpMethod="GET", path="/stringQuery2")
-               String stringQuery2(
-                       @Query("*") String a
+       @Test
+       public void gc05_reqBeanQueryIfNE5() throws Exception {
+               String r = proxy.reqBeanQueryIfNE5(
+                       new ReqBeanQueryIfNE5() {
+                               @Override
+                               public String getX() {
+                                       return "foo";
+                               }
+                               @Override
+                               public String getY() {
+                                       return "";
+                               }
+                               @Override
+                               public String getZ() {
+                                       return null;
+                               }
+                       }
                );
+               assertEquals("OK", r);
+       }
 
-               @RemoteMethod(httpMethod="GET", path="/mapQuery")
-               String mapQuery(
-                       @Query("*") Map<String,Object> a
-               );
+       @Test
+       public void gc06_reqBeanQueryIfNE6() throws Exception {
+               String r = proxy.reqBeanQueryIfNE6(
+                       new ReqBeanQueryIfNE6() {
+                               @Override
+                               public Map<String,Object> getX() {
+                                       return new 
AMap<String,Object>().append("a","foo").append("b","").append("c", null);
+                               }
 
-               @RemoteMethod(httpMethod="GET", path="/beanQuery")
-               String beanQuery(
-                       @Query("*") NeBean a
+                       }
+               );
+               assertEquals("OK", r);
+       }
+
+       @Test
+       public void gc07_reqBeanQueryIfNE7() throws Exception {
+               String r = proxy.reqBeanQueryIfNE7(
+                       new ReqBeanQueryIfNE7() {
+                               @Override
+                               public NeBean getX() {
+                                       return new NeBean().init();
+                               }
+                       }
+               );
+               assertEquals("OK", r);
+       }
+
+       
//--------------------------------------------------------------------------------
+       // RequestBean tests - FormData
+       
//--------------------------------------------------------------------------------
+
+       @Test
+       public void gd01_reqBeanFormData1() throws Exception {
+               String r = proxy.reqBeanFormData1(
+                       new ReqBeanFormData1() {
+                               @Override
+                               public int getA() {
+                                       return 1;
+                               }
+                               @Override
+                               public String getB() {
+                                       return "foo";
+                               }
+                       }
+               );
+               assertEquals("OK", r);
+       }
+
+       @Test
+       public void gd01_reqBeanFormData1a() throws Exception {
+               String r = proxy.reqBeanFormData1(
+                       new ReqBeanFormData1Impl()
+               );
+               assertEquals("OK", r);
+       }
+
+       @Test
+       public void gd02_reqBeanFormData2() throws Exception {
+               String r = proxy.reqBeanFormData2(
+                       new ReqBeanFormData2()
+               );
+               assertEquals("OK", r);
+       }
+
+       @Test
+       public void gd03_reqBeanFormData3() throws Exception {
+               String r = proxy.reqBeanFormData3(
+                       new ReqBeanFormData3() {
+                               @Override
+                               public int getX() {
+                                       return 1;
+                               }
+                               @Override
+                               public String getY() {
+                                       return "foo";
+                               }
+                       }
+               );
+               assertEquals("OK", r);
+       }
+
+       @Test
+       public void gd04_reqBeanFormData4() throws Exception {
+               String r = proxy.reqBeanFormData4(
+                       new ReqBeanFormData4() {
+                               @Override
+                               public int getX() {
+                                       return 1;
+                               }
+                               @Override
+                               public String getY() {
+                                       return "foo";
+                               }
+                       }
+               );
+               assertEquals("OK", r);
+       }
+
+       @Test
+       public void gd05_reqBeanFormData5() throws Exception {
+               String r = proxy.reqBeanFormData5(
+                       new ReqBeanFormData5() {
+                               @Override
+                               public int getX() {
+                                       return 1;
+                               }
+                               @Override
+                               public String getY() {
+                                       return "foo";
+                               }
+                       }
+               );
+               assertEquals("OK", r);
+       }
+
+       @Test
+       public void gd06_reqBeanFormData6() throws Exception {
+               String r = proxy.reqBeanFormData6(
+                       new ReqBeanFormData6() {
+                               @Override
+                               public Map<String,Object> getX() {
+                                       return new 
AMap<String,Object>().append("a",1).append("b","foo");
+                               }
+
+                       }
+               );
+               assertEquals("OK", r);
+       }
+
+       @Test
+       public void gd07_reqBeanFormData7() throws Exception {
+               String r = proxy.reqBeanFormData7(
+                       new ReqBeanFormData7() {
+                               @Override
+                               public ABean getX() {
+                                       return new ABean().init();
+                               }
+                       }
+               );
+               assertEquals("OK", r);
+       }
+
+       
//--------------------------------------------------------------------------------
+       // RequestBean tests - FormDataIfNE
+       
//--------------------------------------------------------------------------------
+
+       @Test
+       public void ge01_reqBeanFormDataIfNE1() throws Exception {
+               String r = proxy.reqBeanFormDataIfNE1(
+                       new ReqBeanFormDataIfNE1() {
+                               @Override
+                               public String getA() {
+                                       return "foo";
+                               }
+                               @Override
+                               public String getB() {
+                                       return "";
+                               }
+                               @Override
+                               public String getC() {
+                                       return null;
+                               }
+                       }
+               );
+               assertEquals("OK", r);
+       }
+
+       @Test
+       public void ge01_reqBeanFormDataIfNE1a() throws Exception {
+               String r = proxy.reqBeanFormDataIfNE1(
+                       new ReqBeanFormDataIfNE1Impl()
+               );
+               assertEquals("OK", r);
+       }
+
+       @Test
+       public void ge02_reqBeanFormDataIfNE2() throws Exception {
+               String r = proxy.reqBeanFormDataIfNE2(
+                       new ReqBeanFormDataIfNE2()
+               );
+               assertEquals("OK", r);
+       }
+
+       @Test
+       public void ge03_reqBeanFormDataIfNE3() throws Exception {
+               String r = proxy.reqBeanFormDataIfNE3(
+                       new ReqBeanFormDataIfNE3() {
+                               @Override
+                               public String getX() {
+                                       return "foo";
+                               }
+                               @Override
+                               public String getY() {
+                                       return "";
+                               }
+                               @Override
+                               public String getZ() {
+                                       return null;
+                               }
+                       }
+               );
+               assertEquals("OK", r);
+       }
+
+       @Test
+       public void ge04_reqBeanFormDataIfNE4() throws Exception {
+               String r = proxy.reqBeanFormDataIfNE4(
+                       new ReqBeanFormDataIfNE4() {
+                               @Override
+                               public String getX() {
+                                       return "foo";
+                               }
+                               @Override
+                               public String getY() {
+                                       return "";
+                               }
+                               @Override
+                               public String getZ() {
+                                       return null;
+                               }
+                       }
+               );
+               assertEquals("OK", r);
+       }
+
+       @Test
+       public void ge05_reqBeanFormDataIfNE5() throws Exception {
+               String r = proxy.reqBeanFormDataIfNE5(
+                       new ReqBeanFormDataIfNE5() {
+                               @Override
+                               public String getX() {
+                                       return "foo";
+                               }
+                               @Override
+                               public String getY() {
+                                       return "";
+                               }
+                               @Override
+                               public String getZ() {
+                                       return null;
+                               }
+                       }
+               );
+               assertEquals("OK", r);
+       }
+
+       @Test
+       public void ge06_reqBeanFormDataIfNE6() throws Exception {
+               String r = proxy.reqBeanFormDataIfNE6(
+                       new ReqBeanFormDataIfNE6() {
+                               @Override
+                               public Map<String,Object> getX() {
+                                       return new 
AMap<String,Object>().append("a","foo").append("b","").append("c", null);
+                               }
+
+                       }
+               );
+               assertEquals("OK", r);
+       }
+
+       @Test
+       public void ge07_reqBeanFormDataIfNE7() throws Exception {
+               String r = proxy.reqBeanFormDataIfNE7(
+                       new ReqBeanFormDataIfNE7() {
+                               @Override
+                               public NeBean getX() {
+                                       return new NeBean().init();
+                               }
+                       }
+               );
+               assertEquals("OK", r);
+       }
+
+       
//--------------------------------------------------------------------------------
+       // RequestBean tests - Header
+       
//--------------------------------------------------------------------------------
+
+       @Test
+       public void gf01_reqBeanHeader1() throws Exception {
+               String r = proxy.reqBeanHeader1(
+                       new ReqBeanHeader1() {
+                               @Override
+                               public int getA() {
+                                       return 1;
+                               }
+                               @Override
+                               public String getB() {
+                                       return "foo";
+                               }
+                       }
+               );
+               assertEquals("OK", r);
+       }
+
+       @Test
+       public void gf01_reqBeanHeader1a() throws Exception {
+               String r = proxy.reqBeanHeader1(
+                       new ReqBeanHeader1Impl()
+               );
+               assertEquals("OK", r);
+       }
+
+       @Test
+       public void gf02_reqBeanHeader2() throws Exception {
+               String r = proxy.reqBeanHeader2(
+                       new ReqBeanHeader2()
+               );
+               assertEquals("OK", r);
+       }
+
+       @Test
+       public void gf03_reqBeanHeader3() throws Exception {
+               String r = proxy.reqBeanHeader3(
+                       new ReqBeanHeader3() {
+                               @Override
+                               public int getX() {
+                                       return 1;
+                               }
+                               @Override
+                               public String getY() {
+                                       return "foo";
+                               }
+                       }
+               );
+               assertEquals("OK", r);
+       }
+
+       @Test
+       public void gf04_reqBeanHeader4() throws Exception {
+               String r = proxy.reqBeanHeader4(
+                       new ReqBeanHeader4() {
+                               @Override
+                               public int getX() {
+                                       return 1;
+                               }
+                               @Override
+                               public String getY() {
+                                       return "foo";
+                               }
+                       }
+               );
+               assertEquals("OK", r);
+       }
+
+       @Test
+       public void gf05_reqBeanHeader5() throws Exception {
+               String r = proxy.reqBeanHeader5(
+                       new ReqBeanHeader5() {
+                               @Override
+                               public int getX() {
+                                       return 1;
+                               }
+                               @Override
+                               public String getY() {
+                                       return "foo";
+                               }
+                       }
+               );
+               assertEquals("OK", r);
+       }
+
+       @Test
+       public void gf06_reqBeanHeader6() throws Exception {
+               String r = proxy.reqBeanHeader6(
+                       new ReqBeanHeader6() {
+                               @Override
+                               public Map<String,Object> getX() {
+                                       return new 
AMap<String,Object>().append("a",1).append("b","foo");
+                               }
+
+                       }
+               );
+               assertEquals("OK", r);
+       }
+
+       @Test
+       public void gf07_reqBeanHeader7() throws Exception {
+               String r = proxy.reqBeanHeader7(
+                       new ReqBeanHeader7() {
+                               @Override
+                               public ABean getX() {
+                                       return new ABean().init();
+                               }
+                       }
+               );
+               assertEquals("OK", r);
+       }
+
+       
//--------------------------------------------------------------------------------
+       // RequestBean tests - HeaderIfNE
+       
//--------------------------------------------------------------------------------
+
+       @Test
+       public void gg01_reqBeanHeaderIfNE1() throws Exception {
+               String r = proxy.reqBeanHeaderIfNE1(
+                       new ReqBeanHeaderIfNE1() {
+                               @Override
+                               public String getA() {
+                                       return "foo";
+                               }
+                               @Override
+                               public String getB() {
+                                       return "";
+                               }
+                               @Override
+                               public String getC() {
+                                       return null;
+                               }
+                       }
+               );
+               assertEquals("OK", r);
+       }
+
+       @Test
+       public void gg01_reqBeanHeaderIfNE1a() throws Exception {
+               String r = proxy.reqBeanHeaderIfNE1(
+                       new ReqBeanHeaderIfNE1Impl()
+               );
+               assertEquals("OK", r);
+       }
+
+       @Test
+       public void gg02_reqBeanHeaderIfNE2() throws Exception {
+               String r = proxy.reqBeanHeaderIfNE2(
+                       new ReqBeanHeaderIfNE2()
+               );
+               assertEquals("OK", r);
+       }
+
+       @Test
+       public void gg03_reqBeanHeaderIfNE3() throws Exception {
+               String r = proxy.reqBeanHeaderIfNE3(
+                       new ReqBeanHeaderIfNE3() {
+                               @Override
+                               public String getX() {
+                                       return "foo";
+                               }
+                               @Override
+                               public String getY() {
+                                       return "";
+                               }
+                               @Override
+                               public String getZ() {
+                                       return null;
+                               }
+                       }
+               );
+               assertEquals("OK", r);
+       }
+
+       @Test
+       public void gg04_reqBeanHeaderIfNE4() throws Exception {
+               String r = proxy.reqBeanHeaderIfNE4(
+                       new ReqBeanHeaderIfNE4() {
+                               @Override
+                               public String getX() {
+                                       return "foo";
+                               }
+                               @Override
+                               public String getY() {
+                                       return "";
+                               }
+                               @Override
+                               public String getZ() {
+                                       return null;
+                               }
+                       }
+               );
+               assertEquals("OK", r);
+       }
+
+       @Test
+       public void gg05_reqBeanHeaderIfNE5() throws Exception {
+               String r = proxy.reqBeanHeaderIfNE5(
+                       new ReqBeanHeaderIfNE5() {
+                               @Override
+                               public String getX() {
+                                       return "foo";
+                               }
+                               @Override
+                               public String getY() {
+                                       return "";
+                               }
+                               @Override
+                               public String getZ() {
+                                       return null;
+                               }
+                       }
+               );
+               assertEquals("OK", r);
+       }
+
+       @Test
+       public void gg06_reqBeanHeaderIfNE6() throws Exception {
+               String r = proxy.reqBeanHeaderIfNE6(
+                       new ReqBeanHeaderIfNE6() {
+                               @Override
+                               public Map<String,Object> getX() {
+                                       return new 
AMap<String,Object>().append("a","foo").append("b","").append("c", null);
+                               }
+
+                       }
+               );
+               assertEquals("OK", r);
+       }
+
+       @Test
+       public void gg07_reqBeanHeaderIfNE7() throws Exception {
+               String r = proxy.reqBeanHeaderIfNE7(
+                       new ReqBeanHeaderIfNE7() {
+                               @Override
+                               public NeBean getX() {
+                                       return new NeBean().init();
+                               }
+                       }
+               );
+               assertEquals("OK", r);
+       }
+
+
+       
//--------------------------------------------------------------------------------
+       // Proxy class
+       
//--------------------------------------------------------------------------------
+
+       @Remoteable(path="/testThirdPartyProxy")
+       public static interface ThirdPartyProxy {
+
+               
//--------------------------------------------------------------------------------
+               // Header tests
+               
//--------------------------------------------------------------------------------
+
+               @RemoteMethod(httpMethod="GET", path="/primitiveHeaders")
+               String primitiveHeaders(
+                       @Header("a") String a,
+                       @Header("an") String an,
+                       @Header("b") int b,
+                       @Header("c") Integer c,
+                       @Header("cn") Integer cn,
+                       @Header("d") Boolean d,
+                       @Header("e") float e,
+                       @Header("f") Float f
+               );
+
+               @RemoteMethod(httpMethod="GET", 
path="/primitiveCollectionHeaders")
+               String primitiveCollectionHeaders(
+                       @Header("a") int[][][] a,
+                       @Header("b") Integer[][][] b,
+                       @Header("c") String[][][] c,
+                       @Header("d") List<Integer> d,
+                       @Header("e") List<List<List<Integer>>> e,
+                       @Header("f") List<Integer[][][]> f,
+                       @Header("g") List<int[][][]> g,
+                       @Header("h") List<String> h
+               );
+
+               @RemoteMethod(httpMethod="GET", path="/beanHeaders")
+               String beanHeaders(
+                       @Header("a") ABean a,
+                       @Header("an") ABean an,
+                       @Header("b") ABean[][][] b,
+                       @Header("c") List<ABean> c,
+                       @Header("d") List<ABean[][][]> d,
+                       @Header("e") Map<String,ABean> e,
+                       @Header("f") Map<String,List<ABean>> f,
+                       @Header("g") Map<String,List<ABean[][][]>> g,
+                       @Header("h") Map<Integer,List<ABean>> h
+               );
+
+               @RemoteMethod(httpMethod="GET", path="/typedBeanHeaders")
+               String typedBeanHeaders(
+                       @Header("a") TypedBean a,
+                       @Header("an") TypedBean an,
+                       @Header("b") TypedBean[][][] b,
+                       @Header("c") List<TypedBean> c,
+                       @Header("d") List<TypedBean[][][]> d,
+                       @Header("e") Map<String,TypedBean> e,
+                       @Header("f") Map<String,List<TypedBean>> f,
+                       @Header("g") Map<String,List<TypedBean[][][]>> g,
+                       @Header("h") Map<Integer,List<TypedBean>> h
+               );
+
+               @RemoteMethod(httpMethod="GET", path="/swappedPojoHeaders")
+               String swappedPojoHeaders(
+                       @Header("a") SwappedPojo a,
+                       @Header("b") SwappedPojo[][][] b,
+                       @Header("c") Map<SwappedPojo,SwappedPojo> c,
+                       @Header("d") Map<SwappedPojo,SwappedPojo[][][]> d
+               );
+
+               @RemoteMethod(httpMethod="GET", 
path="/implicitSwappedPojoHeaders")
+               String implicitSwappedPojoHeaders(
+                       @Header("a") ImplicitSwappedPojo a,
+                       @Header("b") ImplicitSwappedPojo[][][] b,
+                       @Header("c") 
Map<ImplicitSwappedPojo,ImplicitSwappedPojo> c,
+                       @Header("d") 
Map<ImplicitSwappedPojo,ImplicitSwappedPojo[][][]> d
+               );
+
+               @RemoteMethod(httpMethod="GET", path="/enumHeaders")
+               String enumHeaders(
+                       @Header("a") TestEnum a,
+                       @Header("an") TestEnum an,
+                       @Header("b") TestEnum[][][] b,
+                       @Header("c") List<TestEnum> c,
+                       @Header("d") List<List<List<TestEnum>>> d,
+                       @Header("e") List<TestEnum[][][]> e,
+                       @Header("f") Map<TestEnum,TestEnum> f,
+                       @Header("g") Map<TestEnum,TestEnum[][][]> g,
+                       @Header("h") Map<TestEnum,List<TestEnum[][][]>> h
+               );
+
+               @RemoteMethod(httpMethod="GET", path="/mapHeader")
+               String mapHeader(
+                       @Header("*") Map<String,Object> a
+               );
+
+               @RemoteMethod(httpMethod="GET", path="/beanHeader")
+               String beanHeader(
+                       @Header("*") NeBean a
+               );
+
+               @RemoteMethod(httpMethod="GET", path="/nameValuePairsHeader")
+               String nameValuePairsHeader(
+                       @Header("*") NameValuePairs a
+               );
+
+               @RemoteMethod(httpMethod="GET", path="/headerIfNE1")
+               String headerIfNE1(
+                       @HeaderIfNE("a") String a
+               );
+
+               @RemoteMethod(httpMethod="GET", path="/headerIfNE2")
+               String headerIfNE2(
+                       @HeaderIfNE("a") String a
+               );
+
+               @RemoteMethod(httpMethod="GET", path="/headerIfNEMap")
+               String headerIfNEMap(
+                       @HeaderIfNE("*") Map<String,Object> a
+               );
+
+               @RemoteMethod(httpMethod="GET", path="/headerIfNEBean")
+               String headerIfNEBean(
+                       @HeaderIfNE("*") NeBean a
+               );
+
+               @RemoteMethod(httpMethod="GET", 
path="/headerIfNEnameValuePairs")
+               String headerIfNEnameValuePairs(
+                       @HeaderIfNE("*") NameValuePairs a
+               );
+
+
+               
//--------------------------------------------------------------------------------
+               // Query tests
+               
//--------------------------------------------------------------------------------
+
+               @RemoteMethod(httpMethod="GET", path="/primitiveQueries")
+               String primitiveQueries(
+                       @Query("a") String a,
+                       @Query("an") String an,
+                       @Query("b") int b,
+                       @Query("c") Integer c,
+                       @Query("cn") Integer cn,
+                       @Query("d") Boolean d,
+                       @Query("e") float e,
+                       @Query("f") Float f
+               );
+
+               @RemoteMethod(httpMethod="GET", 
path="/primitiveCollectionQueries")
+               String primitiveCollectionQueries(
+                       @Query("a") int[][][] a,
+                       @Query("b") Integer[][][] b,
+                       @Query("c") String[][][] c,
+                       @Query("d") List<Integer> d,
+                       @Query("e") List<List<List<Integer>>> e,
+                       @Query("f") List<Integer[][][]> f,
+                       @Query("g") List<int[][][]> g,
+                       @Query("h") List<String> h
+               );
+
+               @RemoteMethod(httpMethod="GET", path="/beanQueries")
+               String beanQueries(
+                       @Query("a") ABean a,
+                       @Query("an") ABean an,
+                       @Query("b") ABean[][][] b,
+                       @Query("c") List<ABean> c,
+                       @Query("d") List<ABean[][][]> d,
+                       @Query("e") Map<String,ABean> e,
+                       @Query("f") Map<String,List<ABean>> f,
+                       @Query("g") Map<String,List<ABean[][][]>> g,
+                       @Query("h") Map<Integer,List<ABean>> h
+               );
+
+               @RemoteMethod(httpMethod="GET", path="/typedBeanQueries")
+               String typedBeanQueries(
+                       @Query("a") TypedBean a,
+                       @Query("an") TypedBean an,
+                       @Query("b") TypedBean[][][] b,
+                       @Query("c") List<TypedBean> c,
+                       @Query("d") List<TypedBean[][][]> d,
+                       @Query("e") Map<String,TypedBean> e,
+                       @Query("f") Map<String,List<TypedBean>> f,
+                       @Query("g") Map<String,List<TypedBean[][][]>> g,
+                       @Query("h") Map<Integer,List<TypedBean>> h
+               );
+
+               @RemoteMethod(httpMethod="GET", path="/swappedPojoQueries")
+               String swappedPojoQueries(
+                       @Query("a") SwappedPojo a,
+                       @Query("b") SwappedPojo[][][] b,
+                       @Query("c") Map<SwappedPojo,SwappedPojo> c,
+                       @Query("d") Map<SwappedPojo,SwappedPojo[][][]> d
+               );
+
+               @RemoteMethod(httpMethod="GET", 
path="/implicitSwappedPojoQueries")
+               String implicitSwappedPojoQueries(
+                       @Query("a") ImplicitSwappedPojo a,
+                       @Query("b") ImplicitSwappedPojo[][][] b,
+                       @Query("c") 
Map<ImplicitSwappedPojo,ImplicitSwappedPojo> c,
+                       @Query("d") 
Map<ImplicitSwappedPojo,ImplicitSwappedPojo[][][]> d
+               );
+
+               @RemoteMethod(httpMethod="GET", path="/enumQueries")
+               String enumQueries(
+                       @Query("a") TestEnum a,
+                       @Query("an") TestEnum an,
+                       @Query("b") TestEnum[][][] b,
+                       @Query("c") List<TestEnum> c,
+                       @Query("d") List<List<List<TestEnum>>> d,
+                       @Query("e") List<TestEnum[][][]> e,
+                       @Query("f") Map<TestEnum,TestEnum> f,
+                       @Query("g") Map<TestEnum,TestEnum[][][]> g,
+                       @Query("h") Map<TestEnum,List<TestEnum[][][]>> h
+               );
+
+               @RemoteMethod(httpMethod="GET", path="/stringQuery1")
+               String stringQuery1(
+                       @Query String a
+               );
+
+               @RemoteMethod(httpMethod="GET", path="/stringQuery2")
+               String stringQuery2(
+                       @Query("*") String a
+               );
+
+               @RemoteMethod(httpMethod="GET", path="/mapQuery")
+               String mapQuery(
+                       @Query("*") Map<String,Object> a
+               );
+
+               @RemoteMethod(httpMethod="GET", path="/beanQuery")
+               String beanQuery(
+                       @Query("*") NeBean a
                );
 
                @RemoteMethod(httpMethod="GET", path="/nameValuePairsQuery")
@@ -1520,175 +2377,1001 @@ public class ThirdPartyProxyTest extends 
RestTestcase {
                        @Query("*") NameValuePairs a
                );
 
-               @RemoteMethod(httpMethod="GET", path="/queryIfNE1")
-               String queryIfNE1(
-                       @QueryIfNE("a") String a
+               @RemoteMethod(httpMethod="GET", path="/queryIfNE1")
+               String queryIfNE1(
+                       @QueryIfNE("a") String a
+               );
+
+               @RemoteMethod(httpMethod="GET", path="/queryIfNE2")
+               String queryIfNE2(
+                       @QueryIfNE("a") String a
+               );
+
+               @RemoteMethod(httpMethod="GET", path="/queryIfNEMap")
+               String queryIfNEMap(
+                       @QueryIfNE("*") Map<String,Object> a
+               );
+
+               @RemoteMethod(httpMethod="GET", path="/queryIfNEBean")
+               String queryIfNEBean(
+                       @QueryIfNE("*") NeBean a
+               );
+
+               @RemoteMethod(httpMethod="GET", path="/queryIfNEnameValuePairs")
+               String queryIfNEnameValuePairs(
+                       @QueryIfNE("*") NameValuePairs a
+               );
+
+
+               
//--------------------------------------------------------------------------------
+               // FormData tests
+               
//--------------------------------------------------------------------------------
+
+               @RemoteMethod(httpMethod="POST", path="/primitiveFormData")
+               String primitiveFormData(
+                       @FormData("a") String a,
+                       @FormData("an") String an,
+                       @FormData("b") int b,
+                       @FormData("c") Integer c,
+                       @FormData("cn") Integer cn,
+                       @FormData("d") Boolean d,
+                       @FormData("e") float e,
+                       @FormData("f") Float f
+               );
+
+               @RemoteMethod(httpMethod="POST", 
path="/primitiveCollectionFormData")
+               String primitiveCollectionFormData(
+                       @FormData("a") int[][][] a,
+                       @FormData("b") Integer[][][] b,
+                       @FormData("c") String[][][] c,
+                       @FormData("d") List<Integer> d,
+                       @FormData("e") List<List<List<Integer>>> e,
+                       @FormData("f") List<Integer[][][]> f,
+                       @FormData("g") List<int[][][]> g,
+                       @FormData("h") List<String> h
+               );
+
+               @RemoteMethod(httpMethod="POST", path="/beanFormData")
+               String beanFormData(
+                       @FormData("a") ABean a,
+                       @FormData("an") ABean an,
+                       @FormData("b") ABean[][][] b,
+                       @FormData("c") List<ABean> c,
+                       @FormData("d") List<ABean[][][]> d,
+                       @FormData("e") Map<String,ABean> e,
+                       @FormData("f") Map<String,List<ABean>> f,
+                       @FormData("g") Map<String,List<ABean[][][]>> g,
+                       @FormData("h") Map<Integer,List<ABean>> h
+               );
+
+               @RemoteMethod(httpMethod="POST", path="/typedBeanFormData")
+               String typedBeanFormData(
+                       @FormData("a") TypedBean a,
+                       @FormData("an") TypedBean an,
+                       @FormData("b") TypedBean[][][] b,
+                       @FormData("c") List<TypedBean> c,
+                       @FormData("d") List<TypedBean[][][]> d,
+                       @FormData("e") Map<String,TypedBean> e,
+                       @FormData("f") Map<String,List<TypedBean>> f,
+                       @FormData("g") Map<String,List<TypedBean[][][]>> g,
+                       @FormData("h") Map<Integer,List<TypedBean>> h
+               );
+
+               @RemoteMethod(httpMethod="POST", path="/swappedPojoFormData")
+               String swappedPojoFormData(
+                       @FormData("a") SwappedPojo a,
+                       @FormData("b") SwappedPojo[][][] b,
+                       @FormData("c") Map<SwappedPojo,SwappedPojo> c,
+                       @FormData("d") Map<SwappedPojo,SwappedPojo[][][]> d
+               );
+
+               @RemoteMethod(httpMethod="POST", 
path="/implicitSwappedPojoFormData")
+               String implicitSwappedPojoFormData(
+                       @FormData("a") ImplicitSwappedPojo a,
+                       @FormData("b") ImplicitSwappedPojo[][][] b,
+                       @FormData("c") 
Map<ImplicitSwappedPojo,ImplicitSwappedPojo> c,
+                       @FormData("d") 
Map<ImplicitSwappedPojo,ImplicitSwappedPojo[][][]> d
+               );
+
+               @RemoteMethod(httpMethod="POST", path="/enumFormData")
+               String enumFormData(
+                       @FormData("a") TestEnum a,
+                       @FormData("an") TestEnum an,
+                       @FormData("b") TestEnum[][][] b,
+                       @FormData("c") List<TestEnum> c,
+                       @FormData("d") List<List<List<TestEnum>>> d,
+                       @FormData("e") List<TestEnum[][][]> e,
+                       @FormData("f") Map<TestEnum,TestEnum> f,
+                       @FormData("g") Map<TestEnum,TestEnum[][][]> g,
+                       @FormData("h") Map<TestEnum,List<TestEnum[][][]>> h
+               );
+
+               @RemoteMethod(httpMethod="POST", path="/mapFormData")
+               String mapFormData(
+                       @FormData("*") Map<String,Object> a
+               );
+
+               @RemoteMethod(httpMethod="POST", path="/beanFormData2")
+               String beanFormData(
+                       @FormData("*") NeBean a
+               );
+
+               @RemoteMethod(httpMethod="POST", path="/nameValuePairsFormData")
+               String nameValuePairsFormData(
+                       @FormData("*") NameValuePairs a
+               );
+
+               @RemoteMethod(httpMethod="POST", path="/formDataIfNE1")
+               String formDataIfNE1(
+                       @FormDataIfNE("a") String a
+               );
+
+               @RemoteMethod(httpMethod="POST", path="/formDataIfNE2")
+               String formDataIfNE2(
+                       @FormDataIfNE("a") String a
+               );
+
+               @RemoteMethod(httpMethod="POST", path="/formDataIfNEMap")
+               String formDataIfNEMap(
+                       @FormDataIfNE("*") Map<String,Object> a
+               );
+
+               @RemoteMethod(httpMethod="POST", path="/formDataIfNEBean")
+               String formDataIfNEBean(
+                       @FormDataIfNE("*") NeBean a
+               );
+
+               @RemoteMethod(httpMethod="POST", 
path="/formDataIfNENameValuePairs")
+               String formDataIfNENameValuePairs(
+                       @FormDataIfNE("*") NameValuePairs a
+               );
+
+               
//--------------------------------------------------------------------------------
+               // Path tests
+               
//--------------------------------------------------------------------------------
+
+               @RemoteMethod(httpMethod="POST", path="/pathVars1/{a}/{b}")
+               String pathVars1(
+                       @Path("a") int a,
+                       @Path("b") String b
+               );
+
+               @RemoteMethod(httpMethod="POST", path="/pathVars2/{a}/{b}")
+               String pathVars2(
+                       @Path Map<String,Object> a
+               );
+
+               @RemoteMethod(httpMethod="POST", path="/pathVars3/{a}/{b}")
+               String pathVars3(
+                       @Path ABean a
+               );
+
+               
//--------------------------------------------------------------------------------
+               // RequestBean tests - Path
+               
//--------------------------------------------------------------------------------
+
+               @RemoteMethod(httpMethod="POST", path="/reqBeanPath/{a}/{b}")
+               String reqBeanPath1(
+                       @RequestBean ReqBeanPath1 rb
+               );
+
+               public static interface ReqBeanPath1 {
+                       @Path
+                       int getA();
+
+                       @Path
+                       String getB();
+               }
+
+               public static class ReqBeanPath1Impl implements ReqBeanPath1 {
+                       @Override
+                       public int getA() {
+                               return 1;
+                       }
+                       @Override
+                       public String getB() {
+                               return "foo";
+                       }
+               }
+
+
+               @RemoteMethod(httpMethod="POST", path="/reqBeanPath/{a}/{b}")
+               String reqBeanPath2(
+                       @RequestBean ReqBeanPath2 rb
+               );
+
+               public static class ReqBeanPath2 {
+                       @Path
+                       public int getA() {
+                               return 1;
+                       };
+
+                       @Path
+                       public String getB() {
+                               return "foo";
+                       }
+               }
+
+               @RemoteMethod(httpMethod="POST", path="/reqBeanPath/{a}/{b}")
+               String reqBeanPath3(
+                       @RequestBean ReqBeanPath3 rb
+               );
+
+               public static interface ReqBeanPath3 {
+                       @Path("a")
+                       int getX();
+
+                       @Path("b")
+                       String getY();
+               }
+
+               @RemoteMethod(httpMethod="POST", path="/reqBeanPath/{a}/{b}")
+               String reqBeanPath4(
+                       @RequestBean ReqBeanPath4 rb
+               );
+
+               public static interface ReqBeanPath4 {
+                       @Path
+                       @BeanProperty(name="a")
+                       int getX();
+
+                       @Path
+                       @BeanProperty(name="b")
+                       String getY();
+               }
+
+               @RemoteMethod(httpMethod="POST", path="/reqBeanPath/{a}/{b}")
+               String reqBeanPath5(
+                       @RequestBean ReqBeanPath5 rb
+               );
+
+               public static interface ReqBeanPath5 {
+                       @Path
+                       @BeanProperty(name="a")
+                       int getX();
+
+                       @Path
+                       @BeanProperty(name="b")
+                       String getY();
+               }
+
+               @RemoteMethod(httpMethod="POST", path="/reqBeanPath/{a}/{b}")
+               String reqBeanPath6(
+                       @RequestBean ReqBeanPath6 rb
+               );
+
+               public static interface ReqBeanPath6 {
+                       @Path
+                       Map<String,Object> getX();
+               }
+
+               @RemoteMethod(httpMethod="POST", path="/reqBeanPath/{a}/{b}")
+               String reqBeanPath7(
+                       @RequestBean ReqBeanPath7 rb
+               );
+
+               public static interface ReqBeanPath7 {
+                       @Path
+                       ABean getX();
+               }
+
+               
//--------------------------------------------------------------------------------
+               // RequestBean tests - Query
+               
//--------------------------------------------------------------------------------
+
+               @RemoteMethod(httpMethod="POST", path="/reqBeanQuery")
+               String reqBeanQuery1(
+                       @RequestBean ReqBeanQuery1 rb
+               );
+
+               public static interface ReqBeanQuery1 {
+                       @Query
+                       int getA();
+
+                       @Query
+                       String getB();
+               }
+
+               public static class ReqBeanQuery1Impl implements ReqBeanQuery1 {
+                       @Override
+                       public int getA() {
+                               return 1;
+                       }
+                       @Override
+                       public String getB() {
+                               return "foo";
+                       }
+               }
+
+
+               @RemoteMethod(httpMethod="POST", path="/reqBeanQuery")
+               String reqBeanQuery2(
+                       @RequestBean ReqBeanQuery2 rb
+               );
+
+               public static class ReqBeanQuery2 {
+                       @Query
+                       public int getA() {
+                               return 1;
+                       };
+
+                       @Query
+                       public String getB() {
+                               return "foo";
+                       }
+               }
+
+               @RemoteMethod(httpMethod="POST", path="/reqBeanQuery")
+               String reqBeanQuery3(
+                       @RequestBean ReqBeanQuery3 rb
+               );
+
+               public static interface ReqBeanQuery3 {
+                       @Query("a")
+                       int getX();
+
+                       @Query("b")
+                       String getY();
+               }
+
+               @RemoteMethod(httpMethod="POST", path="/reqBeanQuery")
+               String reqBeanQuery4(
+                       @RequestBean ReqBeanQuery4 rb
+               );
+
+               public static interface ReqBeanQuery4 {
+                       @Query
+                       @BeanProperty(name="a")
+                       int getX();
+
+                       @Query
+                       @BeanProperty(name="b")
+                       String getY();
+               }
+
+               @RemoteMethod(httpMethod="POST", path="/reqBeanQuery")
+               String reqBeanQuery5(
+                       @RequestBean ReqBeanQuery5 rb
+               );
+
+               public static interface ReqBeanQuery5 {
+                       @Query
+                       @BeanProperty(name="a")
+                       int getX();
+
+                       @Query
+                       @BeanProperty(name="b")
+                       String getY();
+               }
+
+               @RemoteMethod(httpMethod="POST", path="/reqBeanQuery")
+               String reqBeanQuery6(
+                       @RequestBean ReqBeanQuery6 rb
+               );
+
+               public static interface ReqBeanQuery6 {
+                       @Query
+                       Map<String,Object> getX();
+               }
+
+               @RemoteMethod(httpMethod="POST", path="/reqBeanQuery")
+               String reqBeanQuery7(
+                       @RequestBean ReqBeanQuery7 rb
+               );
+
+               public static interface ReqBeanQuery7 {
+                       @Query
+                       ABean getX();
+               }
+
+               
//--------------------------------------------------------------------------------
+               // RequestBean tests - QueryIfNE
+               
//--------------------------------------------------------------------------------
+
+               @RemoteMethod(httpMethod="POST", path="/reqBeanQueryIfNE")
+               String reqBeanQueryIfNE1(
+                       @RequestBean ReqBeanQueryIfNE1 rb
+               );
+
+               public static interface ReqBeanQueryIfNE1 {
+                       @QueryIfNE
+                       String getA();
+
+                       @QueryIfNE
+                       String getB();
+
+                       @QueryIfNE
+                       String getC();
+               }
+
+               public static class ReqBeanQueryIfNE1Impl implements 
ReqBeanQueryIfNE1 {
+                       @Override
+                       public String getA() {
+                               return "foo";
+                       }
+                       @Override
+                       public String getB() {
+                               return "";
+                       }
+                       @Override
+                       public String getC() {
+                               return null;
+                       }
+               }
+
+
+               @RemoteMethod(httpMethod="POST", path="/reqBeanQueryIfNE")
+               String reqBeanQueryIfNE2(
+                       @RequestBean ReqBeanQueryIfNE2 rb
+               );
+
+               public static class ReqBeanQueryIfNE2 {
+                       @QueryIfNE
+                       public String getA() {
+                               return "foo";
+                       };
+                       @QueryIfNE
+                       public String getB() {
+                               return "";
+                       }
+                       @QueryIfNE
+                       public String getC() {
+                               return null;
+                       }
+               }
+
+               @RemoteMethod(httpMethod="POST", path="/reqBeanQueryIfNE")
+               String reqBeanQueryIfNE3(
+                       @RequestBean ReqBeanQueryIfNE3 rb
                );
 
-               @RemoteMethod(httpMethod="GET", path="/queryIfNE2")
-               String queryIfNE2(
-                       @QueryIfNE("a") String a
+               public static interface ReqBeanQueryIfNE3 {
+                       @QueryIfNE("a")
+                       String getX();
+
+                       @QueryIfNE("b")
+                       String getY();
+
+                       @QueryIfNE("c")
+                       String getZ();
+               }
+
+               @RemoteMethod(httpMethod="POST", path="/reqBeanQueryIfNE")
+               String reqBeanQueryIfNE4(
+                       @RequestBean ReqBeanQueryIfNE4 rb
                );
 
-               @RemoteMethod(httpMethod="GET", path="/queryIfNEMap")
-               String queryIfNEMap(
-                       @QueryIfNE("*") Map<String,Object> a
+               public static interface ReqBeanQueryIfNE4 {
+                       @QueryIfNE
+                       @BeanProperty(name="a")
+                       String getX();
+
+                       @QueryIfNE
+                       @BeanProperty(name="b")
+                       String getY();
+
+                       @QueryIfNE
+                       @BeanProperty(name="c")
+                       String getZ();
+               }
+
+               @RemoteMethod(httpMethod="POST", path="/reqBeanQueryIfNE")
+               String reqBeanQueryIfNE5(
+                       @RequestBean ReqBeanQueryIfNE5 rb
                );
 
-               @RemoteMethod(httpMethod="GET", path="/queryIfNEBean")
-               String queryIfNEBean(
-                       @QueryIfNE("*") NeBean a
+               public static interface ReqBeanQueryIfNE5 {
+                       @QueryIfNE
+                       @BeanProperty(name="a")
+                       String getX();
+
+                       @QueryIfNE
+                       @BeanProperty(name="b")
+                       String getY();
+
+                       @QueryIfNE
+                       @BeanProperty(name="c")
+                       String getZ();
+               }
+
+               @RemoteMethod(httpMethod="POST", path="/reqBeanQueryIfNE")
+               String reqBeanQueryIfNE6(
+                       @RequestBean ReqBeanQueryIfNE6 rb
                );
 
-               @RemoteMethod(httpMethod="GET", path="/queryIfNEnameValuePairs")
-               String queryIfNEnameValuePairs(
-                       @QueryIfNE("*") NameValuePairs a
+               public static interface ReqBeanQueryIfNE6 {
+                       @QueryIfNE
+                       Map<String,Object> getX();
+               }
+
+               @RemoteMethod(httpMethod="POST", path="/reqBeanQueryIfNE")
+               String reqBeanQueryIfNE7(
+                       @RequestBean ReqBeanQueryIfNE7 rb
                );
 
+               public static interface ReqBeanQueryIfNE7 {
+                       @QueryIfNE
+                       NeBean getX();
+               }
 
                
//--------------------------------------------------------------------------------
-               // FormData tests
+               // RequestBean tests - FormData
                
//--------------------------------------------------------------------------------
 
-               @RemoteMethod(httpMethod="POST", path="/primitiveFormData")
-               String primitiveFormData(
-                       @FormData("a") String a,
-                       @FormData("an") String an,
-                       @FormData("b") int b,
-                       @FormData("c") Integer c,
-                       @FormData("cn") Integer cn,
-                       @FormData("d") Boolean d,
-                       @FormData("e") float e,
-                       @FormData("f") Float f
+               @RemoteMethod(httpMethod="POST", path="/reqBeanFormData")
+               String reqBeanFormData1(
+                       @RequestBean ReqBeanFormData1 rb
                );
 
-               @RemoteMethod(httpMethod="POST", 
path="/primitiveCollectionFormData")
-               String primitiveCollectionFormData(
-                       @FormData("a") int[][][] a,
-                       @FormData("b") Integer[][][] b,
-                       @FormData("c") String[][][] c,
-                       @FormData("d") List<Integer> d,
-                       @FormData("e") List<List<List<Integer>>> e,
-                       @FormData("f") List<Integer[][][]> f,
-                       @FormData("g") List<int[][][]> g,
-                       @FormData("h") List<String> h
+               public static interface ReqBeanFormData1 {
+                       @FormData
+                       int getA();
+
+                       @FormData
+                       String getB();
+               }
+
+               public static class ReqBeanFormData1Impl implements 
ReqBeanFormData1 {
+                       @Override
+                       public int getA() {
+                               return 1;
+                       }
+                       @Override
+                       public String getB() {
+                               return "foo";
+                       }
+               }
+
+
+               @RemoteMethod(httpMethod="POST", path="/reqBeanFormData")
+               String reqBeanFormData2(
+                       @RequestBean ReqBeanFormData2 rb
                );
 
-               @RemoteMethod(httpMethod="POST", path="/beanFormData")
-               String beanFormData(
-                       @FormData("a") ABean a,
-                       @FormData("an") ABean an,
-                       @FormData("b") ABean[][][] b,
-                       @FormData("c") List<ABean> c,
-                       @FormData("d") List<ABean[][][]> d,
-                       @FormData("e") Map<String,ABean> e,
-                       @FormData("f") Map<String,List<ABean>> f,
-                       @FormData("g") Map<String,List<ABean[][][]>> g,
-                       @FormData("h") Map<Integer,List<ABean>> h
+               public static class ReqBeanFormData2 {
+                       @FormData
+                       public int getA() {
+                               return 1;
+                       };
+
+                       @FormData
+                       public String getB() {
+                               return "foo";
+                       }
+               }
+
+               @RemoteMethod(httpMethod="POST", path="/reqBeanFormData")
+               String reqBeanFormData3(
+                       @RequestBean ReqBeanFormData3 rb
                );
 
-               @RemoteMethod(httpMethod="POST", path="/typedBeanFormData")
-               String typedBeanFormData(
-                       @FormData("a") TypedBean a,
-                       @FormData("an") TypedBean an,
-                       @FormData("b") TypedBean[][][] b,
-                       @FormData("c") List<TypedBean> c,
-                       @FormData("d") List<TypedBean[][][]> d,
-                       @FormData("e") Map<String,TypedBean> e,
-                       @FormData("f") Map<String,List<TypedBean>> f,
-                       @FormData("g") Map<String,List<TypedBean[][][]>> g,
-                       @FormData("h") Map<Integer,List<TypedBean>> h
+               public static interface ReqBeanFormData3 {
+                       @FormData("a")
+                       int getX();
+
+                       @FormData("b")
+                       String getY();
+               }
+
+               @RemoteMethod(httpMethod="POST", path="/reqBeanFormData")
+               String reqBeanFormData4(
+                       @RequestBean ReqBeanFormData4 rb
                );
 
-               @RemoteMethod(httpMethod="POST", path="/swappedPojoFormData")
-               String swappedPojoFormData(
-                       @FormData("a") SwappedPojo a,
-                       @FormData("b") SwappedPojo[][][] b,
-                       @FormData("c") Map<SwappedPojo,SwappedPojo> c,
-                       @FormData("d") Map<SwappedPojo,SwappedPojo[][][]> d
+               public static interface ReqBeanFormData4 {
+                       @FormData
+                       @BeanProperty(name="a")
+                       int getX();
+
+                       @FormData
+                       @BeanProperty(name="b")
+                       String getY();
+               }
+
+               @RemoteMethod(httpMethod="POST", path="/reqBeanFormData")
+               String reqBeanFormData5(
+                       @RequestBean ReqBeanFormData5 rb
                );
 
-               @RemoteMethod(httpMethod="POST", 
path="/implicitSwappedPojoFormData")
-               String implicitSwappedPojoFormData(
-                       @FormData("a") ImplicitSwappedPojo a,
-                       @FormData("b") ImplicitSwappedPojo[][][] b,
-                       @FormData("c") 
Map<ImplicitSwappedPojo,ImplicitSwappedPojo> c,
-                       @FormData("d") 
Map<ImplicitSwappedPojo,ImplicitSwappedPojo[][][]> d
+               public static interface ReqBeanFormData5 {
+                       @FormData
+                       @BeanProperty(name="a")
+                       int getX();
+
+                       @FormData
+                       @BeanProperty(name="b")
+                       String getY();
+               }
+
+               @RemoteMethod(httpMethod="POST", path="/reqBeanFormData")
+               String reqBeanFormData6(
+                       @RequestBean ReqBeanFormData6 rb
                );
 
-               @RemoteMethod(httpMethod="POST", path="/enumFormData")
-               String enumFormData(
-                       @FormData("a") TestEnum a,
-                       @FormData("an") TestEnum an,
-                       @FormData("b") TestEnum[][][] b,
-                       @FormData("c") List<TestEnum> c,
-                       @FormData("d") List<List<List<TestEnum>>> d,
-                       @FormData("e") List<TestEnum[][][]> e,
-                       @FormData("f") Map<TestEnum,TestEnum> f,
-                       @FormData("g") Map<TestEnum,TestEnum[][][]> g,
-                       @FormData("h") Map<TestEnum,List<TestEnum[][][]>> h
+               public static interface ReqBeanFormData6 {
+                       @FormData
+                       Map<String,Object> getX();
+               }
+
+               @RemoteMethod(httpMethod="POST", path="/reqBeanFormData")
+               String reqBeanFormData7(
+                       @RequestBean ReqBeanFormData7 rb
                );
 
-               @RemoteMethod(httpMethod="POST", path="/mapFormData")
-               String mapFormData(
-                       @FormData("*") Map<String,Object> a
+               public static interface ReqBeanFormData7 {
+                       @FormData
+                       ABean getX();
+               }
+
+               
//--------------------------------------------------------------------------------
+               // RequestBean tests - FormDataIfNE
+               
//--------------------------------------------------------------------------------
+
+               @RemoteMethod(httpMethod="POST", path="/reqBeanFormDataIfNE")
+               String reqBeanFormDataIfNE1(
+                       @RequestBean ReqBeanFormDataIfNE1 rb
                );
 
-               @RemoteMethod(httpMethod="POST", path="/beanFormData2")
-               String beanFormData(
-                       @FormData("*") NeBean a
+               public static interface ReqBeanFormDataIfNE1 {
+                       @FormDataIfNE
+                       String getA();
+
+                       @FormDataIfNE
+                       String getB();
+
+                       @FormDataIfNE
+                       String getC();
+               }
+
+               public static class ReqBeanFormDataIfNE1Impl implements 
ReqBeanFormDataIfNE1 {
+                       @Override
+                       public String getA() {
+                               return "foo";
+                       }
+                       @Override
+                       public String getB() {
+                               return "";
+                       }
+                       @Override
+                       public String getC() {
+                               return null;
+                       }
+               }
+
+
+               @RemoteMethod(httpMethod="POST", path="/reqBeanFormDataIfNE")
+               String reqBeanFormDataIfNE2(
+                       @RequestBean ReqBeanFormDataIfNE2 rb
+               );
+
+               public static class ReqBeanFormDataIfNE2 {
+                       @FormDataIfNE
+                       public String getA() {
+                               return "foo";
+                       };
+                       @FormDataIfNE
+                       public String getB() {
+                               return "";
+                       }
+                       @FormDataIfNE
+                       public String getC() {
+                               return null;
+                       }
+               }
+
+               @RemoteMethod(httpMethod="POST", path="/reqBeanFormDataIfNE")
+               String reqBeanFormDataIfNE3(
+                       @RequestBean ReqBeanFormDataIfNE3 rb
                );
 
-               @RemoteMethod(httpMethod="POST", path="/nameValuePairsFormData")
-               String nameValuePairsFormData(
-                       @FormData("*") NameValuePairs a
+               public static interface ReqBeanFormDataIfNE3 {
+                       @FormDataIfNE("a")
+                       String getX();
+
+                       @FormDataIfNE("b")
+                       String getY();
+
+                       @FormDataIfNE("c")
+                       String getZ();
+               }
+
+               @RemoteMethod(httpMethod="POST", path="/reqBeanFormDataIfNE")
+               String reqBeanFormDataIfNE4(
+                       @RequestBean ReqBeanFormDataIfNE4 rb
                );
 
-               @RemoteMethod(httpMethod="POST", path="/formDataIfNE1")
-               String formDataIfNE1(
-                       @FormDataIfNE("a") String a
+               public static interface ReqBeanFormDataIfNE4 {
+                       @FormDataIfNE
+                       @BeanProperty(name="a")
+                       String getX();
+
+                       @FormDataIfNE
+                       @BeanProperty(name="b")
+                       String getY();
+
+                       @FormDataIfNE
+                       @BeanProperty(name="c")
+                       String getZ();
+               }
+
+               @RemoteMethod(httpMethod="POST", path="/reqBeanFormDataIfNE")
+               String reqBeanFormDataIfNE5(
+                       @RequestBean ReqBeanFormDataIfNE5 rb
                );
 
-               @RemoteMethod(httpMethod="POST", path="/formDataIfNE2")
-               String formDataIfNE2(
-                       @FormDataIfNE("a") String a
+               public static interface ReqBeanFormDataIfNE5 {
+                       @FormDataIfNE
+                       @BeanProperty(name="a")
+                       String getX();
+
+                       @FormDataIfNE
+                       @BeanProperty(name="b")
+                       String getY();
+
+                       @FormDataIfNE
+                       @BeanProperty(name="c")
+                       String getZ();
+               }
+
+               @RemoteMethod(httpMethod="POST", path="/reqBeanFormDataIfNE")
+               String reqBeanFormDataIfNE6(
+                       @RequestBean ReqBeanFormDataIfNE6 rb
                );
 
-               @RemoteMethod(httpMethod="POST", path="/formDataIfNEMap")
-               String formDataIfNEMap(
-                       @FormDataIfNE("*") Map<String,Object> a
+               public static interface ReqBeanFormDataIfNE6 {
+                       @FormDataIfNE
+                       Map<String,Object> getX();
+               }
+
+               @RemoteMethod(httpMethod="POST", path="/reqBeanFormDataIfNE")
+               String reqBeanFormDataIfNE7(
+                       @RequestBean ReqBeanFormDataIfNE7 rb
                );
 
-               @RemoteMethod(httpMethod="POST", path="/formDataIfNEBean")
-               String formDataIfNEBean(
-                       @FormDataIfNE("*") NeBean a
+               public static interface ReqBeanFormDataIfNE7 {
+                       @FormDataIfNE
+                       NeBean getX();
+               }
+
+               
//--------------------------------------------------------------------------------
+               // RequestBean tests - Header
+               
//--------------------------------------------------------------------------------
+
+               @RemoteMethod(httpMethod="POST", path="/reqBeanHeader")
+               String reqBeanHeader1(
+                       @RequestBean ReqBeanHeader1 rb
                );
 
-               @RemoteMethod(httpMethod="POST", 
path="/formDataIfNENameValuePairs")
-               String formDataIfNENameValuePairs(
-                       @FormDataIfNE("*") NameValuePairs a
+               public static interface ReqBeanHeader1 {
+                       @Header
+                       int getA();
+
+                       @Header
+                       String getB();
+               }
+
+               public static class ReqBeanHeader1Impl implements 
ReqBeanHeader1 {
+                       @Override
+                       public int getA() {
+                               return 1;
+                       }
+                       @Override
+                       public String getB() {
+                               return "foo";
+                       }
+               }
+
+
+               @RemoteMethod(httpMethod="POST", path="/reqBeanHeader")
+               String reqBeanHeader2(
+                       @RequestBean ReqBeanHeader2 rb
+               );
+
+               public static class ReqBeanHeader2 {
+                       @Header
+                       public int getA() {
+                               return 1;
+                       };
+
+                       @Header
+                       public String getB() {
+                               return "foo";
+                       }
+               }
+
+               @RemoteMethod(httpMethod="POST", path="/reqBeanHeader")
+               String reqBeanHeader3(
+                       @RequestBean ReqBeanHeader3 rb
+               );
+
+               public static interface ReqBeanHeader3 {
+                       @Header("a")
+                       int getX();
+
+                       @Header("b")
+                       String getY();
+               }
+
+               @RemoteMethod(httpMethod="POST", path="/reqBeanHeader")
+               String reqBeanHeader4(
+                       @RequestBean ReqBeanHeader4 rb
+               );
+
+               public static interface ReqBeanHeader4 {
+                       @Header
+                       @BeanProperty(name="a")
+                       int getX();
+
+                       @Header
+                       @BeanProperty(name="b")
+                       String getY();
+               }
+
+               @RemoteMethod(httpMethod="POST", path="/reqBeanHeader")
+               String reqBeanHeader5(
+                       @RequestBean ReqBeanHeader5 rb
+               );
+
+               public static interface ReqBeanHeader5 {
+                       @Header
+                       @BeanProperty(name="a")
+                       int getX();
+
+                       @Header
+                       @BeanProperty(name="b")
+                       String getY();
+               }
+
+               @RemoteMethod(httpMethod="POST", path="/reqBeanHeader")
+               String reqBeanHeader6(
+                       @RequestBean ReqBeanHeader6 rb
                );
 
+               public static interface ReqBeanHeader6 {
+                       @Header
+                       Map<String,Object> getX();
+               }
+
+               @RemoteMethod(httpMethod="POST", path="/reqBeanHeader")
+               String reqBeanHeader7(
+                       @RequestBean ReqBeanHeader7 rb
+               );
+
+               public static interface ReqBeanHeader7 {
+                       @Header
+                       ABean getX();
+               }
+
                
//--------------------------------------------------------------------------------
-               // Path tests
+               // RequestBean tests - HeaderIfNE
                
//--------------------------------------------------------------------------------
 
-               @RemoteMethod(httpMethod="POST", path="/pathVars1/{a}/{b}")
-               String pathVars1(
-                       @Path("a") int a,
-                       @Path("b") String b
+               @RemoteMethod(httpMethod="POST", path="/reqBeanHeaderIfNE")
+               String reqBeanHeaderIfNE1(
+                       @RequestBean ReqBeanHeaderIfNE1 rb
                );
 
-               @RemoteMethod(httpMethod="POST", path="/pathVars2/{a}/{b}")
-               String pathVars2(
-                       @Path Map<String,Object> a
+               public static interface ReqBeanHeaderIfNE1 {
+                       @HeaderIfNE
+                       String getA();
+
+                       @HeaderIfNE
+                       String getB();
+
+                       @HeaderIfNE
+                       String getC();
+               }
+
+               public static class ReqBeanHeaderIfNE1Impl implements 
ReqBeanHeaderIfNE1 {
+                       @Override
+                       public String getA() {
+                               return "foo";
+                       }
+                       @Override
+                       public String getB() {
+                               return "";
+                       }
+                       @Override
+                       public String getC() {
+                               return null;
+                       }
+               }
+
+
+               @RemoteMethod(httpMethod="POST", path="/reqBeanHeaderIfNE")
+               String reqBeanHeaderIfNE2(
+                       @RequestBean ReqBeanHeaderIfNE2 rb
+               );
+
+               public static class ReqBeanHeaderIfNE2 {
+                       @HeaderIfNE
+                       public String getA() {
+                               return "foo";
+                       };
+                       @HeaderIfNE
+                       public String getB() {
+                               return "";
+                       }
+                       @HeaderIfNE
+                       public String getC() {
+                               return null;
+                       }
+               }
+
+               @RemoteMethod(httpMethod="POST", path="/reqBeanHeaderIfNE")
+               String reqBeanHeaderIfNE3(
+                       @RequestBean ReqBeanHeaderIfNE3 rb
                );
 
-               @RemoteMethod(httpMethod="POST", path="/pathVars3/{a}/{b}")
-               String pathVars3(
-                       @Path ABean a
+               public static interface ReqBeanHeaderIfNE3 {
+                       @HeaderIfNE("a")
+                       String getX();
+
+                       @HeaderIfNE("b")
+                       String getY();
+
+                       @HeaderIfNE("c")
+                       String getZ();
+               }
+
+               @RemoteMethod(httpMethod="POST", path="/reqBeanHeaderIfNE")
+               String reqBeanHeaderIfNE4(
+                       @RequestBean ReqBeanHeaderIfNE4 rb
+               );
+
+               public static interface ReqBeanHeaderIfNE4 {
+                       @HeaderIfNE
+                       @BeanProperty(name="a")
+                       String getX();
+
+                       @HeaderIfNE
+                       @BeanProperty(name="b")
+                       String getY();
+
+                       @HeaderIfNE
+                       @BeanProperty(name="c")
+                       String getZ();
+               }
+
+               @RemoteMethod(httpMethod="POST", path="/reqBeanHeaderIfNE")
+               String reqBeanHeaderIfNE5(
+                       @RequestBean ReqBeanHeaderIfNE5 rb
+               );
+
+               public static interface ReqBeanHeaderIfNE5 {
+                       @HeaderIfNE
+                       @BeanProperty(name="a")
+                       String getX();
+
+                       @HeaderIfNE
+                       @BeanProperty(name="b")
+                       String getY();
+
+                       @HeaderIfNE
+                       @BeanProperty(name="c")
+                       String getZ();
+               }
+
+               @RemoteMethod(httpMethod="POST", path="/reqBeanHeaderIfNE")
+               String reqBeanHeaderIfNE6(
+                       @RequestBean ReqBeanHeaderIfNE6 rb
+               );
+
+               public static interface ReqBeanHeaderIfNE6 {
+                       @HeaderIfNE
+                       Map<String,Object> getX();
+               }
+
+               @RemoteMethod(httpMethod="POST", path="/reqBeanHeaderIfNE")
+               String reqBeanHeaderIfNE7(
+                       @RequestBean ReqBeanHeaderIfNE7 rb
                );
 
+               public static interface ReqBeanHeaderIfNE7 {
+                       @HeaderIfNE
+                       NeBean getX();
+               }
+
                
//--------------------------------------------------------------------------------
                // Test return types.
                
//--------------------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/788b8488/juneau-rest/src/main/java/org/apache/juneau/rest/RestContext.java
----------------------------------------------------------------------
diff --git a/juneau-rest/src/main/java/org/apache/juneau/rest/RestContext.java 
b/juneau-rest/src/main/java/org/apache/juneau/rest/RestContext.java
index 258ff01..60ebda4 100644
--- a/juneau-rest/src/main/java/org/apache/juneau/rest/RestContext.java
+++ b/juneau-rest/src/main/java/org/apache/juneau/rest/RestContext.java
@@ -199,7 +199,7 @@ public final class RestContext extends Context {
        /**
         * The request servlet path.
         * <p>
-        * Automatically added to properties returned by {@link 
SerializerSession#getProperties()} and {@link ParserSession#getProperties()}.
+        * Automatically added to properties returned by {@link 
SerializerSession#getProperty(String)} and {@link 
ParserSession#getProperty(String)}.
         * <p>
         * Equivalent to the value returned by {@link 
RestRequest#getServletPath()}
         */
@@ -222,7 +222,7 @@ public final class RestContext extends Context {
        /**
         * The request URI path info.
         * <p>
-        * Automatically added to properties returned by {@link 
SerializerSession#getProperties()} and {@link ParserSession#getProperties()}.
+        * Automatically added to properties returned by {@link 
SerializerSession#getProperty(String)} and {@link 
ParserSession#getProperty(String)}.
         * <p>
         * Equivalent to the value returned by {@link RestRequest#getPathInfo()}
         */
@@ -231,7 +231,7 @@ public final class RestContext extends Context {
        /**
         * The request URI.
         * <p>
-        * Automatically added to properties returned by {@link 
SerializerSession#getProperties()} and {@link ParserSession#getProperties()}.
+        * Automatically added to properties returned by {@link 
SerializerSession#getProperty(String)} and {@link 
ParserSession#getProperty(String)}.
         * <p>
         * Equivalent to the value returned by {@link 
RestRequest#getRequestURI()}
         */
@@ -240,7 +240,7 @@ public final class RestContext extends Context {
        /**
         * The request method.
         * <p>
-        * Automatically added to properties returned by {@link 
SerializerSession#getProperties()} and {@link ParserSession#getProperties()}.
+        * Automatically added to properties returned by {@link 
SerializerSession#getProperty(String)} and {@link 
ParserSession#getProperty(String)}.
         * <p>
         * Equivalent to the value returned by {@link RestRequest#getMethod()}
         */
@@ -249,7 +249,7 @@ public final class RestContext extends Context {
        /**
         * The localized servlet title.
         * <p>
-        * Automatically added to properties returned by {@link 
SerializerSession#getProperties()} and {@link ParserSession#getProperties()}.
+        * Automatically added to properties returned by {@link 
SerializerSession#getProperty(String)} and {@link 
ParserSession#getProperty(String)}.
         * <p>
         * Equivalent to the value returned by {@link 
RestRequest#getServletTitle()}
         */
@@ -258,7 +258,7 @@ public final class RestContext extends Context {
        /**
         * The localized servlet description.
         * <p>
-        * Automatically added to properties returned by {@link 
SerializerSession#getProperties()} and {@link ParserSession#getProperties()}.
+        * Automatically added to properties returned by {@link 
SerializerSession#getProperty(String)} and {@link 
ParserSession#getProperty(String)}.
         * <p>
         * Equivalent to the value returned by {@link 
RestRequest#getServletDescription()}
         */
@@ -267,7 +267,7 @@ public final class RestContext extends Context {
        /**
         * The localized method summary.
         * <p>
-        * Automatically added to properties returned by {@link 
SerializerSession#getProperties()} and {@link ParserSession#getProperties()}.
+        * Automatically added to properties returned by {@link 
SerializerSession#getProperty(String)} and {@link 
ParserSession#getProperty(String)}.
         * <p>
         * Equivalent to the value returned by {@link 
RestRequest#getMethodSummary()}
         */
@@ -276,7 +276,7 @@ public final class RestContext extends Context {
        /**
         * The localized method description.
         * <p>
-        * Automatically added to properties returned by {@link 
SerializerSession#getProperties()} and {@link ParserSession#getProperties()}.
+        * Automatically added to properties returned by {@link 
SerializerSession#getProperty(String)} and {@link 
ParserSession#getProperty(String)}.
         * <p>
         * Equivalent to the value returned by {@link 
RestRequest#getMethodDescription()}
         */

Reply via email to