JUNEAU-169 Dynamic annotations.
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/PropertyStoreTest.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/PropertyStoreTest.java
index d879947..04f8758 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/PropertyStoreTest.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/PropertyStoreTest.java
@@ -17,6 +17,7 @@
import java.util.*;
+import org.apache.juneau.html.*;
import org.apache.juneau.html.annotation.*;
import org.apache.juneau.json.annotation.*;
import org.apache.juneau.utils.*;
@@ -1794,6 +1795,23 @@
@Json(on="foo")
public static class A4 {}
+ @Test
+ public void testEqualsWithAnnotations() {
+ HtmlSerializer
+ s1 = HtmlSerializer.create().build(),
+ s2 = HtmlSerializer.create().applyAnnotations(B1.class).build(),
+ s3 = HtmlSerializer.create().applyAnnotations(B1.class).build(),
+ s4 = HtmlSerializer.create().applyAnnotations(B2.class).build();
+ assertFalse(s1.getPropertyStore().equals(s2.getPropertyStore()));
+ assertFalse(s1.getPropertyStore().equals(s4.getPropertyStore()));
+ assertTrue(s2.getPropertyStore().equals(s3.getPropertyStore()));
+ }
+
+ @HtmlConfig(annotateHtml={@Html(on="B1", format=HtmlFormat.XML)})
+ public static class B1 {}
+ @HtmlConfig(annotateHtml={@Html(on="B2", format=HtmlFormat.HTML)})
+ public static class B2 {}
+
//-------------------------------------------------------------------------------------------------------------------
// Utility methods
//-------------------------------------------------------------------------------------------------------------------
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripBeanMapsTest.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripBeanMapsTest.java
index 918c67c..ae9810b 100755
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripBeanMapsTest.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripBeanMapsTest.java
@@ -38,8 +38,10 @@
@SuppressWarnings({"unchecked","serial"})
public class RoundTripBeanMapsTest extends RoundTripTest {
+ static Class<?>[] ANNOTATED_CLASSES={L2.class, M2.class};
+
public RoundTripBeanMapsTest(String label, SerializerBuilder s, ParserBuilder p, int flags) throws Exception {
- super(label, s, p, flags);
+ super(label, s.applyAnnotations(ANNOTATED_CLASSES), p == null ? null : p.applyAnnotations(ANNOTATED_CLASSES), flags);
}
@Override /* RoundTripTest */
@@ -927,6 +929,27 @@
}
}
+ @Test
+ public void testWrapperAttrAnnotationOnBean_usingConfig() throws Exception {
+ L2 t = L2.create();
+ t = roundTrip(t, L2.class);
+
+ Map<String,L2> m = new LinkedHashMap<>();
+ m.put("bar", L2.create());
+ roundTrip(m, LinkedHashMap.class, String.class, L2.class);
+ }
+
+ @JsonConfig(annotateJson=@Json(on="L2",wrapperAttr="foo"))
+ public static class L2 {
+ public int f1;
+
+ static L2 create() {
+ L2 l = new L2();
+ l.f1 = 1;
+ return l;
+ }
+ }
+
//====================================================================================================
// testWrapperAttrAnnotationOnNonBean
//====================================================================================================
@@ -962,6 +985,38 @@
}
}
+ @Test
+ public void testWrapperAttrAnnotationOnNonBean_usingConfig() throws Exception {
+ M2 t = M2.create();
+ t = roundTrip(t, M2.class);
+
+ Map<String,M2> m = new LinkedHashMap<>();
+ m.put("bar", M2.create());
+ roundTrip(m, LinkedHashMap.class, String.class, M2.class);
+ }
+
+ @JsonConfig(annotateJson=@Json(on="M2",wrapperAttr="foo"))
+ public static class M2 {
+ int f1;
+
+ static M2 create() {
+ M2 m = new M2();
+ m.f1 = 1;
+ return m;
+ }
+
+ @Override /* Object */
+ public String toString() {
+ return String.valueOf(f1);
+ }
+
+ public static M2 valueOf(String s) {
+ M2 m = new M2();
+ m.f1 = Integer.parseInt(s);
+ return m;
+ }
+ }
+
//====================================================================================================
// testBeanPropertyWithBeanWithAttrsField
//====================================================================================================
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/html/BasicHtmlTest.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/html/BasicHtmlTest.java
index e1fbcdc..605e3a2 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/html/BasicHtmlTest.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/html/BasicHtmlTest.java
@@ -31,11 +31,14 @@
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class BasicHtmlTest {
+ private static final Class<?>[] ANNOTATED_CLASSES = {
+ BeanWithWhitespaceTextFields2.class, BeanWithWhitespaceTextPwsFields2.class, BeanWithWhitespaceMixedFields2.class, BeanWithWhitespaceMixedPwsFields2.class
+ };
private static final HtmlSerializer
- s1 = HtmlSerializer.DEFAULT_SQ.builder().addRootType().build(),
- s2 = HtmlSerializer.DEFAULT_SQ_READABLE.builder().addRootType().build(),
- s3 = HtmlSerializer.DEFAULT_SQ.builder().build();
- private static final HtmlParser parser = HtmlParser.DEFAULT;
+ s1 = HtmlSerializer.DEFAULT_SQ.builder().addRootType().applyAnnotations(ANNOTATED_CLASSES).build(),
+ s2 = HtmlSerializer.DEFAULT_SQ_READABLE.builder().addRootType().applyAnnotations(ANNOTATED_CLASSES).build(),
+ s3 = HtmlSerializer.DEFAULT_SQ.builder().applyAnnotations(ANNOTATED_CLASSES).build();
+ private static final HtmlParser parser = HtmlParser.DEFAULT.builder().applyAnnotations(ANNOTATED_CLASSES).build();
@Parameterized.Parameters
public static Collection<Object[]> getParameters() {
@@ -2521,6 +2524,358 @@
}
}
},
+ { /* 56 */
+ new Input<BeanWithWhitespaceTextFields2>(
+ "BeanWithWhitespaceTextFields2-1",
+ BeanWithWhitespaceTextFields2.class,
+ new BeanWithWhitespaceTextFields2().init(null),
+ "<object nil='true'></object>",
+ "<object nil='true'>\n</object>\n",
+ "<object nil='true'></object>"
+ )
+ {
+ @Override
+ public void verify(BeanWithWhitespaceTextFields2 o) {
+ assertInstanceOf(BeanWithWhitespaceTextFields2.class, o);
+ }
+ }
+ },
+ { /* 57 */
+ new Input<BeanWithWhitespaceTextFields2>(
+ "BeanWithWhitespaceTextFields2-2",
+ BeanWithWhitespaceTextFields2.class,
+ new BeanWithWhitespaceTextFields2().init(""),
+ "<object><sp/></object>",
+ "<object><sp/></object>\n",
+ "<object><sp/></object>"
+ )
+ {
+ @Override
+ public void verify(BeanWithWhitespaceTextFields2 o) {
+ assertInstanceOf(BeanWithWhitespaceTextFields2.class, o);
+ }
+ }
+ },
+ { /* 58 */
+ new Input<BeanWithWhitespaceTextFields2>(
+ "BeanWithWhitespaceTextFields2-3",
+ BeanWithWhitespaceTextFields2.class,
+ new BeanWithWhitespaceTextFields2().init(" "),
+ "<object><sp> </sp></object>",
+ "<object><sp> </sp></object>\n",
+ "<object><sp> </sp></object>"
+ )
+ {
+ @Override
+ public void verify(BeanWithWhitespaceTextFields2 o) {
+ assertInstanceOf(BeanWithWhitespaceTextFields2.class, o);
+ }
+ }
+ },
+ { /* 59 */
+ new Input<BeanWithWhitespaceTextFields2>(
+ "BeanWithWhitespaceTextFields2-4",
+ BeanWithWhitespaceTextFields2.class,
+ new BeanWithWhitespaceTextFields2().init(" "),
+ "<object><sp> </sp><sp> </sp></object>",
+ "<object><sp> </sp><sp> </sp></object>\n",
+ "<object><sp> </sp><sp> </sp></object>"
+ )
+ {
+ @Override
+ public void verify(BeanWithWhitespaceTextFields2 o) {
+ assertInstanceOf(BeanWithWhitespaceTextFields2.class, o);
+ }
+ }
+ },
+ { /* 60 */
+ new Input<BeanWithWhitespaceTextFields2>(
+ "BeanWithWhitespaceTextFields2-5",
+ BeanWithWhitespaceTextFields2.class,
+ new BeanWithWhitespaceTextFields2().init(" foobar "),
+ "<object><sp> </sp> foobar <sp> </sp></object>",
+ "<object><sp> </sp> foobar <sp> </sp></object>\n",
+ "<object><sp> </sp> foobar <sp> </sp></object>"
+ )
+ {
+ @Override
+ public void verify(BeanWithWhitespaceTextFields2 o) {
+ assertInstanceOf(BeanWithWhitespaceTextFields2.class, o);
+ }
+ }
+ },
+ { /* 61 */
+ new Input<BeanWithWhitespaceTextPwsFields2>(
+ "BeanWithWhitespaceTextPwsFields2-1",
+ BeanWithWhitespaceTextPwsFields2.class,
+ new BeanWithWhitespaceTextPwsFields2().init(null),
+ "<object nil='true'></object>",
+ "<object nil='true'>\n</object>\n",
+ "<object nil='true'></object>"
+ )
+ {
+ @Override
+ public void verify(BeanWithWhitespaceTextPwsFields2 o) {
+ assertInstanceOf(BeanWithWhitespaceTextPwsFields2.class, o);
+ }
+ }
+ },
+ { /* 62 */
+ new Input<BeanWithWhitespaceTextPwsFields2>(
+ "BeanWithWhitespaceTextPwsFields2-2",
+ BeanWithWhitespaceTextPwsFields2.class,
+ new BeanWithWhitespaceTextPwsFields2().init(""),
+ "<object><sp/></object>",
+ "<object><sp/></object>\n",
+ "<object><sp/></object>"
+ )
+ {
+ @Override
+ public void verify(BeanWithWhitespaceTextPwsFields2 o) {
+ assertInstanceOf(BeanWithWhitespaceTextPwsFields2.class, o);
+ }
+ }
+ },
+ { /* 63 */
+ new Input<BeanWithWhitespaceTextPwsFields2>(
+ "BeanWithWhitespaceTextPwsFields2-3",
+ BeanWithWhitespaceTextPwsFields2.class,
+ new BeanWithWhitespaceTextPwsFields2().init(" "),
+ "<object> </object>",
+ "<object> </object>\n",
+ "<object> </object>"
+ )
+ {
+ @Override
+ public void verify(BeanWithWhitespaceTextPwsFields2 o) {
+ assertInstanceOf(BeanWithWhitespaceTextPwsFields2.class, o);
+ }
+ }
+ },
+ { /* 64 */
+ new Input<BeanWithWhitespaceTextPwsFields2>(
+ "BeanWithWhitespaceTextPwsFields2-4",
+ BeanWithWhitespaceTextPwsFields2.class,
+ new BeanWithWhitespaceTextPwsFields2().init(" "),
+ "<object> </object>",
+ "<object> </object>\n",
+ "<object> </object>"
+ )
+ {
+ @Override
+ public void verify(BeanWithWhitespaceTextPwsFields2 o) {
+ assertInstanceOf(BeanWithWhitespaceTextPwsFields2.class, o);
+ }
+ }
+ },
+ { /* 65 */
+ new Input<BeanWithWhitespaceTextPwsFields2>(
+ "BeanWithWhitespaceTextPwsFields2-5",
+ BeanWithWhitespaceTextPwsFields2.class,
+ new BeanWithWhitespaceTextPwsFields2().init(" foobar "),
+ "<object> foobar </object>",
+ "<object> foobar </object>\n",
+ "<object> foobar </object>"
+ )
+ {
+ @Override
+ public void verify(BeanWithWhitespaceTextPwsFields2 o) {
+ assertInstanceOf(BeanWithWhitespaceTextPwsFields2.class, o);
+ }
+ }
+ },
+ { /* 66 */
+ new Input<BeanWithWhitespaceMixedFields2>(
+ "BeanWithWhitespaceMixedFields2-1",
+ BeanWithWhitespaceMixedFields2.class,
+ new BeanWithWhitespaceMixedFields2().init(null),
+ "<object nil='true'></object>",
+ "<object nil='true'>\n</object>\n",
+ "<object nil='true'></object>"
+ )
+ {
+ @Override
+ public void verify(BeanWithWhitespaceMixedFields2 o) {
+ assertInstanceOf(BeanWithWhitespaceMixedFields2.class, o);
+ }
+ }
+ },
+ { /* 67 */
+ new Input<BeanWithWhitespaceMixedFields2>(
+ "BeanWithWhitespaceMixedFields2-2",
+ BeanWithWhitespaceMixedFields2.class,
+ new BeanWithWhitespaceMixedFields2().init(new String[0]),
+ "<object></object>",
+ "<object></object>\n",
+ "<object></object>"
+ )
+ {
+ @Override
+ public void verify(BeanWithWhitespaceMixedFields2 o) {
+ assertInstanceOf(BeanWithWhitespaceMixedFields2.class, o);
+ }
+ }
+ },
+ { /* 68 */
+ new Input<BeanWithWhitespaceMixedFields2>(
+ "BeanWithWhitespaceMixedFields2-3",
+ BeanWithWhitespaceMixedFields2.class,
+ new BeanWithWhitespaceMixedFields2().init(new String[]{""}),
+ "<object><sp/></object>",
+ "<object><sp/></object>\n",
+ "<object><sp/></object>"
+ )
+ {
+ @Override
+ public void verify(BeanWithWhitespaceMixedFields2 o) {
+ assertInstanceOf(BeanWithWhitespaceMixedFields2.class, o);
+ }
+ }
+ },
+ { /* 69 */
+ new Input<BeanWithWhitespaceMixedFields2>(
+ "BeanWithWhitespaceMixedFields2-4",
+ BeanWithWhitespaceMixedFields2.class,
+ new BeanWithWhitespaceMixedFields2().init(new String[]{" "}),
+ "<object><sp> </sp></object>",
+ "<object><sp> </sp></object>\n",
+ "<object><sp> </sp></object>"
+ )
+ {
+ @Override
+ public void verify(BeanWithWhitespaceMixedFields2 o) {
+ assertInstanceOf(BeanWithWhitespaceMixedFields2.class, o);
+ }
+ }
+ },
+ { /* 70 */
+ new Input<BeanWithWhitespaceMixedFields2>(
+ "BeanWithWhitespaceMixedFields2-5",
+ BeanWithWhitespaceMixedFields2.class,
+ new BeanWithWhitespaceMixedFields2().init(new String[]{" "}),
+ "<object><sp> </sp><sp> </sp></object>",
+ "<object><sp> </sp><sp> </sp></object>\n",
+ "<object><sp> </sp><sp> </sp></object>"
+ )
+ {
+ @Override
+ public void verify(BeanWithWhitespaceMixedFields2 o) {
+ assertInstanceOf(BeanWithWhitespaceMixedFields2.class, o);
+ }
+ }
+ },
+ { /* 71 */
+ new Input<BeanWithWhitespaceMixedFields2>(
+ "BeanWithWhitespaceMixedFields2-6",
+ BeanWithWhitespaceMixedFields2.class,
+ new BeanWithWhitespaceMixedFields2().init(new String[]{" foobar "}),
+ "<object><sp> </sp> foobar <sp> </sp></object>",
+ "<object><sp> </sp> foobar <sp> </sp></object>\n",
+ "<object><sp> </sp> foobar <sp> </sp></object>"
+ )
+ {
+ @Override
+ public void verify(BeanWithWhitespaceMixedFields2 o) {
+ assertInstanceOf(BeanWithWhitespaceMixedFields2.class, o);
+ }
+ }
+ },
+ { /* 72 */
+ new Input<BeanWithWhitespaceMixedPwsFields2>(
+ "BeanWithWhitespaceMixedPwsFields2-1",
+ BeanWithWhitespaceMixedPwsFields2.class,
+ new BeanWithWhitespaceMixedPwsFields2().init(null),
+ "<object nil='true'></object>",
+ "<object nil='true'>\n</object>\n",
+ "<object nil='true'></object>"
+ )
+ {
+ @Override
+ public void verify(BeanWithWhitespaceMixedPwsFields2 o) {
+ assertInstanceOf(BeanWithWhitespaceMixedPwsFields2.class, o);
+ }
+ }
+ },
+ { /* 73 */
+ new Input<BeanWithWhitespaceMixedPwsFields2>(
+ "BeanWithWhitespaceMixedPwsFields2-2",
+ BeanWithWhitespaceMixedPwsFields2.class,
+ new BeanWithWhitespaceMixedPwsFields2().init(new String[0]),
+ "<object></object>",
+ "<object></object>\n",
+ "<object></object>"
+ )
+ {
+ @Override
+ public void verify(BeanWithWhitespaceMixedPwsFields2 o) {
+ assertInstanceOf(BeanWithWhitespaceMixedPwsFields2.class, o);
+ }
+ }
+ },
+ { /* 74 */
+ new Input<BeanWithWhitespaceMixedPwsFields2>(
+ "BeanWithWhitespaceMixedPwsFields2-3",
+ BeanWithWhitespaceMixedPwsFields2.class,
+ new BeanWithWhitespaceMixedPwsFields2().init(new String[]{""}),
+ "<object><sp/></object>",
+ "<object><sp/></object>\n",
+ "<object><sp/></object>"
+ )
+ {
+ @Override
+ public void verify(BeanWithWhitespaceMixedPwsFields2 o) {
+ assertInstanceOf(BeanWithWhitespaceMixedPwsFields2.class, o);
+ }
+ }
+ },
+ { /* 75 */
+ new Input<BeanWithWhitespaceMixedPwsFields2>(
+ "BeanWithWhitespaceMixedPwsFields2-4",
+ BeanWithWhitespaceMixedPwsFields2.class,
+ new BeanWithWhitespaceMixedPwsFields2().init(new String[]{" "}),
+ "<object> </object>",
+ "<object> </object>\n",
+ "<object> </object>"
+ )
+ {
+ @Override
+ public void verify(BeanWithWhitespaceMixedPwsFields2 o) {
+ assertInstanceOf(BeanWithWhitespaceMixedPwsFields2.class, o);
+ }
+ }
+ },
+ { /* 76 */
+ new Input<BeanWithWhitespaceMixedPwsFields2>(
+ "BeanWithWhitespaceMixedPwsFields2-5",
+ BeanWithWhitespaceMixedPwsFields2.class,
+ new BeanWithWhitespaceMixedPwsFields2().init(new String[]{" "}),
+ "<object> </object>",
+ "<object> </object>\n",
+ "<object> </object>"
+ )
+ {
+ @Override
+ public void verify(BeanWithWhitespaceMixedPwsFields2 o) {
+ assertInstanceOf(BeanWithWhitespaceMixedPwsFields2.class, o);
+ }
+ }
+ },
+ { /* 77 */
+ new Input<BeanWithWhitespaceMixedPwsFields2>(
+ "BeanWithWhitespaceMixedPwsFields2-6",
+ BeanWithWhitespaceMixedPwsFields2.class,
+ new BeanWithWhitespaceMixedPwsFields2().init(new String[]{" foobar "}),
+ "<object> foobar </object>",
+ "<object> foobar </object>\n",
+ "<object> foobar </object>"
+ )
+ {
+ @Override
+ public void verify(BeanWithWhitespaceMixedPwsFields2 o) {
+ assertInstanceOf(BeanWithWhitespaceMixedPwsFields2.class, o);
+ }
+ }
+ },
});
}
@@ -3013,4 +3368,50 @@
return this;
}
}
+
+ @HtmlConfig(annotateHtml={@Html(on="BeanWithWhitespaceTextFields2",format=XML)})
+ @XmlConfig(annotateXml={@Xml(on="BeanWithWhitespaceTextFields2.a",format=XmlFormat.TEXT)})
+ public static class BeanWithWhitespaceTextFields2 {
+ public String a;
+
+ public BeanWithWhitespaceTextFields2 init(String s) {
+ a = s;
+ return this;
+ }
+ }
+
+ @HtmlConfig(annotateHtml={@Html(on="BeanWithWhitespaceTextPwsFields2",format=XML)})
+ @XmlConfig(annotateXml={@Xml(on="BeanWithWhitespaceTextPwsFields2.a",format=XmlFormat.TEXT_PWS)})
+ public static class BeanWithWhitespaceTextPwsFields2 {
+ public String a;
+
+ public BeanWithWhitespaceTextPwsFields2 init(String s) {
+ a = s;
+ return this;
+ }
+ }
+
+ @HtmlConfig(annotateHtml={@Html(on="BeanWithWhitespaceMixedFields2",format=XML)})
+ @XmlConfig(annotateXml={@Xml(on="BeanWithWhitespaceMixedFields2.a",format=XmlFormat.MIXED)})
+ public static class BeanWithWhitespaceMixedFields2 {
+ public String[] a;
+
+ public BeanWithWhitespaceMixedFields2 init(String[] s) {
+ a = s;
+ return this;
+ }
+ }
+
+ @HtmlConfig(annotateHtml={@Html(on="BeanWithWhitespaceMixedPwsFields2",format=XML)})
+ @XmlConfig(annotateXml={@Xml(on="BeanWithWhitespaceMixedPwsFields2.a",format=XmlFormat.MIXED_PWS)})
+ @Html(format=XML)
+ public static class BeanWithWhitespaceMixedPwsFields2 {
+ public String[] a;
+
+ public BeanWithWhitespaceMixedPwsFields2 init(String[] s) {
+ a = s;
+ return this;
+ }
+ }
+
}
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/html/HtmlTest.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/html/HtmlTest.java
index 4408c1d..811545d 100755
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/html/HtmlTest.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/html/HtmlTest.java
@@ -25,9 +25,9 @@
@SuppressWarnings({"unchecked","rawtypes","serial"})
public class HtmlTest {
- //====================================================================================================
+ //-----------------------------------------------------------------------------------------------------------------
// Verifies that lists of maps/beans are converted to tables correctly.
- //====================================================================================================
+ //-----------------------------------------------------------------------------------------------------------------
@Test
public void testTables1() throws Exception {
HtmlSerializer s = HtmlSerializer.DEFAULT_SQ;
@@ -44,9 +44,9 @@
public String f1 = "f1";
}
- //====================================================================================================
+ //-----------------------------------------------------------------------------------------------------------------
// Test URI_ANCHOR_SET options
- //====================================================================================================
+ //-----------------------------------------------------------------------------------------------------------------
@Test
public void testAnchorTextOptions() throws Exception {
HtmlSerializerBuilder s = HtmlSerializer.create().sq().addKeyValueTableHeaders().uriResolution(UriResolution.NONE);
@@ -205,9 +205,9 @@
.replace("</td></tr>", "");
}
- //====================================================================================================
+ //-----------------------------------------------------------------------------------------------------------------
// Test @Html.asPlainText annotation on classes and fields
- //====================================================================================================
+ //-----------------------------------------------------------------------------------------------------------------
@Test
public void testHtmlAnnotationAsPlainText() throws Exception {
HtmlSerializer s = HtmlSerializer.create().sq().addKeyValueTableHeaders().build();
@@ -237,9 +237,39 @@
public String f1 = "<f1>";
}
- //====================================================================================================
+ @Test
+ public void testHtmlAnnotationAsPlainText_usingConfig() throws Exception {
+ HtmlSerializer s = HtmlSerializer.create().sq().addKeyValueTableHeaders().applyAnnotations(B3.class).applyAnnotations(B4.class).build();
+
+ Object o = null;
+ String r;
+
+ o = new B3();
+ r = s.serialize(o);
+ assertEquals("<test>", r);
+
+ o = new B4();
+ r = s.serialize(o);
+ assertEquals("<table><tr><th>key</th><th>value</th></tr><tr><td>f1</td><td><f1></td></tr></table>", r);
+ }
+
+ @HtmlConfig(annotateHtml=@Html(on="B3", format=PLAIN_TEXT))
+ public static class B3 {
+ public String f1 = "<f1>";
+ @Override /* Object */
+ public String toString() {
+ return "<test>";
+ }
+ }
+
+ @HtmlConfig(annotateHtml=@Html(on="B4.f1", format=PLAIN_TEXT))
+ public static class B4 {
+ public String f1 = "<f1>";
+ }
+
+ //-----------------------------------------------------------------------------------------------------------------
// Test @Html.asXml annotation on classes and fields
- //====================================================================================================
+ //-----------------------------------------------------------------------------------------------------------------
@Test
public void testHtmlAnnotationAsXml() throws Exception {
HtmlSerializer s = HtmlSerializer.create().sq().addKeyValueTableHeaders().build();
@@ -265,9 +295,33 @@
public String f1 = "<f1>";
}
- //====================================================================================================
+ @Test
+ public void testHtmlAnnotationAsXml_usingConfig() throws Exception {
+ HtmlSerializer s = HtmlSerializer.create().sq().addKeyValueTableHeaders().applyAnnotations(C3.class).build();
+ Object o = null;
+ String r;
+
+ o = new C3();
+ r = s.serialize(o);
+ assertEquals("<object><f1><f1></f1></object>", r);
+
+ o = new C4();
+ r = s.serialize(o);
+ assertEquals("<table><tr><th>key</th><th>value</th></tr><tr><td>f1</td><td><f1></td></tr></table>", r);
+ }
+
+ @HtmlConfig(annotateHtml=@Html(on="C3,C4.f1",format=XML))
+ public static class C3 {
+ public String f1 = "<f1>";
+ }
+
+ public static class C4 {
+ public String f1 = "<f1>";
+ }
+
+ //-----------------------------------------------------------------------------------------------------------------
// Test @Html.noTableHeaders
- //====================================================================================================
+ //-----------------------------------------------------------------------------------------------------------------
@Test
public void testNoTableHeaders() throws Exception {
HtmlSerializer s = HtmlSerializer.DEFAULT_SQ;
@@ -284,4 +338,19 @@
@Html(noTables=true, noTableHeaders=true)
public static class MyMap extends LinkedHashMap<String,String> {}
+ @Test
+ public void testNoTableHeaders_usingConfig() throws Exception {
+ HtmlSerializer s = HtmlSerializer.DEFAULT_SQ.builder().applyAnnotations(MyMap2.class).build();
+ Object o = null;
+ String r;
+
+ Map m = new MyMap2();
+ m.put("foo", "bar");
+ o = new ObjectList().append(m);
+ r = s.serialize(o);
+ assertEquals("<ul><li><table><tr><td>foo</td><td>bar</td></tr></table></li></ul>", r);
+ }
+
+ @HtmlConfig(annotateHtml=@Html(on="org.apache.juneau.html.HtmlTest$MyMap2", noTables=true, noTableHeaders=true))
+ public static class MyMap2 extends LinkedHashMap<String,String> {}
}
\ No newline at end of file
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/json/JsonTest.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/json/JsonTest.java
index c2347f1..4435545 100755
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/json/JsonTest.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/json/JsonTest.java
@@ -224,6 +224,38 @@
}
}
+ @Test
+ public void testWrapperAttrAnnotationOnBean_usingConfig() throws Exception {
+ JsonSerializer s = SimpleJsonSerializer.DEFAULT.builder().applyAnnotations(A2.class).build();
+ JsonParser p = JsonParser.DEFAULT.builder().applyAnnotations(A2.class).build();
+ String r;
+
+ A2 t = A2.create();
+ r = s.serialize(t);
+ assertEquals("{foo:{f1:1}}", r);
+ t = p.parse(r, A2.class);
+ assertEquals(1, t.f1);
+
+ Map<String,A2> m = new LinkedHashMap<>();
+ m.put("bar", A2.create());
+ r = s.serialize(m);
+ assertEquals("{bar:{foo:{f1:1}}}", r);
+
+ m = p.parse(r, LinkedHashMap.class, String.class, A2.class);
+ assertEquals(1, m.get("bar").f1);
+ }
+
+ @JsonConfig(annotateJson=@Json(on="A2",wrapperAttr="foo"))
+ public static class A2 {
+ public int f1;
+
+ static A2 create() {
+ A2 a = new A2();
+ a.f1 = 1;
+ return a;
+ }
+ }
+
//====================================================================================================
// testWrapperAttrAnnotationOnNonBean
//====================================================================================================
@@ -270,6 +302,49 @@
}
}
+ @Test
+ public void testWrapperAttrAnnotationOnNonBean_usingConfig() throws Exception {
+ JsonSerializer s = SimpleJsonSerializer.DEFAULT.builder().applyAnnotations(B2.class).build();
+ JsonParser p = JsonParser.DEFAULT.builder().applyAnnotations(B2.class).build();;
+ String r;
+
+ B2 t = B2.create();
+ r = s.serialize(t);
+ assertEquals("{foo:'1'}", r);
+ t = p.parse(r, B2.class);
+ assertEquals(1, t.f1);
+
+ Map<String,B2> m = new LinkedHashMap<>();
+ m.put("bar", B2.create());
+ r = s.serialize(m);
+ assertEquals("{bar:{foo:'1'}}", r);
+
+ m = p.parse(r, LinkedHashMap.class, String.class, B2.class);
+ assertEquals(1, m.get("bar").f1);
+ }
+
+ @JsonConfig(annotateJson=@Json(on="B2",wrapperAttr="foo"))
+ public static class B2 {
+ int f1;
+
+ static B2 create() {
+ B2 b = new B2();
+ b.f1 = 1;
+ return b;
+ }
+
+ @Override /* Object */
+ public String toString() {
+ return String.valueOf(f1);
+ }
+
+ public static B2 valueOf(String s) {
+ B2 b = new B2();
+ b.f1 = Integer.parseInt(s);
+ return b;
+ }
+ }
+
//====================================================================================================
// testSubclassedList
//====================================================================================================
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/jsonschema/JsonSchemaGeneratorTest.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/jsonschema/JsonSchemaGeneratorTest.java
index 863a6ee..bb054dc 100755
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/jsonschema/JsonSchemaGeneratorTest.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/jsonschema/JsonSchemaGeneratorTest.java
@@ -1143,6 +1143,17 @@
}
@Test
+ public void jsonSchema_onclass_usingConfig() throws Exception {
+ JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().applyAnnotations(A1a.class).build().createSession();
+ assertObjectEquals("{description:'baz',format:'bar',type:'foo','x-example':'{f1:123}',properties:{f1:{type:'integer',format:'int32'}}}", s.getSchema(A1a.class));
+ }
+
+ @JsonSchemaConfig(annotateSchema=@Schema(on="A1a",type="foo",format="bar",description="baz",example="{f1:123}"))
+ public static class A1a {
+ public int f1;
+ }
+
+ @Test
public void jsonSchema_onbeanfield() throws Exception {
JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().build().createSession();
assertObjectEquals("{type:'object',properties:{f1:{description:'baz',format:'bar',type:'foo','x-example':'123'}}}", s.getSchema(A2.class));
@@ -1154,6 +1165,17 @@
}
@Test
+ public void jsonSchema_onbeanfield_usingConfig() throws Exception {
+ JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().applyAnnotations(A2a.class).build().createSession();
+ assertObjectEquals("{type:'object',properties:{f1:{description:'baz',format:'bar',type:'foo','x-example':'123'}}}", s.getSchema(A2a.class));
+ }
+
+ @JsonSchemaConfig(annotateSchema=@Schema(on="A2a.f1",type="foo",format="bar",description="baz",example="123"))
+ public static class A2a {
+ public int f1;
+ }
+
+ @Test
public void jsonSchema_onbeangetter() throws Exception {
JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().build().createSession();
assertObjectEquals("{type:'object',properties:{f1:{description:'baz',format:'bar',type:'foo','x-example':'123'}}}", s.getSchema(A3.class));
@@ -1165,8 +1187,21 @@
return 123;
}
}
- @Test
+ @Test
+ public void jsonSchema_onbeangetter_usingConfig() throws Exception {
+ JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().applyAnnotations(A3a.class).build().createSession();
+ assertObjectEquals("{type:'object',properties:{f1:{description:'baz',format:'bar',type:'foo','x-example':'123'}}}", s.getSchema(A3a.class));
+ }
+
+ @JsonSchemaConfig(annotateSchema=@Schema(on="A3a.getF1",type="foo",format="bar",description="baz",example="123"))
+ public static class A3a {
+ public int getF1() {
+ return 123;
+ }
+ }
+
+ @Test
public void jsonSchema_onbeansetter() throws Exception {
JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().build().createSession();
assertObjectEquals("{type:'object',properties:{f1:{description:'baz',format:'bar',type:'foo','x-example':'123'}}}", s.getSchema(A4.class));
@@ -1181,6 +1216,21 @@
public void setF1(int f1) {}
}
+ @Test
+ public void jsonSchema_onbeansetter_usingConfig() throws Exception {
+ JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().applyAnnotations(A4a.class).build().createSession();
+ assertObjectEquals("{type:'object',properties:{f1:{description:'baz',format:'bar',type:'foo','x-example':'123'}}}", s.getSchema(A4a.class));
+ }
+
+ @JsonSchemaConfig(annotateSchema=@Schema(on="A4a.setF1",type="foo",format="bar",description="baz",example="123"))
+ public static class A4a {
+ public int getF1() {
+ return 123;
+ }
+
+ public void setF1(int f1) {}
+ }
+
//====================================================================================================
// @JsonSchema on PojoSwap
//====================================================================================================
@@ -1197,4 +1247,17 @@
@Schema(type="foo",format="bar",description="baz",example="123")
public static class SwapWithAnnotation extends PojoSwap<SimpleBean,Integer> {}
+
+ @Test
+ public void jsonschema_onpojoswap_usingConfig() throws Exception {
+ JsonSchemaGeneratorSession s = JsonSchemaGenerator.DEFAULT.builder().applyAnnotations(SwapWithAnnotation2.class)
+ .pojoSwaps(SwapWithAnnotation2.class)
+ .build().createSession();
+ assertObjectEquals("{description:'baz',format:'bar',type:'foo','x-example':'123'}", s.getSchema(SimpleBean.class));
+ assertObjectEquals("{type:'array',items:{description:'baz',format:'bar',type:'foo','x-example':'123'}}", s.getSchema(BeanList.class));
+ assertObjectEquals("{type:'array',items:{type:'array',items:{description:'baz',format:'bar',type:'foo','x-example':'123'}}}", s.getSchema(SimpleBean[][].class));
+ }
+
+ @JsonSchemaConfig(annotateSchema=@Schema(on="SwapWithAnnotation2", type="foo",format="bar",description="baz",example="123"))
+ public static class SwapWithAnnotation2 extends PojoSwap<SimpleBean,Integer> {}
}
\ No newline at end of file
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/urlencoding/DTOs2.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/urlencoding/DTOs2.java
new file mode 100644
index 0000000..2ca047c
--- /dev/null
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/urlencoding/DTOs2.java
@@ -0,0 +1,139 @@
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership. The ASF licenses this file *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance *
+// * with the License. You may obtain a copy of the License at *
+// * *
+// * http://www.apache.org/licenses/LICENSE-2.0 *
+// * *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the *
+// * specific language governing permissions and limitations under the License. *
+// ***************************************************************************************************************************
+package org.apache.juneau.urlencoding;
+
+import java.util.*;
+
+import org.apache.juneau.annotation.*;
+import org.apache.juneau.urlencoding.annotation.*;
+import org.apache.juneau.utils.*;
+
+public class DTOs2 {
+
+ @BeanConfig(annotateBean={@Bean(on="A,B,C",sort=true)})
+ @UrlEncodingConfig(annotateUrlEncoding={@UrlEncoding(on="C",expandedParams=true)})
+ public static class Annotations {}
+
+ public static class A {
+ public String a;
+ public int b;
+ public boolean c;
+
+ public static A create() {
+ A t = new A();
+ t.a = "a";
+ t.b = 1;
+ t.c = true;
+ return t;
+ }
+
+ }
+
+ public static class B {
+ public String[] f01;
+ public List<String> f02;
+ public int[] f03;
+ public List<Integer> f04;
+ public String[][] f05;
+ public List<String[]> f06;
+ public A[] f07;
+ public List<A> f08;
+ public A[][] f09;
+ public List<List<A>> f10;
+
+ private String[] f11;
+ private List<String> f12;
+ private int[] f13;
+ private List<Integer> f14;
+ private String[][] f15;
+ private List<String[]> f16;
+ private A[] f17;
+ private List<A> f18;
+ private A[][] f19;
+ private List<List<A>> f20;
+
+ public String[] getF11() { return f11; }
+ public List<String> getF12() { return f12; }
+ public int[] getF13() { return f13; }
+ public List<Integer> getF14() { return f14; }
+ public String[][] getF15() { return f15; }
+ public List<String[]> getF16() { return f16; }
+ public A[] getF17() { return f17; }
+ public List<A> getF18() { return f18; }
+ public A[][] getF19() { return f19; }
+ public List<List<A>> getF20() { return f20; }
+
+ public void setF11(String[] f11) { this.f11 = f11; }
+ public void setF12(List<String> f12) { this.f12 = f12; }
+ public void setF13(int[] f13) { this.f13 = f13; }
+ public void setF14(List<Integer> f14) { this.f14 = f14; }
+ public void setF15(String[][] f15) { this.f15 = f15; }
+ public void setF16(List<String[]> f16) { this.f16 = f16; }
+ public void setF17(A[] f17) { this.f17 = f17; }
+ public void setF18(List<A> f18) { this.f18 = f18; }
+ public void setF19(A[][] f19) { this.f19 = f19; }
+ public void setF20(List<List<A>> f20) { this.f20 = f20; }
+
+ static B create() {
+ B t = new B();
+ t.f01 = new String[]{"a","b"};
+ t.f02 = new AList<String>().append("c").append("d");
+ t.f03 = new int[]{1,2};
+ t.f04 = new AList<Integer>().append(3).append(4);
+ t.f05 = new String[][]{{"e","f"},{"g","h"}};
+ t.f06 = new AList<String[]>().append(new String[]{"i","j"}).append(new String[]{"k","l"});
+ t.f07 = new A[]{A.create(),A.create()};
+ t.f08 = new AList<A>().append(A.create()).append(A.create());
+ t.f09 = new A[][]{{A.create()},{A.create()}};
+ t.f10 = new AList<List<A>>().append(Arrays.asList(A.create())).append(Arrays.asList(A.create()));
+ t.setF11(new String[]{"a","b"});
+ t.setF12(new AList<String>().append("c").append("d"));
+ t.setF13(new int[]{1,2});
+ t.setF14(new AList<Integer>().append(3).append(4));
+ t.setF15(new String[][]{{"e","f"},{"g","h"}});
+ t.setF16(new AList<String[]>().append(new String[]{"i","j"}).append(new String[]{"k","l"}));
+ t.setF17(new A[]{A.create(),A.create()});
+ t.setF18(new AList<A>().append(A.create()).append(A.create()));
+ t.setF19(new A[][]{{A.create()},{A.create()}});
+ t.setF20(new AList<List<A>>().append(Arrays.asList(A.create())).append(Arrays.asList(A.create())));
+ return t;
+ }
+ }
+
+ public static class C extends B {
+ static C create() {
+ C t = new C();
+ t.f01 = new String[]{"a","b"};
+ t.f02 = new AList<String>().append("c").append("d");
+ t.f03 = new int[]{1,2};
+ t.f04 = new AList<Integer>().append(3).append(4);
+ t.f05 = new String[][]{{"e","f"},{"g","h"}};
+ t.f06 = new AList<String[]>().append(new String[]{"i","j"}).append(new String[]{"k","l"});
+ t.f07 = new A[]{A.create(),A.create()};
+ t.f08 = new AList<A>().append(A.create()).append(A.create());
+ t.f09 = new A[][]{{A.create()},{A.create()}};
+ t.f10 = new AList<List<A>>().append(Arrays.asList(A.create())).append(Arrays.asList(A.create()));
+ t.setF11(new String[]{"a","b"});
+ t.setF12(new AList<String>().append("c").append("d"));
+ t.setF13(new int[]{1,2});
+ t.setF14(new AList<Integer>().append(3).append(4));
+ t.setF15(new String[][]{{"e","f"},{"g","h"}});
+ t.setF16(new AList<String[]>().append(new String[]{"i","j"}).append(new String[]{"k","l"}));
+ t.setF17(new A[]{A.create(),A.create()});
+ t.setF18(new AList<A>().append(A.create()).append(A.create()));
+ t.setF19(new A[][]{{A.create()},{A.create()}});
+ t.setF20(new AList<List<A>>().append(Arrays.asList(A.create())).append(Arrays.asList(A.create())));
+ return t;
+ }
+ }
+}
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/urlencoding/UrlEncodingParserTest.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/urlencoding/UrlEncodingParserTest.java
index cfd3dc1..65d107a 100755
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/urlencoding/UrlEncodingParserTest.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/urlencoding/UrlEncodingParserTest.java
@@ -692,6 +692,60 @@
assertSortedObjectEquals(e, t);
}
+ @Test
+ public void testMultiPartParametersOnBeansViaProperty_usingConfig() throws Exception {
+ UrlEncodingParser p;
+ String in;
+
+ p = UrlEncodingParser.create().expandedParams(true).applyAnnotations(DTOs2.Annotations.class).build();
+ in = ""
+ + "f01=a&f01=b"
+ + "&f02=c&f02=d"
+ + "&f03=1&f03=2"
+ + "&f04=3&f04=4"
+ + "&f05=@(e,f)&f05=@(g,h)"
+ + "&f06=@(i,j)&f06=@(k,l)"
+ + "&f07=(a=a,b=1,c=true)&f07=(a=b,b=2,c=false)"
+ + "&f08=(a=a,b=1,c=true)&f08=(a=b,b=2,c=false)"
+ + "&f09=@((a=a,b=1,c=true))&f09=@((a=b,b=2,c=false))"
+ + "&f10=@((a=a,b=1,c=true))&f10=@((a=b,b=2,c=false))"
+ + "&f11=a&f11=b"
+ + "&f12=c&f12=d"
+ + "&f13=1&f13=2"
+ + "&f14=3&f14=4"
+ + "&f15=@(e,f)&f15=@(g,h)"
+ + "&f16=@(i,j)&f16=@(k,l)"
+ + "&f17=(a=a,b=1,c=true)&f17=(a=b,b=2,c=false)"
+ + "&f18=(a=a,b=1,c=true)&f18=(a=b,b=2,c=false)"
+ + "&f19=@((a=a,b=1,c=true))&f19=@((a=b,b=2,c=false))"
+ + "&f20=@((a=a,b=1,c=true))&f20=@((a=b,b=2,c=false))";
+
+ DTOs2.B t = p.parse(in, DTOs2.B.class);
+ String e = "{"
+ + "f01:['a','b'],"
+ + "f02:['c','d'],"
+ + "f03:[1,2],"
+ + "f04:[3,4],"
+ + "f05:[['e','f'],['g','h']],"
+ + "f06:[['i','j'],['k','l']],"
+ + "f07:[{a:'a',b:1,c:true},{a:'b',b:2,c:false}],"
+ + "f08:[{a:'a',b:1,c:true},{a:'b',b:2,c:false}],"
+ + "f09:[[{a:'a',b:1,c:true}],[{a:'b',b:2,c:false}]],"
+ + "f10:[[{a:'a',b:1,c:true}],[{a:'b',b:2,c:false}]],"
+ + "f11:['a','b'],"
+ + "f12:['c','d'],"
+ + "f13:[1,2],"
+ + "f14:[3,4],"
+ + "f15:[['e','f'],['g','h']],"
+ + "f16:[['i','j'],['k','l']],"
+ + "f17:[{a:'a',b:1,c:true},{a:'b',b:2,c:false}],"
+ + "f18:[{a:'a',b:1,c:true},{a:'b',b:2,c:false}],"
+ + "f19:[[{a:'a',b:1,c:true}],[{a:'b',b:2,c:false}]],"
+ + "f20:[[{a:'a',b:1,c:true}],[{a:'b',b:2,c:false}]]"
+ +"}";
+ assertSortedObjectEquals(e, t);
+ }
+
//====================================================================================================
// Multi-part parameters on beans via @UrlEncoding.expandedParams on class
//====================================================================================================
@@ -747,4 +801,57 @@
+"}";
assertSortedObjectEquals(e, t);
}
+
+ @Test
+ public void testMultiPartParametersOnBeansViaAnnotationOnClass_usingConfig() throws Exception {
+ UrlEncodingParser p;
+ String in;
+ p = UrlEncodingParser.DEFAULT.builder().applyAnnotations(DTOs2.Annotations.class).build();
+ in = ""
+ + "f01=a&f01=b"
+ + "&f02=c&f02=d"
+ + "&f03=1&f03=2"
+ + "&f04=3&f04=4"
+ + "&f05=@(e,f)&f05=@(g,h)"
+ + "&f06=@(i,j)&f06=@(k,l)"
+ + "&f07=(a=a,b=1,c=true)&f07=(a=b,b=2,c=false)"
+ + "&f08=(a=a,b=1,c=true)&f08=(a=b,b=2,c=false)"
+ + "&f09=@((a=a,b=1,c=true))&f09=@((a=b,b=2,c=false))"
+ + "&f10=@((a=a,b=1,c=true))&f10=@((a=b,b=2,c=false))"
+ + "&f11=a&f11=b"
+ + "&f12=c&f12=d"
+ + "&f13=1&f13=2"
+ + "&f14=3&f14=4"
+ + "&f15=@(e,f)&f15=@(g,h)"
+ + "&f16=@(i,j)&f16=@(k,l)"
+ + "&f17=(a=a,b=1,c=true)&f17=(a=b,b=2,c=false)"
+ + "&f18=(a=a,b=1,c=true)&f18=(a=b,b=2,c=false)"
+ + "&f19=@((a=a,b=1,c=true))&f19=@((a=b,b=2,c=false))"
+ + "&f20=@((a=a,b=1,c=true))&f20=@((a=b,b=2,c=false))";
+
+ DTOs2.C t = p.parse(in, DTOs2.C.class);
+ String e = "{"
+ + "f01:['a','b'],"
+ + "f02:['c','d'],"
+ + "f03:[1,2],"
+ + "f04:[3,4],"
+ + "f05:[['e','f'],['g','h']],"
+ + "f06:[['i','j'],['k','l']],"
+ + "f07:[{a:'a',b:1,c:true},{a:'b',b:2,c:false}],"
+ + "f08:[{a:'a',b:1,c:true},{a:'b',b:2,c:false}],"
+ + "f09:[[{a:'a',b:1,c:true}],[{a:'b',b:2,c:false}]],"
+ + "f10:[[{a:'a',b:1,c:true}],[{a:'b',b:2,c:false}]],"
+ + "f11:['a','b'],"
+ + "f12:['c','d'],"
+ + "f13:[1,2],"
+ + "f14:[3,4],"
+ + "f15:[['e','f'],['g','h']],"
+ + "f16:[['i','j'],['k','l']],"
+ + "f17:[{a:'a',b:1,c:true},{a:'b',b:2,c:false}],"
+ + "f18:[{a:'a',b:1,c:true},{a:'b',b:2,c:false}],"
+ + "f19:[[{a:'a',b:1,c:true}],[{a:'b',b:2,c:false}]],"
+ + "f20:[[{a:'a',b:1,c:true}],[{a:'b',b:2,c:false}]]"
+ +"}";
+ assertSortedObjectEquals(e, t);
+ }
}
\ No newline at end of file
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/urlencoding/UrlEncodingSerializerTest.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/urlencoding/UrlEncodingSerializerTest.java
index e0ac2ff..c614001 100755
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/urlencoding/UrlEncodingSerializerTest.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/urlencoding/UrlEncodingSerializerTest.java
@@ -370,6 +370,62 @@
assertEquals(e, r);
}
+ @Test
+ public void testMultiPartParametersOnBeansViaProperty_usingConfig() throws Exception {
+ UrlEncodingSerializer s;
+ DTOs2.B t = DTOs2.B.create();
+ String r;
+
+ s = UrlEncodingSerializer.DEFAULT.builder().applyAnnotations(DTOs2.Annotations.class).build();
+ r = s.serialize(t);
+ String e = ""
+ + "f01=@(a,b)"
+ + "&f02=@(c,d)"
+ + "&f03=@(1,2)"
+ + "&f04=@(3,4)"
+ + "&f05=@(@(e,f),@(g,h))"
+ + "&f06=@(@(i,j),@(k,l))"
+ + "&f07=@((a=a,b=1,c=true),(a=a,b=1,c=true))"
+ + "&f08=@((a=a,b=1,c=true),(a=a,b=1,c=true))"
+ + "&f09=@(@((a=a,b=1,c=true)),@((a=a,b=1,c=true)))"
+ + "&f10=@(@((a=a,b=1,c=true)),@((a=a,b=1,c=true)))"
+ + "&f11=@(a,b)"
+ + "&f12=@(c,d)"
+ + "&f13=@(1,2)"
+ + "&f14=@(3,4)"
+ + "&f15=@(@(e,f),@(g,h))"
+ + "&f16=@(@(i,j),@(k,l))"
+ + "&f17=@((a=a,b=1,c=true),(a=a,b=1,c=true))"
+ + "&f18=@((a=a,b=1,c=true),(a=a,b=1,c=true))"
+ + "&f19=@(@((a=a,b=1,c=true)),@((a=a,b=1,c=true)))"
+ + "&f20=@(@((a=a,b=1,c=true)),@((a=a,b=1,c=true)))";
+ assertEquals(e, r);
+
+ s = UrlEncodingSerializer.create().expandedParams().applyAnnotations(DTOs2.Annotations.class).build();
+ r = s.serialize(t);
+ e = ""
+ + "f01=a&f01=b"
+ + "&f02=c&f02=d"
+ + "&f03=1&f03=2"
+ + "&f04=3&f04=4"
+ + "&f05=@(e,f)&f05=@(g,h)"
+ + "&f06=@(i,j)&f06=@(k,l)"
+ + "&f07=(a=a,b=1,c=true)&f07=(a=a,b=1,c=true)"
+ + "&f08=(a=a,b=1,c=true)&f08=(a=a,b=1,c=true)"
+ + "&f09=@((a=a,b=1,c=true))&f09=@((a=a,b=1,c=true))"
+ + "&f10=@((a=a,b=1,c=true))&f10=@((a=a,b=1,c=true))"
+ + "&f11=a&f11=b"
+ + "&f12=c&f12=d"
+ + "&f13=1&f13=2"
+ + "&f14=3&f14=4"
+ + "&f15=@(e,f)&f15=@(g,h)"
+ + "&f16=@(i,j)&f16=@(k,l)"
+ + "&f17=(a=a,b=1,c=true)&f17=(a=a,b=1,c=true)"
+ + "&f18=(a=a,b=1,c=true)&f18=(a=a,b=1,c=true)"
+ + "&f19=@((a=a,b=1,c=true))&f19=@((a=a,b=1,c=true))"
+ + "&f20=@((a=a,b=1,c=true))&f20=@((a=a,b=1,c=true))";
+ assertEquals(e, r);
+ }
//====================================================================================================
// Multi-part parameters on beans via @UrlEncoding.expandedParams on class
@@ -432,6 +488,63 @@
}
@Test
+ public void testMultiPartParametersOnBeansViaAnnotationOnClass_usingConfig() throws Exception {
+ UrlEncodingSerializer s;
+ DTOs2.C t = DTOs2.C.create();
+ String r;
+
+ s = UrlEncodingSerializer.DEFAULT.builder().applyAnnotations(DTOs2.Annotations.class).build();
+ r = s.serialize(t);
+ String e = ""
+ + "f01=a&f01=b"
+ + "&f02=c&f02=d"
+ + "&f03=1&f03=2"
+ + "&f04=3&f04=4"
+ + "&f05=@(e,f)&f05=@(g,h)"
+ + "&f06=@(i,j)&f06=@(k,l)"
+ + "&f07=(a=a,b=1,c=true)&f07=(a=a,b=1,c=true)"
+ + "&f08=(a=a,b=1,c=true)&f08=(a=a,b=1,c=true)"
+ + "&f09=@((a=a,b=1,c=true))&f09=@((a=a,b=1,c=true))"
+ + "&f10=@((a=a,b=1,c=true))&f10=@((a=a,b=1,c=true))"
+ + "&f11=a&f11=b"
+ + "&f12=c&f12=d"
+ + "&f13=1&f13=2"
+ + "&f14=3&f14=4"
+ + "&f15=@(e,f)&f15=@(g,h)"
+ + "&f16=@(i,j)&f16=@(k,l)"
+ + "&f17=(a=a,b=1,c=true)&f17=(a=a,b=1,c=true)"
+ + "&f18=(a=a,b=1,c=true)&f18=(a=a,b=1,c=true)"
+ + "&f19=@((a=a,b=1,c=true))&f19=@((a=a,b=1,c=true))"
+ + "&f20=@((a=a,b=1,c=true))&f20=@((a=a,b=1,c=true))";
+ assertEquals(e, r);
+
+ s = UrlEncodingSerializer.create().expandedParams().applyAnnotations(DTOs2.Annotations.class).build();
+ r = s.serialize(t);
+ e = ""
+ + "f01=a&f01=b"
+ + "&f02=c&f02=d"
+ + "&f03=1&f03=2"
+ + "&f04=3&f04=4"
+ + "&f05=@(e,f)&f05=@(g,h)"
+ + "&f06=@(i,j)&f06=@(k,l)"
+ + "&f07=(a=a,b=1,c=true)&f07=(a=a,b=1,c=true)"
+ + "&f08=(a=a,b=1,c=true)&f08=(a=a,b=1,c=true)"
+ + "&f09=@((a=a,b=1,c=true))&f09=@((a=a,b=1,c=true))"
+ + "&f10=@((a=a,b=1,c=true))&f10=@((a=a,b=1,c=true))"
+ + "&f11=a&f11=b"
+ + "&f12=c&f12=d"
+ + "&f13=1&f13=2"
+ + "&f14=3&f14=4"
+ + "&f15=@(e,f)&f15=@(g,h)"
+ + "&f16=@(i,j)&f16=@(k,l)"
+ + "&f17=(a=a,b=1,c=true)&f17=(a=a,b=1,c=true)"
+ + "&f18=(a=a,b=1,c=true)&f18=(a=a,b=1,c=true)"
+ + "&f19=@((a=a,b=1,c=true))&f19=@((a=a,b=1,c=true))"
+ + "&f20=@((a=a,b=1,c=true))&f20=@((a=a,b=1,c=true))";
+ assertEquals(e, r);
+ }
+
+ @Test
public void testMultiPartParametersOnMapOfStringArrays() throws Exception {
UrlEncodingSerializer s;
String r;
diff --git a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfClassMeta.java b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfClassMeta.java
index 322f563..3d47a8e 100644
--- a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfClassMeta.java
+++ b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfClassMeta.java
@@ -36,14 +36,14 @@
*/
public RdfClassMeta(ClassMeta<?> cm, RdfMetaProvider mp) {
super(cm);
- this.rdf = cm.getAnnotation(Rdf.class, mp);
+ this.rdf = cm.getAnnotation(Rdf.class);
if (rdf != null) {
collectionFormat = rdf.collectionFormat();
} else {
collectionFormat = RdfCollectionFormat.DEFAULT;
}
- List<Rdf> rdfs = cm.getAnnotations(Rdf.class, mp);
- List<RdfSchema> schemas = cm.getAnnotations(RdfSchema.class, mp);
+ List<Rdf> rdfs = cm.getAnnotations(Rdf.class);
+ List<RdfSchema> schemas = cm.getAnnotations(RdfSchema.class);
this.namespace = RdfUtils.findNamespace(rdfs, schemas);
}
diff --git a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfParserBuilder.java b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfParserBuilder.java
index 27d5d0e..9d19440 100644
--- a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfParserBuilder.java
+++ b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfParserBuilder.java
@@ -16,6 +16,7 @@
import static org.apache.juneau.jena.RdfParser.*;
import java.lang.annotation.*;
+import java.lang.reflect.*;
import java.nio.charset.*;
import java.util.*;
@@ -1368,9 +1369,21 @@
return this;
}
- @Override
+ @Override /* ContextBuilder */
public RdfParserBuilder applyAnnotations(AnnotationList al, VarResolverSession vrs) {
super.applyAnnotations(al, vrs);
return this;
}
+
+ @Override /* ContextBuilder */
+ public RdfParserBuilder applyAnnotations(Class<?>...fromClasses) {
+ super.applyAnnotations(fromClasses);
+ return this;
+ }
+
+ @Override /* ContextBuilder */
+ public RdfParserBuilder applyAnnotations(Method...fromMethods) {
+ super.applyAnnotations(fromMethods);
+ return this;
+ }
}
diff --git a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerBuilder.java b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerBuilder.java
index 6dd6a4e..ed7d448 100644
--- a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerBuilder.java
+++ b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerBuilder.java
@@ -1619,14 +1619,14 @@
}
@Override /* ContextBuilder */
- public RdfSerializerBuilder applyAnnotations(Class<?> fromClass) {
- super.applyAnnotations(fromClass);
+ public RdfSerializerBuilder applyAnnotations(Class<?>...fromClasses) {
+ super.applyAnnotations(fromClasses);
return this;
}
@Override /* ContextBuilder */
- public RdfSerializerBuilder applyAnnotations(Method fromMethod) {
- super.applyAnnotations(fromMethod);
+ public RdfSerializerBuilder applyAnnotations(Method...fromMethods) {
+ super.applyAnnotations(fromMethods);
return this;
}
}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContextBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContextBuilder.java
index 3ebfc17..62e318a 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContextBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContextBuilder.java
@@ -1932,14 +1932,14 @@
}
@Override /* ContextBuilder */
- public BeanContextBuilder applyAnnotations(Class<?> fromClass) {
- super.applyAnnotations(fromClass);
+ public BeanContextBuilder applyAnnotations(Class<?>...fromClasses) {
+ super.applyAnnotations(fromClasses);
return this;
}
@Override /* ContextBuilder */
- public BeanContextBuilder applyAnnotations(Method fromMethod) {
- super.applyAnnotations(fromMethod);
+ public BeanContextBuilder applyAnnotations(Method...fromMethods) {
+ super.applyAnnotations(fromMethods);
return this;
}
}
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanTraverseBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanTraverseBuilder.java
index 0795998..b0012c3 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanTraverseBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanTraverseBuilder.java
@@ -740,14 +740,14 @@
}
@Override /* ContextBuilder */
- public BeanTraverseBuilder applyAnnotations(Class<?> fromClass) {
- super.applyAnnotations(fromClass);
+ public BeanTraverseBuilder applyAnnotations(Class<?>...fromClasses) {
+ super.applyAnnotations(fromClasses);
return this;
}
@Override /* ContextBuilder */
- public BeanTraverseBuilder applyAnnotations(Method fromMethod) {
- super.applyAnnotations(fromMethod);
+ public BeanTraverseBuilder applyAnnotations(Method...fromMethods) {
+ super.applyAnnotations(fromMethods);
return this;
}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ClassMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ClassMeta.java
index 8fcd087..550e82b 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ClassMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ClassMeta.java
@@ -2043,18 +2043,7 @@
* @return The specified annotation, or <jk>null</jk> if the class does not have the specified annotation.
*/
public <A extends Annotation> A getAnnotation(Class<A> a) {
- return info.getAnnotation(a);
- }
-
- /**
- * Returns the annotation defined on this class using the specified meta-provider for lookup.
- *
- * @param a The annotation to retrieve.
- * @param mp The meta-provider to use for lookup of annotations.
- * @return The specified annotation, or <jk>null</jk> if the class does not have the specified annotation.
- */
- public <A extends Annotation> A getAnnotation(Class<A> a, MetaProvider mp) {
- return info.getAnnotation(a, mp);
+ return info.getAnnotation(a, beanContext == null ? BeanContext.DEFAULT : beanContext);
}
/**
@@ -2064,18 +2053,7 @@
* @return The specified annotation, or <jk>null</jk> if the class does not have the specified annotation.
*/
public <A extends Annotation> A getDeclaredAnnotation(Class<A> a) {
- return info.getDeclaredAnnotation(a);
- }
-
- /**
- * Returns the declared annotation defined on this class using the specified meta-provider for lookup.
- *
- * @param a The annotation to retrieve.
- * @param mp The meta-provider to use for lookup of annotations.
- * @return The specified annotation, or <jk>null</jk> if the class does not have the specified annotation.
- */
- public <A extends Annotation> A getDeclaredAnnotation(Class<A> a, MetaProvider mp) {
- return info.getDeclaredAnnotation(a);
+ return info.getDeclaredAnnotation(a, beanContext == null ? BeanContext.DEFAULT : beanContext);
}
/**
@@ -2087,19 +2065,7 @@
* A list of all matching annotations found in child-to-parent order, or an empty list if none found.
*/
public <A extends Annotation> List<A> getAnnotations(Class<A> a) {
- return info.getAnnotations(a);
- }
-
- /**
- * Returns all annotations of the specified type defined on the specified class or parent classes/interfaces.
- *
- * @param a The annotation to search for.
- * @param mp The metadata provider for finding annotations.
- * @return
- * A list of all matching annotations found in child-to-parent order, or an empty list if none found.
- */
- public <A extends Annotation> List<A> getAnnotations(Class<A> a, MetaProvider mp) {
- return info.getAnnotations(a, mp);
+ return info.getAnnotations(a, beanContext == null ? BeanContext.DEFAULT : beanContext);
}
/**
@@ -2111,20 +2077,7 @@
* A list of all matching annotations found or an empty list if none found.
*/
public <A extends Annotation> List<A> getAnnotationsParentFirst(Class<A> a) {
- return info.getAnnotationsParentFirst(a);
- }
-
- /**
- * Identical to {@link #getAnnotations(Class,MetaProvider)} but optionally returns the list in reverse (parent-to-child) order.
- *
- * @param a
- * The annotation to search for.
- * @param mp The metadata provider for finding annotations.
- * @return
- * A list of all matching annotations found or an empty list if none found.
- */
- public <A extends Annotation> List<A> getAnnotationsParentFirst(Class<A> a, MetaProvider mp) {
- return info.getAnnotationsParentFirst(a, mp);
+ return info.getAnnotationsParentFirst(a, beanContext == null ? BeanContext.DEFAULT : beanContext);
}
@Override /* Object */
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Context.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Context.java
index 42594e9..795f914 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Context.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Context.java
@@ -42,6 +42,7 @@
*
* @see PropertyStore
*/
+@ConfigurableContext
public abstract class Context implements MetaProvider {
static final String PREFIX = "Context";
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ContextBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ContextBuilder.java
index b143d44..a7e2db2 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ContextBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ContextBuilder.java
@@ -153,11 +153,12 @@
* <li>On this class.
* </ol>
*
- * @param fromClass The class on which the annotations are defined.
+ * @param fromClasses The classes on which the annotations are defined.
* @return This object (for method chaining).
*/
- public ContextBuilder applyAnnotations(Class<?> fromClass) {
- applyAnnotations(ClassInfo.of(fromClass).getAnnotationListParentFirst(ConfigAnnotationFilter.INSTANCE), VarResolver.DEFAULT.createSession());
+ public ContextBuilder applyAnnotations(Class<?>...fromClasses) {
+ for (Class<?> c : fromClasses)
+ applyAnnotations(ClassInfo.of(c).getAnnotationListParentFirst(ConfigAnnotationFilter.INSTANCE), VarResolver.DEFAULT.createSession());
return this;
}
@@ -196,11 +197,12 @@
* <li>On this method and matching methods ordered parent-to-child.
* </ol>
*
- * @param fromMethod The method on which the annotations are defined.
+ * @param fromMethods The methods on which the annotations are defined.
* @return This object (for method chaining).
*/
- public ContextBuilder applyAnnotations(Method fromMethod) {
- applyAnnotations(MethodInfo.of(fromMethod).getAnnotationListParentFirst(ConfigAnnotationFilter.INSTANCE), VarResolver.DEFAULT.createSession());
+ public ContextBuilder applyAnnotations(Method...fromMethods) {
+ for (Method m : fromMethods)
+ applyAnnotations(MethodInfo.of(m).getAnnotationListParentFirst(ConfigAnnotationFilter.INSTANCE), VarResolver.DEFAULT.createSession());
return this;
}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/PropertyStore.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/PropertyStore.java
index d0f31c4..7cca861 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/PropertyStore.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/PropertyStore.java
@@ -22,6 +22,7 @@
import org.apache.juneau.PropertyStoreBuilder.*;
import org.apache.juneau.internal.*;
import org.apache.juneau.json.*;
+import org.apache.juneau.marshall.*;
import org.apache.juneau.reflect.*;
@@ -722,6 +723,11 @@
public Map<String,Property> swap() {
return properties;
}
+
+ @Override /* Object */
+ public String toString() {
+ return "[hash="+hashCode()+"]" + (SimpleJson.DEFAULT == null ? "" : SimpleJson.DEFAULT.toString(properties));
+ }
}
//-------------------------------------------------------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/PropertyStoreBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/PropertyStoreBuilder.java
index e3d4b30..3300c9a 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/PropertyStoreBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/PropertyStoreBuilder.java
@@ -21,26 +21,11 @@
import java.util.regex.*;
import org.apache.juneau.PropertyStore.*;
-import org.apache.juneau.annotation.*;
-import org.apache.juneau.csv.annotation.*;
-import org.apache.juneau.html.annotation.*;
import org.apache.juneau.internal.*;
-import org.apache.juneau.jso.annotation.*;
import org.apache.juneau.json.*;
-import org.apache.juneau.json.annotation.*;
-import org.apache.juneau.jsonschema.annotation.*;
import org.apache.juneau.marshall.*;
-import org.apache.juneau.msgpack.annotation.*;
-import org.apache.juneau.oapi.annotation.*;
-import org.apache.juneau.parser.annotation.*;
-import org.apache.juneau.plaintext.annotation.*;
import org.apache.juneau.reflect.*;
-import org.apache.juneau.serializer.annotation.*;
-import org.apache.juneau.soap.annotation.*;
import org.apache.juneau.svl.*;
-import org.apache.juneau.uon.annotation.*;
-import org.apache.juneau.urlencoding.annotation.*;
-import org.apache.juneau.xml.annotation.*;
/**
* A builder for {@link PropertyStore} objects.
@@ -137,91 +122,6 @@
}
/**
- * Applies any of the various <ja>@XConfig</ja> annotations on the specified class to this property store.
- *
- * <p>
- * Applies any of the following annotations:
- * <ul class='javatree'>
- * <li class ='ja'>{@link BeanConfig}
- * <li class ='ja'>{@link CsvConfig}
- * <li class ='ja'>{@link HtmlConfig}
- * <li class ='ja'>{@link HtmlDocConfig}
- * <li class ='ja'>{@link JsoConfig}
- * <li class ='ja'>{@link JsonConfig}
- * <li class ='ja'>{@link JsonSchemaConfig}
- * <li class ='ja'>{@link MsgPackConfig}
- * <li class ='ja'>{@link OpenApiConfig}
- * <li class ='ja'>{@link ParserConfig}
- * <li class ='ja'>{@link PlainTextConfig}
- * <li class ='ja'>{@link SerializerConfig}
- * <li class ='ja'>{@link SoapXmlConfig}
- * <li class ='ja'>{@link UonConfig}
- * <li class ='ja'>{@link UrlEncodingConfig}
- * <li class ='ja'>{@link XmlConfig}
- * <li class ='ja'><c>RdfConfig</c>
- * </ul>
- *
- * <p>
- * Annotations are appended in the following order:
- * <ol>
- * <li>On the package of this class.
- * <li>On interfaces ordered parent-to-child.
- * <li>On parent classes ordered parent-to-child.
- * <li>On this class.
- * </ol>
- *
- * @param fromClass The class on which the annotations are defined.
- * @return This object (for method chaining).
- */
- public PropertyStoreBuilder applyAnnotations(Class<?> fromClass) {
- applyAnnotations(ClassInfo.of(fromClass).getAnnotationListParentFirst(ConfigAnnotationFilter.INSTANCE), VarResolver.DEFAULT.createSession());
- return this;
- }
-
- /**
- * Applies any of the various <ja>@XConfig</ja> annotations on the specified method to this property store.
- *
- * <p>
- * Applies any of the following annotations:
- * <ul class='javatree'>
- * <li class ='ja'>{@link BeanConfig}
- * <li class ='ja'>{@link CsvConfig}
- * <li class ='ja'>{@link HtmlConfig}
- * <li class ='ja'>{@link HtmlDocConfig}
- * <li class ='ja'>{@link JsoConfig}
- * <li class ='ja'>{@link JsonConfig}
- * <li class ='ja'>{@link JsonSchemaConfig}
- * <li class ='ja'>{@link MsgPackConfig}
- * <li class ='ja'>{@link OpenApiConfig}
- * <li class ='ja'>{@link ParserConfig}
- * <li class ='ja'>{@link PlainTextConfig}
- * <li class ='ja'>{@link SerializerConfig}
- * <li class ='ja'>{@link SoapXmlConfig}
- * <li class ='ja'>{@link UonConfig}
- * <li class ='ja'>{@link UrlEncodingConfig}
- * <li class ='ja'>{@link XmlConfig}
- * <li class ='ja'><c>RdfConfig</c>
- * </ul>
- *
- * <p>
- * Annotations are appended in the following orders:
- * <ol>
- * <li>On the package of the method class.
- * <li>On interfaces ordered parent-to-child.
- * <li>On parent classes ordered parent-to-child.
- * <li>On the method class.
- * <li>On this method and matching methods ordered parent-to-child.
- * </ol>
- *
- * @param fromMethod The method on which the annotations are defined.
- * @return This object (for method chaining).
- */
- public PropertyStoreBuilder applyAnnotations(Method fromMethod) {
- applyAnnotations(MethodInfo.of(fromMethod).getAnnotationListParentFirst(ConfigAnnotationFilter.INSTANCE), VarResolver.DEFAULT.createSession());
- return this;
- }
-
- /**
* Sets a configuration property value on this object.
*
* @param key
@@ -560,6 +460,11 @@
public Map<String,MutableProperty> swap(BeanSession bs) {
return properties;
}
+
+ @Override
+ public String toString() {
+ return (SimpleJson.DEFAULT == null ? "" : SimpleJson.DEFAULT.toString(properties));
+ }
}
//-------------------------------------------------------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvClassMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvClassMeta.java
index ac61566..8ca7f3a 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvClassMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvClassMeta.java
@@ -31,7 +31,7 @@
*/
public CsvClassMeta(ClassMeta<?> cm, CsvMetaProvider mp) {
super(cm);
- this.csv = cm.getAnnotation(Csv.class, mp);
+ this.csv = cm.getAnnotation(Csv.class);
}
/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvParserBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvParserBuilder.java
index 773f123..d99fea0 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvParserBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvParserBuilder.java
@@ -13,6 +13,7 @@
package org.apache.juneau.csv;
import java.lang.annotation.*;
+import java.lang.reflect.*;
import java.nio.charset.*;
import java.util.*;
@@ -688,9 +689,21 @@
return this;
}
- @Override
+ @Override /* ContextBuilder */
public CsvParserBuilder applyAnnotations(AnnotationList al, VarResolverSession vrs) {
super.applyAnnotations(al, vrs);
return this;
}
+
+ @Override /* ContextBuilder */
+ public CsvParserBuilder applyAnnotations(Class<?>...fromClasses) {
+ super.applyAnnotations(fromClasses);
+ return this;
+ }
+
+ @Override /* ContextBuilder */
+ public CsvParserBuilder applyAnnotations(Method...fromMethods) {
+ super.applyAnnotations(fromMethods);
+ return this;
+ }
}
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvSerializerBuilder.java
index 15021a5..9edeace 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvSerializerBuilder.java
@@ -821,14 +821,14 @@
}
@Override /* ContextBuilder */
- public CsvSerializerBuilder applyAnnotations(Class<?> fromClass) {
- super.applyAnnotations(fromClass);
+ public CsvSerializerBuilder applyAnnotations(Class<?>...fromClasses) {
+ super.applyAnnotations(fromClasses);
return this;
}
@Override /* ContextBuilder */
- public CsvSerializerBuilder applyAnnotations(Method fromMethod) {
- super.applyAnnotations(fromMethod);
+ public CsvSerializerBuilder applyAnnotations(Method...fromMethods) {
+ super.applyAnnotations(fromMethods);
return this;
}
}
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlClassMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlClassMeta.java
index e9586de..260c3b6 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlClassMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlClassMeta.java
@@ -36,7 +36,7 @@
*/
public HtmlClassMeta(ClassMeta<?> cm, HtmlMetaProvider mp) {
super(cm);
- this.html = cm.getAnnotation(Html.class, mp);
+ this.html = cm.getAnnotation(Html.class);
if (html != null) {
format = html.format();
noTables = html.noTables();
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializerBuilder.java
index a745703..ef76987 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializerBuilder.java
@@ -1342,14 +1342,14 @@
}
@Override /* ContextBuilder */
- public HtmlDocSerializerBuilder applyAnnotations(Class<?> fromClass) {
- super.applyAnnotations(fromClass);
+ public HtmlDocSerializerBuilder applyAnnotations(Class<?>...fromClasses) {
+ super.applyAnnotations(fromClasses);
return this;
}
@Override /* ContextBuilder */
- public HtmlDocSerializerBuilder applyAnnotations(Method fromMethod) {
- super.applyAnnotations(fromMethod);
+ public HtmlDocSerializerBuilder applyAnnotations(Method...fromMethods) {
+ super.applyAnnotations(fromMethods);
return this;
}
}
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserBuilder.java
index 52c4d59..8d40df4 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserBuilder.java
@@ -13,6 +13,7 @@
package org.apache.juneau.html;
import java.lang.annotation.*;
+import java.lang.reflect.*;
import java.nio.charset.*;
import java.util.*;
@@ -710,9 +711,21 @@
return this;
}
- @Override
+ @Override /* ContextBuilder */
public HtmlParserBuilder applyAnnotations(AnnotationList al, VarResolverSession vrs) {
super.applyAnnotations(al, vrs);
return this;
}
+
+ @Override /* ContextBuilder */
+ public HtmlParserBuilder applyAnnotations(Class<?>...fromClasses) {
+ super.applyAnnotations(fromClasses);
+ return this;
+ }
+
+ @Override /* ContextBuilder */
+ public HtmlParserBuilder applyAnnotations(Method...fromMethods) {
+ super.applyAnnotations(fromMethods);
+ return this;
+ }
}
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSchemaSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSchemaSerializerBuilder.java
index 64e49c3..c6e5143 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSchemaSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSchemaSerializerBuilder.java
@@ -954,14 +954,14 @@
}
@Override /* ContextBuilder */
- public HtmlSchemaSerializerBuilder applyAnnotations(Class<?> fromClass) {
- super.applyAnnotations(fromClass);
+ public HtmlSchemaSerializerBuilder applyAnnotations(Class<?>...fromClasses) {
+ super.applyAnnotations(fromClasses);
return this;
}
@Override /* ContextBuilder */
- public HtmlSchemaSerializerBuilder applyAnnotations(Method fromMethod) {
- super.applyAnnotations(fromMethod);
+ public HtmlSchemaSerializerBuilder applyAnnotations(Method...fromMethods) {
+ super.applyAnnotations(fromMethods);
return this;
}
}
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerBuilder.java
index fc60b96..7ba1850 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerBuilder.java
@@ -995,14 +995,14 @@
}
@Override /* ContextBuilder */
- public HtmlSerializerBuilder applyAnnotations(Class<?> fromClass) {
- super.applyAnnotations(fromClass);
+ public HtmlSerializerBuilder applyAnnotations(Class<?>...fromClasses) {
+ super.applyAnnotations(fromClasses);
return this;
}
@Override /* ContextBuilder */
- public HtmlSerializerBuilder applyAnnotations(Method fromMethod) {
- super.applyAnnotations(fromMethod);
+ public HtmlSerializerBuilder applyAnnotations(Method...fromMethods) {
+ super.applyAnnotations(fromMethods);
return this;
}
}
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlStrippedDocSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlStrippedDocSerializerBuilder.java
index 2533cfb..8099ab8 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlStrippedDocSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlStrippedDocSerializerBuilder.java
@@ -906,14 +906,14 @@
}
@Override /* ContextBuilder */
- public HtmlStrippedDocSerializerBuilder applyAnnotations(Class<?> fromClass) {
- super.applyAnnotations(fromClass);
+ public HtmlStrippedDocSerializerBuilder applyAnnotations(Class<?>...fromClasses) {
+ super.applyAnnotations(fromClasses);
return this;
}
@Override /* ContextBuilder */
- public HtmlStrippedDocSerializerBuilder applyAnnotations(Method fromMethod) {
- super.applyAnnotations(fromMethod);
+ public HtmlStrippedDocSerializerBuilder applyAnnotations(Method...fromMethods) {
+ super.applyAnnotations(fromMethods);
return this;
}
}
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoClassMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoClassMeta.java
index fafc76d..d43432d 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoClassMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoClassMeta.java
@@ -31,7 +31,7 @@
*/
public JsoClassMeta(ClassMeta<?> cm, JsoMetaProvider mp) {
super(cm);
- this.jso = cm.getAnnotation(Jso.class, mp);
+ this.jso = cm.getAnnotation(Jso.class);
}
/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoSerializerBuilder.java
index 5e7b847..e214c71 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoSerializerBuilder.java
@@ -778,14 +778,14 @@
}
@Override /* ContextBuilder */
- public JsoSerializerBuilder applyAnnotations(Class<?> fromClass) {
- super.applyAnnotations(fromClass);
+ public JsoSerializerBuilder applyAnnotations(Class<?>...fromClasses) {
+ super.applyAnnotations(fromClasses);
return this;
}
@Override /* ContextBuilder */
- public JsoSerializerBuilder applyAnnotations(Method fromMethod) {
- super.applyAnnotations(fromMethod);
+ public JsoSerializerBuilder applyAnnotations(Method...fromMethods) {
+ super.applyAnnotations(fromMethods);
return this;
}
}
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonClassMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonClassMeta.java
index 55dbb35..69dcdeb 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonClassMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonClassMeta.java
@@ -34,7 +34,7 @@
*/
public JsonClassMeta(ClassMeta<?> cm, JsonMetaProvider mp) {
super(cm);
- this.json = cm.getAnnotation(Json.class, mp);
+ this.json = cm.getAnnotation(Json.class);
if (json != null) {
wrapperAttr = nullIfEmpty(json.wrapperAttr());
} else {
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonParserBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonParserBuilder.java
index bb35719..09992b6 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonParserBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonParserBuilder.java
@@ -15,6 +15,7 @@
import static org.apache.juneau.json.JsonParser.*;
import java.lang.annotation.*;
+import java.lang.reflect.*;
import java.nio.charset.*;
import java.util.*;
@@ -726,9 +727,21 @@
return this;
}
- @Override
+ @Override /* ContextBuilder */
public JsonParserBuilder applyAnnotations(AnnotationList al, VarResolverSession vrs) {
super.applyAnnotations(al, vrs);
return this;
}
+
+ @Override /* ContextBuilder */
+ public JsonParserBuilder applyAnnotations(Class<?>...fromClasses) {
+ super.applyAnnotations(fromClasses);
+ return this;
+ }
+
+ @Override /* ContextBuilder */
+ public JsonParserBuilder applyAnnotations(Method...fromMethods) {
+ super.applyAnnotations(fromMethods);
+ return this;
+ }
}
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSchemaSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSchemaSerializerBuilder.java
index ef97cb9..01c157b 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSchemaSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSchemaSerializerBuilder.java
@@ -1020,14 +1020,14 @@
}
@Override /* ContextBuilder */
- public JsonSchemaSerializerBuilder applyAnnotations(Class<?> fromClass) {
- super.applyAnnotations(fromClass);
+ public JsonSchemaSerializerBuilder applyAnnotations(Class<?>...fromClasses) {
+ super.applyAnnotations(fromClasses);
return this;
}
@Override /* ContextBuilder */
- public JsonSchemaSerializerBuilder applyAnnotations(Method fromMethod) {
- super.applyAnnotations(fromMethod);
+ public JsonSchemaSerializerBuilder applyAnnotations(Method...fromMethods) {
+ super.applyAnnotations(fromMethods);
return this;
}
}
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializerBuilder.java
index 8efd3ea..55030b6 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonSerializerBuilder.java
@@ -15,6 +15,7 @@
import static org.apache.juneau.json.JsonSerializer.*;
import java.lang.annotation.*;
+import java.lang.reflect.*;
import java.nio.charset.*;
import java.util.*;
@@ -903,9 +904,21 @@
return this;
}
- @Override
+ @Override /* ContextBuilder */
public JsonSerializerBuilder applyAnnotations(AnnotationList al, VarResolverSession vrs) {
super.applyAnnotations(al, vrs);
return this;
}
+
+ @Override /* ContextBuilder */
+ public JsonSerializerBuilder applyAnnotations(Class<?>...fromClasses) {
+ super.applyAnnotations(fromClasses);
+ return this;
+ }
+
+ @Override /* ContextBuilder */
+ public JsonSerializerBuilder applyAnnotations(Method...fromMethods) {
+ super.applyAnnotations(fromMethods);
+ return this;
+ }
}
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaClassMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaClassMeta.java
index 2945099..5016ecb 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaClassMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaClassMeta.java
@@ -33,7 +33,7 @@
public JsonSchemaClassMeta(ClassMeta<?> cm, JsonSchemaMetaProvider mp) {
super(cm);
try {
- Schema s = cm.getAnnotation(Schema.class, mp);
+ Schema s = cm.getAnnotation(Schema.class);
schema = s == null ? ObjectMap.EMPTY_MAP : SchemaUtils.asMap(s);
} catch (ParseException e) {
throw new RuntimeException(e);
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGeneratorBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGeneratorBuilder.java
index c63df98..5ce1b12 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGeneratorBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGeneratorBuilder.java
@@ -882,14 +882,14 @@
}
@Override /* ContextBuilder */
- public JsonSchemaGeneratorBuilder applyAnnotations(Class<?> fromClass) {
- super.applyAnnotations(fromClass);
+ public JsonSchemaGeneratorBuilder applyAnnotations(Class<?>...fromClasses) {
+ super.applyAnnotations(fromClasses);
return this;
}
@Override /* ContextBuilder */
- public JsonSchemaGeneratorBuilder applyAnnotations(Method fromMethod) {
- super.applyAnnotations(fromMethod);
+ public JsonSchemaGeneratorBuilder applyAnnotations(Method...fromMethods) {
+ super.applyAnnotations(fromMethods);
return this;
}
}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGeneratorSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGeneratorSession.java
index 87780e7..016a427 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGeneratorSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGeneratorSession.java
@@ -139,8 +139,9 @@
}
JsonSchemaClassMeta jscm = null;
- if (pojoSwap != null && pojoSwap.getClass().getAnnotation(Schema.class) != null)
- jscm = getJsonSchemaClassMeta(getClassMeta(pojoSwap.getClass()));
+ ClassMeta pojoSwapCM = pojoSwap == null ? null : getClassMeta(pojoSwap.getClass());
+ if (pojoSwapCM != null && pojoSwapCM.getAnnotation(Schema.class) != null)
+ jscm = getJsonSchemaClassMeta(pojoSwapCM);
if (jscm == null)
jscm = getJsonSchemaClassMeta(sType);
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackClassMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackClassMeta.java
index 10bca2d..662db82 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackClassMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackClassMeta.java
@@ -31,7 +31,7 @@
*/
public MsgPackClassMeta(ClassMeta<?> cm, MsgPackMetaProvider mp) {
super(cm);
- this.msgPack = cm.getAnnotation(MsgPack.class, mp);
+ this.msgPack = cm.getAnnotation(MsgPack.class);
}
/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializerBuilder.java
index 532ad0e..0e857b6 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializerBuilder.java
@@ -778,14 +778,14 @@
}
@Override /* ContextBuilder */
- public MsgPackSerializerBuilder applyAnnotations(Class<?> fromClass) {
- super.applyAnnotations(fromClass);
+ public MsgPackSerializerBuilder applyAnnotations(Class<?>...fromClasses) {
+ super.applyAnnotations(fromClasses);
return this;
}
@Override /* ContextBuilder */
- public MsgPackSerializerBuilder applyAnnotations(Method fromMethod) {
- super.applyAnnotations(fromMethod);
+ public MsgPackSerializerBuilder applyAnnotations(Method...fromMethods) {
+ super.applyAnnotations(fromMethods);
return this;
}
}
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiClassMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiClassMeta.java
index 7b79561..0cba4ba 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiClassMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiClassMeta.java
@@ -31,7 +31,7 @@
*/
public OpenApiClassMeta(ClassMeta<?> cm, OpenApiMetaProvider mp) {
super(cm);
- this.openApi = cm.getAnnotation(OpenApi.class, mp);
+ this.openApi = cm.getAnnotation(OpenApi.class);
}
/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiParserBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiParserBuilder.java
index 61eaa9b..6167d71 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiParserBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiParserBuilder.java
@@ -13,6 +13,7 @@
package org.apache.juneau.oapi;
import java.lang.annotation.*;
+import java.lang.reflect.*;
import java.nio.charset.*;
import java.util.*;
@@ -663,9 +664,21 @@
return this;
}
- @Override
+ @Override /* ContextBuilder */
public OpenApiParserBuilder applyAnnotations(AnnotationList al, VarResolverSession vrs) {
super.applyAnnotations(al, vrs);
return this;
}
+
+ @Override /* ContextBuilder */
+ public OpenApiParserBuilder applyAnnotations(Class<?>...fromClasses) {
+ super.applyAnnotations(fromClasses);
+ return this;
+ }
+
+ @Override /* ContextBuilder */
+ public OpenApiParserBuilder applyAnnotations(Method...fromMethods) {
+ super.applyAnnotations(fromMethods);
+ return this;
+ }
}
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiSerializerBuilder.java
index b2f9749..3380f5b 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiSerializerBuilder.java
@@ -822,14 +822,14 @@
}
@Override /* ContextBuilder */
- public OpenApiSerializerBuilder applyAnnotations(Class<?> fromClass) {
- super.applyAnnotations(fromClass);
+ public OpenApiSerializerBuilder applyAnnotations(Class<?>...fromClasses) {
+ super.applyAnnotations(fromClasses);
return this;
}
@Override /* ContextBuilder */
- public OpenApiSerializerBuilder applyAnnotations(Method fromMethod) {
- super.applyAnnotations(fromMethod);
+ public OpenApiSerializerBuilder applyAnnotations(Method...fromMethods) {
+ super.applyAnnotations(fromMethods);
return this;
}
}
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/InputStreamParserBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/InputStreamParserBuilder.java
index 7d46dc9..3166ae7 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/InputStreamParserBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/InputStreamParserBuilder.java
@@ -719,14 +719,14 @@
}
@Override /* ContextBuilder */
- public InputStreamParserBuilder applyAnnotations(Class<?> fromClass) {
- super.applyAnnotations(fromClass);
+ public InputStreamParserBuilder applyAnnotations(Class<?>...fromClasses) {
+ super.applyAnnotations(fromClasses);
return this;
}
@Override /* ContextBuilder */
- public InputStreamParserBuilder applyAnnotations(Method fromMethod) {
- super.applyAnnotations(fromMethod);
+ public InputStreamParserBuilder applyAnnotations(Method...fromMethods) {
+ super.applyAnnotations(fromMethods);
return this;
}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserBuilder.java
index 21b0d99..c76ba04 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserBuilder.java
@@ -798,14 +798,14 @@
}
@Override /* ContextBuilder */
- public ParserBuilder applyAnnotations(Class<?> fromClass) {
- super.applyAnnotations(fromClass);
+ public ParserBuilder applyAnnotations(Class<?>...fromClasses) {
+ super.applyAnnotations(fromClasses);
return this;
}
@Override /* ContextBuilder */
- public ParserBuilder applyAnnotations(Method fromMethod) {
- super.applyAnnotations(fromMethod);
+ public ParserBuilder applyAnnotations(Method...fromMethods) {
+ super.applyAnnotations(fromMethods);
return this;
}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserGroupBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserGroupBuilder.java
index 128a67d..8d76fae 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserGroupBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserGroupBuilder.java
@@ -942,14 +942,14 @@
}
@Override /* ContextBuilder */
- public ParserGroupBuilder applyAnnotations(Class<?> fromClass) {
- super.applyAnnotations(fromClass);
+ public ParserGroupBuilder applyAnnotations(Class<?>...fromClasses) {
+ super.applyAnnotations(fromClasses);
return this;
}
@Override /* ContextBuilder */
- public ParserGroupBuilder applyAnnotations(Method fromMethod) {
- super.applyAnnotations(fromMethod);
+ public ParserGroupBuilder applyAnnotations(Method...fromMethods) {
+ super.applyAnnotations(fromMethods);
return this;
}
}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ReaderParserBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ReaderParserBuilder.java
index 860c504..3fa7bde 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ReaderParserBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ReaderParserBuilder.java
@@ -718,14 +718,14 @@
}
@Override /* ContextBuilder */
- public ReaderParserBuilder applyAnnotations(Class<?> fromClass) {
- super.applyAnnotations(fromClass);
+ public ReaderParserBuilder applyAnnotations(Class<?>...fromClasses) {
+ super.applyAnnotations(fromClasses);
return this;
}
@Override /* ContextBuilder */
- public ReaderParserBuilder applyAnnotations(Method fromMethod) {
- super.applyAnnotations(fromMethod);
+ public ReaderParserBuilder applyAnnotations(Method...fromMethods) {
+ super.applyAnnotations(fromMethods);
return this;
}
}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextClassMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextClassMeta.java
index 489fff1..fda5b6d 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextClassMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextClassMeta.java
@@ -31,7 +31,7 @@
*/
public PlainTextClassMeta(ClassMeta<?> cm, PlainTextMetaProvider mp) {
super(cm);
- this.plainText = cm.getAnnotation(PlainText.class, mp);
+ this.plainText = cm.getAnnotation(PlainText.class);
}
/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextParserBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextParserBuilder.java
index c54b26f..4535c74 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextParserBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextParserBuilder.java
@@ -13,6 +13,7 @@
package org.apache.juneau.plaintext;
import java.lang.annotation.*;
+import java.lang.reflect.*;
import java.nio.charset.*;
import java.util.*;
@@ -688,9 +689,21 @@
return this;
}
- @Override
+ @Override /* ContextBuilder */
public PlainTextParserBuilder applyAnnotations(AnnotationList al, VarResolverSession vrs) {
super.applyAnnotations(al, vrs);
return this;
}
+
+ @Override /* ContextBuilder */
+ public PlainTextParserBuilder applyAnnotations(Class<?>...fromClasses) {
+ super.applyAnnotations(fromClasses);
+ return this;
+ }
+
+ @Override /* ContextBuilder */
+ public PlainTextParserBuilder applyAnnotations(Method...fromMethods) {
+ super.applyAnnotations(fromMethods);
+ return this;
+ }
}
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextSerializerBuilder.java
index 3af9926..04944d2 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextSerializerBuilder.java
@@ -821,14 +821,14 @@
}
@Override /* ContextBuilder */
- public PlainTextSerializerBuilder applyAnnotations(Class<?> fromClass) {
- super.applyAnnotations(fromClass);
+ public PlainTextSerializerBuilder applyAnnotations(Class<?>...fromClasses) {
+ super.applyAnnotations(fromClasses);
return this;
}
@Override /* ContextBuilder */
- public PlainTextSerializerBuilder applyAnnotations(Method fromMethod) {
- super.applyAnnotations(fromMethod);
+ public PlainTextSerializerBuilder applyAnnotations(Method...fromMethods) {
+ super.applyAnnotations(fromMethods);
return this;
}
}
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/OutputStreamSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/OutputStreamSerializerBuilder.java
index 1579a66..e31b6da 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/OutputStreamSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/OutputStreamSerializerBuilder.java
@@ -659,14 +659,14 @@
}
@Override /* ContextBuilder */
- public OutputStreamSerializerBuilder applyAnnotations(Class<?> fromClass) {
- super.applyAnnotations(fromClass);
+ public OutputStreamSerializerBuilder applyAnnotations(Class<?>...fromClasses) {
+ super.applyAnnotations(fromClasses);
return this;
}
@Override /* ContextBuilder */
- public OutputStreamSerializerBuilder applyAnnotations(Method fromMethod) {
- super.applyAnnotations(fromMethod);
+ public OutputStreamSerializerBuilder applyAnnotations(Method...fromMethods) {
+ super.applyAnnotations(fromMethods);
return this;
}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerBuilder.java
index e39a1fd..7db406f 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerBuilder.java
@@ -1073,14 +1073,14 @@
}
@Override /* ContextBuilder */
- public SerializerBuilder applyAnnotations(Class<?> fromClass) {
- super.applyAnnotations(fromClass);
+ public SerializerBuilder applyAnnotations(Class<?>...fromClasses) {
+ super.applyAnnotations(fromClasses);
return this;
}
@Override /* ContextBuilder */
- public SerializerBuilder applyAnnotations(Method fromMethod) {
- super.applyAnnotations(fromMethod);
+ public SerializerBuilder applyAnnotations(Method...fromMethods) {
+ super.applyAnnotations(fromMethods);
return this;
}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerGroupBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerGroupBuilder.java
index f642095..654d91a 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerGroupBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerGroupBuilder.java
@@ -1247,14 +1247,14 @@
}
@Override /* ContextBuilder */
- public SerializerGroupBuilder applyAnnotations(Class<?> fromClass) {
- super.applyAnnotations(fromClass);
+ public SerializerGroupBuilder applyAnnotations(Class<?>...fromClasses) {
+ super.applyAnnotations(fromClasses);
return this;
}
@Override /* ContextBuilder */
- public SerializerGroupBuilder applyAnnotations(Method fromMethod) {
- super.applyAnnotations(fromMethod);
+ public SerializerGroupBuilder applyAnnotations(Method...fromMethods) {
+ super.applyAnnotations(fromMethods);
return this;
}
}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/WriterSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/WriterSerializerBuilder.java
index f103528..9674c14 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/WriterSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/WriterSerializerBuilder.java
@@ -768,14 +768,14 @@
}
@Override /* ContextBuilder */
- public WriterSerializerBuilder applyAnnotations(Class<?> fromClass) {
- super.applyAnnotations(fromClass);
+ public WriterSerializerBuilder applyAnnotations(Class<?>...fromClasses) {
+ super.applyAnnotations(fromClasses);
return this;
}
@Override /* ContextBuilder */
- public WriterSerializerBuilder applyAnnotations(Method fromMethod) {
- super.applyAnnotations(fromMethod);
+ public WriterSerializerBuilder applyAnnotations(Method...fromMethods) {
+ super.applyAnnotations(fromMethods);
return this;
}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlClassMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlClassMeta.java
index 7d67287..e542343 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlClassMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlClassMeta.java
@@ -31,7 +31,7 @@
*/
public SoapXmlClassMeta(ClassMeta<?> cm, SoapXmlMetaProvider mp) {
super(cm);
- this.soapXml = cm.getAnnotation(SoapXml.class, mp);
+ this.soapXml = cm.getAnnotation(SoapXml.class);
}
/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializerBuilder.java
index 8ecafba..d7ce4e3 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlSerializerBuilder.java
@@ -840,14 +840,14 @@
}
@Override /* ContextBuilder */
- public SoapXmlSerializerBuilder applyAnnotations(Class<?> fromClass) {
- super.applyAnnotations(fromClass);
+ public SoapXmlSerializerBuilder applyAnnotations(Class<?>...fromClasses) {
+ super.applyAnnotations(fromClasses);
return this;
}
@Override /* ContextBuilder */
- public SoapXmlSerializerBuilder applyAnnotations(Method fromMethod) {
- super.applyAnnotations(fromMethod);
+ public SoapXmlSerializerBuilder applyAnnotations(Method...fromMethods) {
+ super.applyAnnotations(fromMethods);
return this;
}
}
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonClassMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonClassMeta.java
index 482b9e9..3da35da 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonClassMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonClassMeta.java
@@ -31,7 +31,7 @@
*/
public UonClassMeta(ClassMeta<?> cm, UonMetaProvider mp) {
super(cm);
- this.uon = cm.getAnnotation(Uon.class, mp);
+ this.uon = cm.getAnnotation(Uon.class);
}
/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParserBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParserBuilder.java
index aa54741..dd851a2 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParserBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParserBuilder.java
@@ -15,6 +15,7 @@
import static org.apache.juneau.uon.UonParser.*;
import java.lang.annotation.*;
+import java.lang.reflect.*;
import java.nio.charset.*;
import java.util.*;
@@ -763,9 +764,21 @@
return this;
}
- @Override
+ @Override /* ContextBuilder */
public UonParserBuilder applyAnnotations(AnnotationList al, VarResolverSession vrs) {
super.applyAnnotations(al, vrs);
return this;
}
+
+ @Override /* ContextBuilder */
+ public UonParserBuilder applyAnnotations(Class<?>...fromClasses) {
+ super.applyAnnotations(fromClasses);
+ return this;
+ }
+
+ @Override /* ContextBuilder */
+ public UonParserBuilder applyAnnotations(Method...fromMethods) {
+ super.applyAnnotations(fromMethods);
+ return this;
+ }
}
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializerBuilder.java
index 9ae23ed..08de009 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonSerializerBuilder.java
@@ -912,14 +912,14 @@
}
@Override /* ContextBuilder */
- public UonSerializerBuilder applyAnnotations(Class<?> fromClass) {
- super.applyAnnotations(fromClass);
+ public UonSerializerBuilder applyAnnotations(Class<?>...fromClasses) {
+ super.applyAnnotations(fromClasses);
return this;
}
@Override /* ContextBuilder */
- public UonSerializerBuilder applyAnnotations(Method fromMethod) {
- super.applyAnnotations(fromMethod);
+ public UonSerializerBuilder applyAnnotations(Method...fromMethods) {
+ super.applyAnnotations(fromMethods);
return this;
}
}
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingClassMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingClassMeta.java
index 41e5ecf..c50ec0e 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingClassMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingClassMeta.java
@@ -31,7 +31,7 @@
*/
public UrlEncodingClassMeta(ClassMeta<?> cm, UrlEncodingMetaProvider mp) {
super(cm);
- this.urlEncoding = cm.getAnnotation(UrlEncoding.class, mp);
+ this.urlEncoding = cm.getAnnotation(UrlEncoding.class);
if (urlEncoding != null) {
expandedParams = urlEncoding.expandedParams();
} else {
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParserBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParserBuilder.java
index 58e0e60..818d993 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParserBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParserBuilder.java
@@ -15,6 +15,7 @@
import static org.apache.juneau.urlencoding.UrlEncodingParser.*;
import java.lang.annotation.*;
+import java.lang.reflect.*;
import java.nio.charset.*;
import java.util.*;
@@ -708,9 +709,21 @@
return this;
}
- @Override
+ @Override /* ContextBuilder */
public UrlEncodingParserBuilder applyAnnotations(AnnotationList al, VarResolverSession vrs) {
super.applyAnnotations(al, vrs);
return this;
}
+
+ @Override /* ContextBuilder */
+ public UrlEncodingParserBuilder applyAnnotations(Class<?>...fromClasses) {
+ super.applyAnnotations(fromClasses);
+ return this;
+ }
+
+ @Override /* ContextBuilder */
+ public UrlEncodingParserBuilder applyAnnotations(Method...fromMethods) {
+ super.applyAnnotations(fromMethods);
+ return this;
+ }
}
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerBuilder.java
index aaa06c9..1ca00a2 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerBuilder.java
@@ -884,14 +884,14 @@
}
@Override /* ContextBuilder */
- public UrlEncodingSerializerBuilder applyAnnotations(Class<?> fromClass) {
- super.applyAnnotations(fromClass);
+ public UrlEncodingSerializerBuilder applyAnnotations(Class<?>...fromClasses) {
+ super.applyAnnotations(fromClasses);
return this;
}
@Override /* ContextBuilder */
- public UrlEncodingSerializerBuilder applyAnnotations(Method fromMethod) {
- super.applyAnnotations(fromMethod);
+ public UrlEncodingSerializerBuilder applyAnnotations(Method...fromMethods) {
+ super.applyAnnotations(fromMethods);
return this;
}
}
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlClassMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlClassMeta.java
index 160a9ef..c183e8a 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlClassMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlClassMeta.java
@@ -39,7 +39,7 @@
public XmlClassMeta(ClassMeta<?> cm, XmlMetaProvider mp) {
super(cm);
this.namespace = findNamespace(cm, mp);
- this.xml = cm.getAnnotation(Xml.class, mp);
+ this.xml = cm.getAnnotation(Xml.class);
if (xml != null) {
this.format = xml.format();
this.childName = nullIfEmpty(xml.childName());
@@ -101,8 +101,8 @@
private static Namespace findNamespace(ClassMeta<?> cm, MetaProvider mp) {
if (cm == null)
return null;
- List<Xml> xmls = cm.getAnnotations(Xml.class, mp);
- List<XmlSchema> schemas = cm.getAnnotations(XmlSchema.class, mp);
+ List<Xml> xmls = cm.getAnnotations(Xml.class);
+ List<XmlSchema> schemas = cm.getAnnotations(XmlSchema.class);
return XmlUtils.findNamespace(xmls, schemas);
}
}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParserBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParserBuilder.java
index a9db043..92fe68a 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParserBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParserBuilder.java
@@ -15,6 +15,7 @@
import static org.apache.juneau.xml.XmlParser.*;
import java.lang.annotation.*;
+import java.lang.reflect.*;
import java.nio.charset.*;
import java.util.*;
@@ -866,9 +867,21 @@
return this;
}
- @Override
+ @Override /* ContextBuilder */
public XmlParserBuilder applyAnnotations(AnnotationList al, VarResolverSession vrs) {
super.applyAnnotations(al, vrs);
return this;
}
+
+ @Override /* ContextBuilder */
+ public XmlParserBuilder applyAnnotations(Class<?>...fromClasses) {
+ super.applyAnnotations(fromClasses);
+ return this;
+ }
+
+ @Override /* ContextBuilder */
+ public XmlParserBuilder applyAnnotations(Method...fromMethods) {
+ super.applyAnnotations(fromMethods);
+ return this;
+ }
}
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializerBuilder.java
index 61ccc1f..691a052 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializerBuilder.java
@@ -1021,14 +1021,14 @@
}
@Override /* ContextBuilder */
- public XmlSerializerBuilder applyAnnotations(Class<?> fromClass) {
- super.applyAnnotations(fromClass);
+ public XmlSerializerBuilder applyAnnotations(Class<?>...fromClasses) {
+ super.applyAnnotations(fromClasses);
return this;
}
@Override /* ContextBuilder */
- public XmlSerializerBuilder applyAnnotations(Method fromMethod) {
- super.applyAnnotations(fromMethod);
+ public XmlSerializerBuilder applyAnnotations(Method...fromMethods) {
+ super.applyAnnotations(fromMethods);
return this;
}
}
\ No newline at end of file
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xmlschema/XmlSchemaSerializerBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xmlschema/XmlSchemaSerializerBuilder.java
index f4d0a80..709b452 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xmlschema/XmlSchemaSerializerBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xmlschema/XmlSchemaSerializerBuilder.java
@@ -864,14 +864,14 @@
}
@Override /* ContextBuilder */
- public XmlSchemaSerializerBuilder applyAnnotations(Class<?> fromClass) {
- super.applyAnnotations(fromClass);
+ public XmlSchemaSerializerBuilder applyAnnotations(Class<?>...fromClasses) {
+ super.applyAnnotations(fromClasses);
return this;
}
@Override /* ContextBuilder */
- public XmlSchemaSerializerBuilder applyAnnotations(Method fromMethod) {
- super.applyAnnotations(fromMethod);
+ public XmlSchemaSerializerBuilder applyAnnotations(Method...fromMethods) {
+ super.applyAnnotations(fromMethods);
return this;
}
}
\ No newline at end of file
diff --git a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClientBuilder.java b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClientBuilder.java
index 62fe86c1..243b9cc 100644
--- a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClientBuilder.java
+++ b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClientBuilder.java
@@ -2852,14 +2852,14 @@
}
@Override /* ContextBuilder */
- public RestClientBuilder applyAnnotations(Class<?> fromClass) {
- super.applyAnnotations(fromClass);
+ public RestClientBuilder applyAnnotations(Class<?>...fromClasses) {
+ super.applyAnnotations(fromClasses);
return this;
}
@Override /* ContextBuilder */
- public RestClientBuilder applyAnnotations(Method fromMethod) {
- super.applyAnnotations(fromMethod);
+ public RestClientBuilder applyAnnotations(Method...fromMethods) {
+ super.applyAnnotations(fromMethods);
return this;
}
diff --git a/juneau-rest/juneau-rest-mock-utest/src/test/java/org/apache/juneau/rest/testutils/DTOs2.java b/juneau-rest/juneau-rest-mock-utest/src/test/java/org/apache/juneau/rest/testutils/DTOs2.java
new file mode 100644
index 0000000..21fcfe0
--- /dev/null
+++ b/juneau-rest/juneau-rest-mock-utest/src/test/java/org/apache/juneau/rest/testutils/DTOs2.java
@@ -0,0 +1,143 @@
+// ***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file *
+// * distributed with this work for additional information regarding copyright ownership. The ASF licenses this file *
+// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance *
+// * with the License. You may obtain a copy of the License at *
+// * *
+// * http://www.apache.org/licenses/LICENSE-2.0 *
+// * *
+// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an *
+// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the *
+// * specific language governing permissions and limitations under the License. *
+// ***************************************************************************************************************************
+package org.apache.juneau.rest.testutils;
+
+import java.util.*;
+
+import org.apache.juneau.annotation.*;
+import org.apache.juneau.urlencoding.annotation.*;
+import org.apache.juneau.utils.*;
+
+public class DTOs2 {
+
+ @BeanConfig(annotateBean={@Bean(on="A,B,C",sort=true)})
+ @UrlEncodingConfig(annotateUrlEncoding={@UrlEncoding(on="C",expandedParams=true)})
+ public static class Annotations {}
+
+ public static class A {
+ public String a;
+ public int b;
+ public boolean c;
+
+ public static A create() {
+ A t = new A();
+ t.a = "a";
+ t.b = 1;
+ t.c = true;
+ return t;
+ }
+
+ }
+
+ public static class B {
+ public String[] f01;
+ public List<String> f02;
+ public int[] f03;
+ public List<Integer> f04;
+ public String[][] f05;
+ public List<String[]> f06;
+ public A[] f07;
+ public List<A> f08;
+ public A[][] f09;
+ public List<List<A>> f10;
+
+ private String[] f11;
+ private List<String> f12;
+ private int[] f13;
+ private List<Integer> f14;
+ private String[][] f15;
+ private List<String[]> f16;
+ private A[] f17;
+ private List<A> f18;
+ private A[][] f19;
+ private List<List<A>> f20;
+
+ public String[] getF11() { return f11; }
+ public List<String> getF12() { return f12; }
+ public int[] getF13() { return f13; }
+ public List<Integer> getF14() { return f14; }
+ public String[][] getF15() { return f15; }
+ public List<String[]> getF16() { return f16; }
+ public A[] getF17() { return f17; }
+ public List<A> getF18() { return f18; }
+ public A[][] getF19() { return f19; }
+ public List<List<A>> getF20() { return f20; }
+
+ public void setF11(String[] f11) { this.f11 = f11; }
+ public void setF12(List<String> f12) { this.f12 = f12; }
+ public void setF13(int[] f13) { this.f13 = f13; }
+ public void setF14(List<Integer> f14) { this.f14 = f14; }
+ public void setF15(String[][] f15) { this.f15 = f15; }
+ public void setF16(List<String[]> f16) { this.f16 = f16; }
+ public void setF17(A[] f17) { this.f17 = f17; }
+ public void setF18(List<A> f18) { this.f18 = f18; }
+ public void setF19(A[][] f19) { this.f19 = f19; }
+ public void setF20(List<List<A>> f20) { this.f20 = f20; }
+
+ public static B create() {
+ B t = new B();
+ t.f01 = new String[]{"a","b"};
+ t.f02 = AList.create("c","d");
+ t.f03 = new int[]{1,2};
+ t.f04 = AList.create(3,4);
+ t.f05 = new String[][]{{"e","f"},{"g","h"}};
+ t.f06 = AList.create(new String[]{"i","j"},new String[]{"k","l"});
+ t.f07 = new A[]{A.create(),A.create()};
+ t.f08 = AList.create(A.create(),A.create());
+ t.f09 = new A[][]{{A.create()},{A.create()}};
+ t.f10 = AList.create(Arrays.asList(A.create()),Arrays.asList(A.create()));
+ t.setF11(new String[]{"a","b"});
+ t.setF12(AList.create("c","d"));
+ t.setF13(new int[]{1,2});
+ t.setF14(AList.create(3,4));
+ t.setF15(new String[][]{{"e","f"},{"g","h"}});
+ t.setF16(AList.create(new String[]{"i","j"},new String[]{"k","l"}));
+ t.setF17(new A[]{A.create(),A.create()});
+ t.setF18(AList.create(A.create(),A.create()));
+ t.setF19(new A[][]{{A.create()},{A.create()}});
+ t.setF20(AList.create(Arrays.asList(A.create()),Arrays.asList(A.create())));
+ return t;
+ }
+
+ public static B INSTANCE = create();
+ }
+
+ public static class C extends B {
+ public static C create() {
+ C t = new C();
+ t.f01 = new String[]{"a","b"};
+ t.f02 = AList.create("c","d");
+ t.f03 = new int[]{1,2};
+ t.f04 = AList.create(3, 4);
+ t.f05 = new String[][]{{"e","f"},{"g","h"}};
+ t.f06 = AList.create(new String[]{"i","j"}, new String[]{"k","l"});
+ t.f07 = new A[]{A.create(),A.create()};
+ t.f08 = AList.create(A.create(), A.create());
+ t.f09 = new A[][]{{A.create()},{A.create()}};
+ t.f10 = AList.create(Arrays.asList(A.create()), Arrays.asList(A.create()));
+ t.setF11(new String[]{"a","b"});
+ t.setF12(AList.create("c","d"));
+ t.setF13(new int[]{1,2});
+ t.setF14(AList.create(3,4));
+ t.setF15(new String[][]{{"e","f"},{"g","h"}});
+ t.setF16(AList.create(new String[]{"i","j"},new String[]{"k","l"}));
+ t.setF17(new A[]{A.create(),A.create()});
+ t.setF18(AList.create(A.create(), A.create()));
+ t.setF19(new A[][]{{A.create()},{A.create()}});
+ t.setF20(AList.create(Arrays.asList(A.create()), Arrays.asList(A.create())));
+ return t;
+ }
+
+ public static C INSTANCE = create();
+ }
+}
diff --git a/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/annotation2/BodyAnnotationTest.java b/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/annotation2/BodyAnnotationTest.java
index 17dde9a..77f59dd 100644
--- a/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/annotation2/BodyAnnotationTest.java
+++ b/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/annotation2/BodyAnnotationTest.java
@@ -19,6 +19,7 @@
import java.io.*;
import java.util.*;
+import org.apache.juneau.annotation.*;
import org.apache.juneau.dto.swagger.*;
import org.apache.juneau.http.annotation.Body;
import org.apache.juneau.http.annotation.HasQuery;
@@ -31,8 +32,11 @@
import org.apache.juneau.rest.mock2.*;
import org.apache.juneau.rest.testutils.*;
import org.apache.juneau.rest.testutils.DTOs;
+import org.apache.juneau.rest.testutils.DTOs2;
import org.apache.juneau.uon.*;
import org.apache.juneau.urlencoding.*;
+import org.apache.juneau.urlencoding.annotation.*;
+import org.apache.juneau.urlencoding.annotation.UrlEncoding;
import org.apache.juneau.utils.*;
import org.junit.*;
import org.junit.runners.*;
@@ -649,6 +653,42 @@
e.put("/C?body=" + UonSerializer.DEFAULT.serialize(DTOs.B.INSTANCE), "a").execute().assertBody(expected);
}
+ @Rest(serializers=SimpleJsonSerializer.class, parsers=JsonParser.class, defaultAccept="application/json")
+ @BeanConfig(annotateBean={@Bean(on="A,B,C",sort=true)})
+ @UrlEncodingConfig(annotateUrlEncoding={@UrlEncoding(on="C",expandedParams=true)})
+ public static class E2 {
+ @RestMethod(name=PUT, path="/B")
+ public DTOs2.B testPojo1(@Body DTOs2.B b) {
+ return b;
+ }
+ @RestMethod(name=PUT, path="/C")
+ public DTOs2.C testPojo2(@Body DTOs2.C c) {
+ return c;
+ }
+ }
+ private static MockRest e2 = MockRest.build(E2.class);
+
+ @Test
+ public void e05_complexPojos_B_body() throws Exception {
+ String expected = "{f01:['a','b'],f02:['c','d'],f03:[1,2],f04:[3,4],f05:[['e','f'],['g','h']],f06:[['i','j'],['k','l']],f07:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f08:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f09:[[{a:'a',b:1,c:true}],[{a:'a',b:1,c:true}]],f10:[[{a:'a',b:1,c:true}],[{a:'a',b:1,c:true}]],f11:['a','b'],f12:['c','d'],f13:[1,2],f14:[3,4],f15:[['e','f'],['g','h']],f16:[['i','j'],['k','l']],f17:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f18:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f19:[[{a:'a',b:1,c:true}],[{a:'a',b:1,c:true}]],f20:[[{a:'a',b:1,c:true}],[{a:'a',b:1,c:true}]]}";
+ e2.put("/B", SimpleJsonSerializer.DEFAULT.builder().applyAnnotations(DTOs2.Annotations.class).build().toString(DTOs2.B.INSTANCE)).json().execute().assertBody(expected);
+ }
+ @Test
+ public void e06_complexPojos_B_bodyParam() throws Exception {
+ String expected = "{f01:['a','b'],f02:['c','d'],f03:[1,2],f04:[3,4],f05:[['e','f'],['g','h']],f06:[['i','j'],['k','l']],f07:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f08:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f09:[[{a:'a',b:1,c:true}],[{a:'a',b:1,c:true}]],f10:[[{a:'a',b:1,c:true}],[{a:'a',b:1,c:true}]],f11:['a','b'],f12:['c','d'],f13:[1,2],f14:[3,4],f15:[['e','f'],['g','h']],f16:[['i','j'],['k','l']],f17:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f18:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f19:[[{a:'a',b:1,c:true}],[{a:'a',b:1,c:true}]],f20:[[{a:'a',b:1,c:true}],[{a:'a',b:1,c:true}]]}";
+ e2.put("/B?body=" + UonSerializer.DEFAULT.builder().applyAnnotations(DTOs2.Annotations.class).build().serialize(DTOs2.B.INSTANCE), "a").execute().assertBody(expected);
+ }
+ @Test
+ public void e07_complexPojos_C_body() throws Exception {
+ String expected = "{f01:['a','b'],f02:['c','d'],f03:[1,2],f04:[3,4],f05:[['e','f'],['g','h']],f06:[['i','j'],['k','l']],f07:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f08:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f09:[[{a:'a',b:1,c:true}],[{a:'a',b:1,c:true}]],f10:[[{a:'a',b:1,c:true}],[{a:'a',b:1,c:true}]],f11:['a','b'],f12:['c','d'],f13:[1,2],f14:[3,4],f15:[['e','f'],['g','h']],f16:[['i','j'],['k','l']],f17:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f18:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f19:[[{a:'a',b:1,c:true}],[{a:'a',b:1,c:true}]],f20:[[{a:'a',b:1,c:true}],[{a:'a',b:1,c:true}]]}";
+ e2.put("/C", SimpleJsonSerializer.DEFAULT.builder().applyAnnotations(DTOs2.Annotations.class).build().toString(DTOs2.B.INSTANCE)).json().execute().assertBody(expected);
+ }
+ @Test
+ public void e08_complexPojos_C_bodyParam() throws Exception {
+ String expected = "{f01:['a','b'],f02:['c','d'],f03:[1,2],f04:[3,4],f05:[['e','f'],['g','h']],f06:[['i','j'],['k','l']],f07:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f08:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f09:[[{a:'a',b:1,c:true}],[{a:'a',b:1,c:true}]],f10:[[{a:'a',b:1,c:true}],[{a:'a',b:1,c:true}]],f11:['a','b'],f12:['c','d'],f13:[1,2],f14:[3,4],f15:[['e','f'],['g','h']],f16:[['i','j'],['k','l']],f17:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f18:[{a:'a',b:1,c:true},{a:'a',b:1,c:true}],f19:[[{a:'a',b:1,c:true}],[{a:'a',b:1,c:true}]],f20:[[{a:'a',b:1,c:true}],[{a:'a',b:1,c:true}]]}";
+ e2.put("/C?body=" + UonSerializer.DEFAULT.builder().applyAnnotations(DTOs2.Annotations.class).build().serialize(DTOs2.B.INSTANCE), "a").execute().assertBody(expected);
+ }
+
//=================================================================================================================
// Form POSTS with @Body parameter
//=================================================================================================================
@@ -764,6 +804,48 @@
h.post("/", in).urlEnc().execute().assertBody(in);
}
+ @Rest(serializers=UrlEncodingSerializer.class,parsers=UrlEncodingParser.class)
+ @BeanConfig(annotateBean={@Bean(on="A,B,C",sort=true)})
+ @UrlEncodingConfig(annotateUrlEncoding={@UrlEncoding(on="C",expandedParams=true)})
+ public static class H2 {
+ @RestMethod(name=POST,path="/",
+ properties={
+ @Property(name=UrlEncodingSerializer.URLENC_expandedParams, value="true"),
+ @Property(name=UrlEncodingParser.URLENC_expandedParams, value="true")
+ }
+ )
+ public DTOs2.B g(@Body DTOs2.B content) throws Exception {
+ return content;
+ }
+ }
+ static MockRest h2 = MockRest.build(H2.class);
+
+ @Test
+ public void h02() throws Exception {
+ String in = ""
+ + "f01=a&f01=b"
+ + "&f02=c&f02=d"
+ + "&f03=1&f03=2"
+ + "&f04=3&f04=4"
+ + "&f05=@(e,f)&f05=@(g,h)"
+ + "&f06=@(i,j)&f06=@(k,l)"
+ + "&f07=(a=a,b=1,c=true)&f07=(a=b,b=2,c=false)"
+ + "&f08=(a=a,b=1,c=true)&f08=(a=b,b=2,c=false)"
+ + "&f09=@((a=a,b=1,c=true))&f09=@((a=b,b=2,c=false))"
+ + "&f10=@((a=a,b=1,c=true))&f10=@((a=b,b=2,c=false))"
+ + "&f11=a&f11=b"
+ + "&f12=c&f12=d"
+ + "&f13=1&f13=2"
+ + "&f14=3&f14=4"
+ + "&f15=@(e,f)&f15=@(g,h)"
+ + "&f16=@(i,j)&f16=@(k,l)"
+ + "&f17=(a=a,b=1,c=true)&f17=(a=b,b=2,c=false)"
+ + "&f18=(a=a,b=1,c=true)&f18=(a=b,b=2,c=false)"
+ + "&f19=@((a=a,b=1,c=true))&f19=@((a=b,b=2,c=false))"
+ + "&f20=@((a=a,b=1,c=true))&f20=@((a=b,b=2,c=false))";
+ h2.post("/", in).urlEnc().execute().assertBody(in);
+ }
+
//=================================================================================================================
// Test behavior of @Body(required=true).
//=================================================================================================================
@@ -783,6 +865,23 @@
i.post("/", "{}").json().execute().assertStatus(200);
}
+ @Rest(serializers=JsonSerializer.class,parsers=JsonParser.class)
+ public static class I2 {
+ @RestMethod(name=POST,path="/")
+ @BeanConfig(annotateBean={@Bean(on="A,B,C",sort=true)})
+ @UrlEncodingConfig(annotateUrlEncoding={@UrlEncoding(on="C",expandedParams=true)})
+ public DTOs2.B g(@Body(required=true) DTOs2.B content) throws Exception {
+ return content;
+ }
+ }
+ static MockRest i2 = MockRest.build(I2.class);
+
+ @Test
+ public void i02() throws Exception {
+ i2.post("/", "").json().execute().assertStatus(400).assertBodyContains("Required value not provided.");
+ i2.post("/", "{}").json().execute().assertStatus(200);
+ }
+
//=================================================================================================================
// Optional body parameter.
//=================================================================================================================
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java
index fcc7a38..e930018 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java
@@ -869,7 +869,7 @@
/**
* Configuration property: Default request attributes.
- *
+ *
* @deprecated Use {@link #reqAttrs(String...)}
*/
@SuppressWarnings("javadoc")
@@ -880,7 +880,7 @@
/**
* Configuration property: Default request headers.
- *
+ *
* @deprecated Use {@link #reqHeaders(String...)}
*/
@SuppressWarnings("javadoc")
@@ -930,7 +930,7 @@
/**
* Configuration property: Default request headers.
- *
+ *
* @deprecated Use {@link #reqHeader(String,Object)}
*/
@SuppressWarnings("javadoc")
@@ -2998,14 +2998,14 @@
}
@Override /* ContextBuilder */
- public RestContextBuilder applyAnnotations(Class<?> fromClass) {
- super.applyAnnotations(fromClass);
+ public RestContextBuilder applyAnnotations(Class<?>...fromClasses) {
+ super.applyAnnotations(fromClasses);
return this;
}
@Override /* ContextBuilder */
- public RestContextBuilder applyAnnotations(java.lang.reflect.Method fromMethod) {
- super.applyAnnotations(fromMethod);
+ public RestContextBuilder applyAnnotations(java.lang.reflect.Method...fromMethods) {
+ super.applyAnnotations(fromMethods);
return this;
}