1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.juneau.rest.annotation;
18
19 import org.apache.juneau.*;
20 import org.apache.juneau.annotation.*;
21 import org.apache.juneau.rest.mock.*;
22 import org.apache.juneau.rest.servlet.*;
23 import org.junit.jupiter.api.*;
24
25 @SuppressWarnings("serial")
26 class RestOp_BeanConfig_Test extends TestBase {
27
28
29
30
31
32 public static class A1 extends BasicRestServlet {
33 @RestGet
34 @Bean(onClass=X1.class, properties="a,_b")
35 public Object a() {
36 return new X1().init();
37 }
38 @RestGet
39 @Bean(onClass=X1.class, p="a")
40 public Object b() {
41 return new X1().init();
42 }
43 @RestGet
44 @Bean(onClass=X1.class, p="_b")
45 public Object c() {
46 return new X1().init();
47 }
48 }
49
50 @Test void a01_bpi() throws Exception {
51 var a1 = MockRestClient.build(A1.class);
52 a1.get("/a").json().run().assertContent("{\"a\":1,\"_b\":\"foo\"}");
53 a1.get("/a").xml().run().assertContent().isContains("<object><a>1</a><_b>foo</_b></object>");
54 a1.get("/a").html().run().assertContent().isContains("<table><tr><td>a</td><td>1</td></tr><tr><td>_b</td><td>foo</td></tr></table>");
55 a1.get("/a").uon().run().assertContent("(a=1,_b=foo)");
56 a1.get("/a").urlEnc().run().assertContent("a=1&_b=foo");
57 a1.get("/b").json().run().assertContent("{\"a\":1}");
58 a1.get("/b").xml().run().assertContent().isContains("<object><a>1</a></object>");
59 a1.get("/b").html().run().assertContent().isContains("<table><tr><td>a</td><td>1</td></tr></table>");
60 a1.get("/b").uon().run().assertContent("(a=1)");
61 a1.get("/b").urlEnc().run().assertContent("a=1");
62 a1.get("/c").json().run().assertContent("{\"_b\":\"foo\"}");
63 a1.get("/c").xml().run().assertContent().isContains("<object><_b>foo</_b></object>");
64 a1.get("/c").html().run().assertContent().isContains("<table><tr><td>_b</td><td>foo</td></tr></table>");
65 a1.get("/c").uon().run().assertContent("(_b=foo)");
66 a1.get("/c").urlEnc().run().assertContent("_b=foo");
67 }
68
69
70
71
72
73 public static class A2 extends BasicRestServlet {
74 @RestGet
75 @Bean(on="X1", excludeProperties="a,_b")
76 public Object a() {
77 return new X1().init();
78 }
79 @RestGet
80 @Bean(on="X1", xp="a")
81 public Object b() {
82 return new X1().init();
83 }
84 @RestGet
85 @Bean(on="X1", xp="_b")
86 public Object c() {
87 return new X1().init();
88 }
89 }
90
91 @Test void a02_bpx() throws Exception {
92 var a2 = MockRestClient.build(A2.class);
93 a2.get("/a").json().run().assertContent("{}");
94 a2.get("/a").xml().run().assertContent().isContains("<object/>");
95 a2.get("/a").html().run().assertContent().isContains("<table></table>");
96 a2.get("/a").uon().run().assertContent("()");
97 a2.get("/a").urlEnc().run().assertContent("");
98 a2.get("/b").json().run().assertContent("{\"_b\":\"foo\"}");
99 a2.get("/b").xml().run().assertContent().isContains("<object><_b>foo</_b></object>");
100 a2.get("/b").html().run().assertContent().isContains("<table><tr><td>_b</td><td>foo</td></tr></table>");
101 a2.get("/b").uon().run().assertContent("(_b=foo)");
102 a2.get("/b").urlEnc().run().assertContent("_b=foo");
103 a2.get("/c").json().run().assertContent("{\"a\":1}");
104 a2.get("/c").xml().run().assertContent().isContains("<object><a>1</a></object>");
105 a2.get("/c").html().run().assertContent().isContains("<table><tr><td>a</td><td>1</td></tr></table>");
106 a2.get("/c").uon().run().assertContent("(a=1)");
107 a2.get("/c").urlEnc().run().assertContent("a=1");
108 }
109
110
111
112
113
114 public static class A3 extends BasicRestServlet {
115 @RestGet
116 @Bean(onClass=X2.class, p="a,_b")
117 public Object a() {
118 return new X2().init();
119 }
120 @RestGet
121 @Bean(onClass=X2.class, p="a")
122 public Object b() {
123 return new X2().init();
124 }
125 @RestGet
126 @Bean(onClass=X2.class, p="_b")
127 public Object c() {
128 return new X2().init();
129 }
130 }
131
132 @Test void a03_bpi_overridesClass() throws Exception {
133 var c = MockRestClient.build(A3.class);
134 c.get("/a").json().run().assertContent("{\"a\":1,\"_b\":\"foo\"}");
135 c.get("/a").xml().run().assertContent().isContains("<object><a>1</a><_b>foo</_b></object>");
136 c.get("/a").html().run().assertContent().isContains("<table><tr><td>a</td><td>1</td></tr><tr><td>_b</td><td>foo</td></tr></table>");
137 c.get("/a").uon().run().assertContent("(a=1,_b=foo)");
138 c.get("/a").urlEnc().run().assertContent("a=1&_b=foo");
139 c.get("/b").json().run().assertContent("{\"a\":1}");
140 c.get("/b").xml().run().assertContent().isContains("<object><a>1</a></object>");
141 c.get("/b").html().run().assertContent().isContains("<table><tr><td>a</td><td>1</td></tr></table>");
142 c.get("/b").uon().run().assertContent("(a=1)");
143 c.get("/b").urlEnc().run().assertContent("a=1");
144 c.get("/c").json().run().assertContent("{\"_b\":\"foo\"}");
145 c.get("/c").xml().run().assertContent().isContains("<object><_b>foo</_b></object>");
146 c.get("/c").html().run().assertContent().isContains("<table><tr><td>_b</td><td>foo</td></tr></table>");
147 c.get("/c").uon().run().assertContent("(_b=foo)");
148 c.get("/c").urlEnc().run().assertContent("_b=foo");
149 }
150
151
152
153
154
155 public static class A4 extends BasicRestServlet {
156 @RestGet
157 @Bean(onClass=X2.class, xp="a,_b")
158 public Object a() {
159 return new X2().init();
160 }
161 @RestGet
162 @Bean(onClass=X2.class, xp="a")
163 public Object b() {
164 return new X2().init();
165 }
166 @RestGet
167 @Bean(onClass=X2.class, xp="_b")
168 public Object c() {
169 return new X2().init();
170 }
171 }
172
173 @Test void a04_bpx_overridesClass() throws Exception {
174 var a4 = MockRestClient.build(A4.class);
175 a4.get("/a").json().run().assertContent("{}");
176 a4.get("/a").xml().run().assertContent().isContains("<object/>");
177 a4.get("/a").html().run().assertContent().isContains("<table></table>");
178 a4.get("/a").uon().run().assertContent("()");
179 a4.get("/a").urlEnc().run().assertContent("");
180 a4.get("/b").json().run().assertContent("{\"_b\":\"foo\"}");
181 a4.get("/b").xml().run().assertContent().isContains("<object><_b>foo</_b></object>");
182 a4.get("/b").html().run().assertContent().isContains("<table><tr><td>_b</td><td>foo</td></tr></table>");
183 a4.get("/b").uon().run().assertContent("(_b=foo)");
184 a4.get("/b").urlEnc().run().assertContent("_b=foo");
185 a4.get("/c").json().run().assertContent("{\"a\":1}");
186 a4.get("/c").xml().run().assertContent().isContains("<object><a>1</a></object>");
187 a4.get("/c").html().run().assertContent().isContains("<table><tr><td>a</td><td>1</td></tr></table>");
188 a4.get("/c").uon().run().assertContent("(a=1)");
189 a4.get("/c").urlEnc().run().assertContent("a=1");
190 }
191
192
193
194
195
196 public static class A5 extends BasicRestServlet {
197 @RestGet
198 @Bean(on="*", p="a")
199 public Object a() {
200 return new X1().init();
201 }
202 }
203
204 @Test void a05_bpi_metaMatching() throws Exception {
205 var a5 = MockRestClient.build(A5.class);
206 a5.get("/a").json().run().assertContent("{\"a\":1}");
207 a5.get("/a").xml().run().assertContent().isContains("<object><a>1</a></object>");
208 a5.get("/a").html().run().assertContent().isContains("<table><tr><td>a</td><td>1</td></tr></table>");
209 a5.get("/a").uon().run().assertContent("(a=1)");
210 a5.get("/a").urlEnc().run().assertContent("a=1");
211 }
212
213
214
215
216
217 public static class A6 extends BasicRestServlet {
218 @RestGet
219 @Bean(on="org.apache.juneau.rest.annotation.RestOp_BeanConfig_Test$X1", p="a")
220 public Object a() {
221 return new X1().init();
222 }
223 }
224
225 @Test void a06_bpi_fullyQualifiedClassNames() throws Exception {
226 var a6 = MockRestClient.build(A6.class);
227 a6.get("/a").json().run().assertContent("{\"a\":1}");
228 a6.get("/a").xml().run().assertContent().isContains("<object><a>1</a></object>");
229 a6.get("/a").html().run().assertContent().isContains("<table><tr><td>a</td><td>1</td></tr></table>");
230 a6.get("/a").uon().run().assertContent("(a=1)");
231 a6.get("/a").urlEnc().run().assertContent("a=1");
232 }
233
234
235
236
237
238 public static class A7 extends BasicRestServlet {
239 @RestGet
240 @Bean(on="MyBean", p="a")
241 public Object a() {
242
243 return new X1().init();
244 }
245 @RestGet
246 @Bean(on="MyBean", p="a")
247 public Object b() {
248
249 return new X1().init();
250 }
251 }
252
253 @Test void a07_bpi_negativeMatching() throws Exception {
254 var a7 = MockRestClient.build(A7.class);
255 a7.get("/a").json().run().assertContent("{\"a\":1,\"_b\":\"foo\"}");
256 a7.get("/a").xml().run().assertContent().isContains("<object><a>1</a><_b>foo</_b></object>");
257 a7.get("/a").html().run().assertContent().isContains("<table><tr><td>a</td><td>1</td></tr><tr><td>_b</td><td>foo</td></tr></table>");
258 a7.get("/a").uon().run().assertContent("(a=1,_b=foo)");
259 a7.get("/a").urlEnc().run().assertContent("a=1&_b=foo");
260 a7.get("/b").json().run().assertContent("{\"a\":1,\"_b\":\"foo\"}");
261 a7.get("/b").xml().run().assertContent().isContains("<object><a>1</a><_b>foo</_b></object>");
262 a7.get("/b").html().run().assertContent().isContains("<table><tr><td>a</td><td>1</td></tr><tr><td>_b</td><td>foo</td></tr></table>");
263 a7.get("/b").uon().run().assertContent("(a=1,_b=foo)");
264 a7.get("/b").urlEnc().run().assertContent("a=1&_b=foo");
265 }
266
267
268
269
270
271 public static class X1 {
272 public int a;
273 @Beanp("_b") public String b;
274
275 X1 init() {
276 a = 1;
277 b = "foo";
278 return this;
279 }
280 }
281
282 @Bean(properties="_b,a")
283 public static class X2 {
284 public int a;
285 @Beanp("_b") public String b;
286
287 X2 init() {
288 a = 1;
289 b = "foo";
290 return this;
291 }
292 }
293 }