You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@juneau.apache.org by ja...@apache.org on 2017/09/08 23:28:20 UTC
[27/33] incubator-juneau git commit: Microservice should be in it's
own group.
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/750916a9/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/QueryResource.java
----------------------------------------------------------------------
diff --git a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/QueryResource.java b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/QueryResource.java
new file mode 100644
index 0000000..db470ac
--- /dev/null
+++ b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/QueryResource.java
@@ -0,0 +1,63 @@
+// ***************************************************************************************************************************
+// * 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.test;
+
+import org.apache.juneau.*;
+import org.apache.juneau.rest.*;
+import org.apache.juneau.rest.annotation.*;
+
+/**
+ * JUnit automated testcase resource.
+ */
+@RestResource(
+ path="/testQuery"
+)
+public class QueryResource extends RestServletDefault {
+ private static final long serialVersionUID = 1L;
+
+ //====================================================================================================
+ // Default values.
+ //====================================================================================================
+
+ @RestMethod(name="GET", path="/defaultQuery", defaultQuery={"f1:1","f2=2"," f3 : 3 "})
+ public ObjectMap defaultQuery(RequestQuery query) {
+ return new ObjectMap()
+ .append("f1", query.getString("f1"))
+ .append("f2", query.getString("f2"))
+ .append("f3", query.getString("f3"));
+ }
+
+ @RestMethod(name="GET", path="/annotatedQuery")
+ public ObjectMap annotatedQuery(@Query("f1") String f1, @Query("f2") String f2, @Query("f3") String f3) {
+ return new ObjectMap()
+ .append("f1", f1)
+ .append("f2", f2)
+ .append("f3", f3);
+ }
+
+ @RestMethod(name="GET", path="/annotatedQueryDefault")
+ public ObjectMap annotatedQueryDefault(@Query(value="f1",def="1") String f1, @Query(value="f2",def="2") String f2, @Query(value="f3",def="3") String f3) {
+ return new ObjectMap()
+ .append("f1", f1)
+ .append("f2", f2)
+ .append("f3", f3);
+ }
+
+ @RestMethod(name="GET", path="/annotatedAndDefaultQuery", defaultQuery={"f1:1","f2=2"," f3 : 3 "})
+ public ObjectMap annotatedAndDefaultQuery(@Query(value="f1",def="4") String f1, @Query(value="f2",def="5") String f2, @Query(value="f3",def="6") String f3) {
+ return new ObjectMap()
+ .append("f1", f1)
+ .append("f2", f2)
+ .append("f3", f3);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/750916a9/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/RequestBeanProxyResource.java
----------------------------------------------------------------------
diff --git a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/RequestBeanProxyResource.java b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/RequestBeanProxyResource.java
new file mode 100644
index 0000000..eed0679
--- /dev/null
+++ b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/RequestBeanProxyResource.java
@@ -0,0 +1,50 @@
+// ***************************************************************************************************************************
+// * 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.test;
+
+
+import java.io.*;
+
+import org.apache.juneau.microservice.*;
+import org.apache.juneau.rest.*;
+import org.apache.juneau.rest.annotation.*;
+
+/**
+ * Validates the functionality of <ja>@RequestBeans</ja>.
+ */
+@RestResource(
+ path="/testRequestBeanProxy"
+)
+@SuppressWarnings("serial")
+public class RequestBeanProxyResource extends ResourceJena {
+
+ @RestMethod(name="GET", path="/echoQuery")
+ public Reader echoQuery(RestRequest req) throws Exception {
+ return new StringReader(req.getQuery().toString(true));
+ }
+
+ @RestMethod(name="POST", path="/echoFormData")
+ public Reader echoFormData(RestRequest req) throws Exception {
+ return new StringReader(req.getFormData().toString(true));
+ }
+
+ @RestMethod(name="GET", path="/echoHeaders")
+ public Reader echoHeaders(RestRequest req) throws Exception {
+ return new StringReader(req.getHeaders().subset("a,b,c,d,e,f,g,h,i,a1,a2,a3,a4,b1,b2,b3,b4,c1,c2,c3,c4").toString(true));
+ }
+
+ @RestMethod(name="GET", path="/echoPath/*")
+ public Reader echoPath(RestRequest req) throws Exception {
+ return new StringReader(req.getPathMatch().getRemainder());
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/750916a9/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/RestClient2Resource.java
----------------------------------------------------------------------
diff --git a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/RestClient2Resource.java b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/RestClient2Resource.java
new file mode 100644
index 0000000..5aa04b9
--- /dev/null
+++ b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/RestClient2Resource.java
@@ -0,0 +1,36 @@
+// ***************************************************************************************************************************
+// * 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.test;
+
+import java.io.*;
+
+import org.apache.juneau.rest.*;
+import org.apache.juneau.rest.annotation.*;
+
+/**
+ * JUnit automated testcase resource.
+ */
+@RestResource(
+ path="/testRestClient"
+)
+public class RestClient2Resource extends RestServletDefault {
+ private static final long serialVersionUID = 1L;
+
+ //====================================================================================================
+ // Echo response
+ //====================================================================================================
+ @RestMethod(name="POST", path="/")
+ public Reader test1(RestRequest req) throws Exception {
+ return new StringReader(req.getBody().asString());
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/750916a9/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/RestHooksInitResource.java
----------------------------------------------------------------------
diff --git a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/RestHooksInitResource.java b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/RestHooksInitResource.java
new file mode 100644
index 0000000..4a85c2c
--- /dev/null
+++ b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/RestHooksInitResource.java
@@ -0,0 +1,274 @@
+// ***************************************************************************************************************************
+// * 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.test;
+
+import static org.apache.juneau.rest.annotation.HookEvent.*;
+
+import java.util.*;
+
+import javax.servlet.*;
+
+import org.apache.juneau.rest.*;
+import org.apache.juneau.rest.annotation.*;
+
+/**
+ * Validates the behavior of the @RestHook(INIT/POST_INIT/POST_INIT_CHILD_FIRST) annotations.
+ */
+@RestResource(
+ path="/testRestHooksInit",
+ children={
+ RestHooksInitResource.Super.class,
+ RestHooksInitResource.Sub.class
+ }
+)
+public class RestHooksInitResource extends RestServletDefault {
+ private static final long serialVersionUID = 1L;
+
+ @RestResource(
+ path="/super"
+ )
+ public static class Super extends RestServletDefault {
+ private static final long serialVersionUID = 1L;
+
+ protected List<String> init = new ArrayList<String>();
+ protected List<String> postInit = new ArrayList<String>();
+ protected List<String> postInitChildFirst = new ArrayList<String>();
+
+ @RestHook(INIT)
+ public void init1c(RestConfig config) {
+ init.add("super-1c");
+ }
+
+ @RestHook(INIT)
+ public void init1a(ServletConfig config) {
+ init.add("super-1a");
+ }
+
+ @RestHook(INIT)
+ public void init1b() {
+ init.add("super-1b");
+ }
+
+ @RestHook(INIT)
+ public void init2a() {
+ init.add("super-2a");
+ }
+
+ @RestHook(POST_INIT)
+ public void postInit1c(RestContext context) {
+ postInit.add("super-1c");
+ }
+
+ @RestHook(POST_INIT)
+ public void postInit1a(RestContext context) {
+ postInit.add("super-1a");
+ }
+
+ @RestHook(POST_INIT)
+ public void postInit1b() {
+ postInit.add("super-1b");
+ }
+
+ @RestHook(POST_INIT)
+ public void postInit2a() {
+ postInit.add("super-2a");
+ }
+
+ @RestHook(POST_INIT_CHILD_FIRST)
+ public void postInitChildFirst1c(RestContext context) {
+ postInitChildFirst.add("super-1c");
+ }
+
+ @RestHook(POST_INIT_CHILD_FIRST)
+ public void postInitChildFirst1a(RestContext context) {
+ postInitChildFirst.add("super-1a");
+ }
+
+ @RestHook(POST_INIT_CHILD_FIRST)
+ public void postInitChildFirst1b() {
+ postInitChildFirst.add("super-1b");
+ }
+
+ @RestHook(POST_INIT_CHILD_FIRST)
+ public void postInitChildFirst2a() {
+ postInitChildFirst.add("super-2a");
+ }
+
+ @RestMethod(name="GET", path="/init")
+ public List<String> getInitEvents() {
+ return init;
+ }
+
+ @RestMethod(name="GET", path="/postInit")
+ public List<String> getPostInitEvents() {
+ return postInit;
+ }
+
+ @RestMethod(name="GET", path="/postInitChildFirst")
+ public List<String> getPostInitChildFirstEvents() {
+ return postInitChildFirst;
+ }
+ }
+
+ @RestResource(
+ path="/sub",
+ children={
+ Child.class
+ }
+ )
+ public static class Sub extends Super {
+ private static final long serialVersionUID = 1L;
+
+ protected static String postInitOrderTest;
+ protected static String postInitChildFirstOrderTest;
+
+ @Override
+ @RestHook(INIT)
+ public void init1c(RestConfig config) {
+ init.add("sub-1c");
+ }
+
+ @Override
+ @RestHook(INIT)
+ public void init1a(ServletConfig config) {
+ init.add("sub-1a");
+ }
+
+ @Override
+ @RestHook(INIT)
+ public void init1b() {
+ init.add("sub-1b");
+ }
+
+ @RestHook(INIT)
+ public void init2b() {
+ init.add("sub-2b");
+ }
+
+ @Override
+ @RestHook(POST_INIT)
+ public void postInit1c(RestContext context) {
+ postInit.add("sub-1c");
+ }
+
+ @Override
+ @RestHook(POST_INIT)
+ public void postInit1a(RestContext context) {
+ postInit.add("sub-1a");
+ }
+
+ @Override
+ @RestHook(POST_INIT)
+ public void postInit1b() {
+ postInit.add("sub-1b");
+ }
+
+ @RestHook(POST_INIT)
+ public void postInit2b() {
+ postInit.add("sub-2b");
+ }
+
+ @Override
+ @RestHook(POST_INIT_CHILD_FIRST)
+ public void postInitChildFirst1c(RestContext context) {
+ postInitChildFirst.add("sub-1c");
+ }
+
+ @Override
+ @RestHook(POST_INIT_CHILD_FIRST)
+ public void postInitChildFirst1a(RestContext context) {
+ postInitChildFirst.add("sub-1a");
+ }
+
+ @Override
+ @RestHook(POST_INIT_CHILD_FIRST)
+ public void postInitChildFirst1b() {
+ postInitChildFirst.add("sub-1b");
+ }
+
+ @RestHook(POST_INIT_CHILD_FIRST)
+ public void postInitChildFirst2b() {
+ postInitChildFirst.add("sub-2b");
+ }
+
+ @RestHook(POST_INIT)
+ public void postInitOrderTestSub() {
+ postInitOrderTest = "PARENT";
+ }
+
+ @RestHook(POST_INIT_CHILD_FIRST)
+ public void postInitChildFirstOrderTestSub() {
+ postInitChildFirstOrderTest = "PARENT";
+ }
+
+ @RestMethod(name="GET", path="/postInitOrder")
+ public String postInitOrderTest() {
+ return postInitOrderTest;
+ }
+
+ @RestMethod(name="GET", path="/postInitChildFirstOrder")
+ public String postInitChildFirstOrderTest() {
+ return postInitChildFirstOrderTest;
+ }
+ }
+
+ @RestResource(
+ path="/child"
+ )
+ public static class Child extends Super {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ @RestHook(INIT)
+ public void init1c(RestConfig config) {
+ init.add("child-1c");
+ }
+
+ @RestHook(INIT)
+ public void init2b() {
+ init.add("child-2b");
+ }
+
+ @Override
+ @RestHook(POST_INIT)
+ public void postInit1c(RestContext context) {
+ postInit.add("child-1c");
+ }
+
+ @RestHook(POST_INIT)
+ public void postInit2b() {
+ postInit.add("child-2b");
+ }
+
+ @Override
+ @RestHook(POST_INIT_CHILD_FIRST)
+ public void postInitChildFirst1c(RestContext context) {
+ postInitChildFirst.add("child-1c");
+ }
+
+ @RestHook(POST_INIT_CHILD_FIRST)
+ public void postInitChildFirst2b() {
+ postInitChildFirst.add("child-2b");
+ }
+
+ @RestHook(POST_INIT)
+ public void postInitOrderTestSub() {
+ Sub.postInitOrderTest = "CHILD";
+ }
+
+ @RestHook(POST_INIT_CHILD_FIRST)
+ public void postInitChildFirstOrderTestSub() {
+ Sub.postInitChildFirstOrderTest = "CHILD";
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/750916a9/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/RestHooksResource.java
----------------------------------------------------------------------
diff --git a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/RestHooksResource.java b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/RestHooksResource.java
new file mode 100644
index 0000000..0597272
--- /dev/null
+++ b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/RestHooksResource.java
@@ -0,0 +1,189 @@
+// ***************************************************************************************************************************
+// * 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.test;
+
+import static org.apache.juneau.rest.annotation.HookEvent.*;
+
+import java.util.*;
+
+import javax.servlet.http.*;
+
+import org.apache.juneau.http.*;
+import org.apache.juneau.rest.*;
+import org.apache.juneau.rest.annotation.*;
+import org.apache.juneau.utils.*;
+
+/**
+ * Validates the behavior of the @RestHook(START/PRE/POST) annotations.
+ */
+@RestResource(
+ path="/testRestHooks",
+ children={
+ RestHooksResource.Start.class,
+ RestHooksResource.Pre.class,
+ RestHooksResource.Post.class,
+ }
+)
+public class RestHooksResource extends RestServletDefault {
+ private static final long serialVersionUID = 1L;
+
+ @RestResource(
+ path="/start"
+ )
+ public static class Start extends StartParent {
+ private static final long serialVersionUID = 1L;
+
+ private boolean start3Called;
+
+ @RestHook(START_CALL)
+ public void start3() {
+ start3Called = true;
+ }
+
+ @RestHook(START_CALL)
+ public void start4(HttpServletRequest req, HttpServletResponse res) {
+ res.setHeader("start3-called", ""+start3Called);
+ start3Called = false;
+ if (res.getHeader("start4-called") != null)
+ throw new RuntimeException("start4 called multiple times.");
+ res.setHeader("start4-called", "true");
+ }
+
+ @RestMethod(path="/")
+ public Map<String,Object> getHeaders(RestRequest req, RestResponse res) {
+ return new AMap<String,Object>()
+ .append("1", res.getHeader("start1-called"))
+ .append("2", res.getHeader("start2-called"))
+ .append("3", res.getHeader("start3-called"))
+ .append("4", res.getHeader("start4-called"));
+ }
+ }
+
+ public static class StartParent extends RestServletDefault {
+ private static final long serialVersionUID = 1L;
+
+ private boolean start1Called;
+
+ @RestHook(START_CALL)
+ public void start1() {
+ start1Called = true;
+ }
+
+ @RestHook(START_CALL)
+ public void start2(HttpServletRequest req, HttpServletResponse res) {
+ res.setHeader("start1-called", ""+start1Called);
+ start1Called = false;
+ if (res.getHeader("start2-called") != null)
+ throw new RuntimeException("start2 called multiple times.");
+ res.setHeader("start2-called", "true");
+ }
+ }
+
+ @RestResource(
+ path="/pre"
+ )
+ public static class Pre extends PreParent {
+ private static final long serialVersionUID = 1L;
+
+ private boolean pre3Called;
+
+ @RestHook(PRE_CALL)
+ public void pre3() {
+ pre3Called = true;
+ }
+
+ @RestHook(PRE_CALL)
+ public void pre4(HttpServletRequest req, HttpServletResponse res) {
+ res.setHeader("pre3-called", ""+pre3Called);
+ pre3Called = false;
+ if (res.getHeader("pre4-called") != null)
+ throw new RuntimeException("pre4 called multiple times.");
+ res.setHeader("pre4-called", "true");
+ }
+
+ @RestMethod(path="/")
+ public Map<String,Object> getHeaders(RestRequest req, RestResponse res) {
+ return new AMap<String,Object>()
+ .append("1", res.getHeader("pre1-called"))
+ .append("2", res.getHeader("pre2-called"))
+ .append("3", res.getHeader("pre3-called"))
+ .append("4", res.getHeader("pre4-called"));
+ }
+ }
+
+ public static class PreParent extends RestServletDefault {
+ private static final long serialVersionUID = 1L;
+
+ private boolean pre1Called;
+
+ @RestHook(PRE_CALL)
+ public void pre1() {
+ pre1Called = true;
+ }
+
+ @RestHook(PRE_CALL)
+ public void pre2(Accept accept, RestRequest req, RestResponse res) {
+ res.setHeader("pre1-called", ""+pre1Called);
+ pre1Called = false;
+ if (res.getHeader("pre2-called") != null)
+ throw new RuntimeException("pre2 called multiple times.");
+ res.setHeader("pre2-called", "true");
+ }
+ }
+
+ @RestResource(
+ path="/post"
+ )
+ public static class Post extends PostParent {
+ private static final long serialVersionUID = 1L;
+ private boolean post3Called;
+
+ @RestHook(POST_CALL)
+ public void post3() {
+ post3Called = true;
+ }
+
+ @RestHook(POST_CALL)
+ public void post4(HttpServletRequest req, HttpServletResponse res) {
+ res.setHeader("post3-called", ""+post3Called);
+ post3Called = false;
+ if (res.getHeader("post4-called") != null)
+ throw new RuntimeException("post4 called multiple times.");
+ res.setHeader("post4-called", "true");
+ }
+
+ @RestMethod(path="/")
+ public String doGet() {
+ return "OK";
+ }
+ }
+
+ public static class PostParent extends RestServletDefault {
+ private static final long serialVersionUID = 1L;
+ private boolean post1Called;
+
+ @RestHook(POST_CALL)
+ public void post1() {
+ post1Called = true;
+ }
+
+ @RestHook(POST_CALL)
+ public void post2(Accept accept, RestRequest req, RestResponse res) {
+ res.setHeader("post1-called", ""+post1Called);
+ post1Called = false;
+ if (res.getHeader("post2-called") != null)
+ throw new RuntimeException("post2 called multiple times.");
+ res.setHeader("post2-called", "true");
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/750916a9/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/Root.java
----------------------------------------------------------------------
diff --git a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/Root.java b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/Root.java
new file mode 100644
index 0000000..a7f51e1
--- /dev/null
+++ b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/Root.java
@@ -0,0 +1,84 @@
+// ***************************************************************************************************************************
+// * 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.test;
+
+import org.apache.juneau.microservice.resources.*;
+import org.apache.juneau.rest.*;
+import org.apache.juneau.rest.annotation.*;
+import org.apache.juneau.rest.labels.*;
+
+@RestResource(
+ path="/",
+ children={
+ AcceptCharsetResource.class,
+ BeanContextPropertiesResource.class,
+ BpiResource.class,
+ CallbackStringsResource.class,
+ CharsetEncodingsResource.class,
+ ClientFuturesResource.class,
+ ClientVersionResource.class,
+ ConfigResource.class,
+ ContentResource.class,
+ DefaultContentTypesResource.class,
+ ErrorConditionsResource.class,
+ TransformsResource.class,
+ FormDataResource.class,
+ GroupsResource.class,
+ GzipResource.TestGzipOff.class,
+ GzipResource.TestGzipOn.class,
+ HeadersResource.class,
+ HtmlDocResource.class,
+ HtmlDocLinksResource.class,
+ InheritanceResource.TestEncoders.class,
+ InheritanceResource.TestTransforms.class,
+ InheritanceResource.TestParsers.class,
+ InheritanceResource.TestProperties.class,
+ InheritanceResource.TestSerializers.class,
+ InterfaceProxyResource.class,
+ LargePojosResource.class,
+ MessagesResource.Messages2Resource.class,
+ MessagesResource.class,
+ NlsResource.class,
+ NlsPropertyResource.class,
+ NoParserInputResource.class,
+ OnPostCallResource.class,
+ OnPreCallResource.class,
+ OptionsWithoutNlsResource.class,
+ OverlappingMethodsResource.class,
+ ParamsResource.class,
+ ParsersResource.class,
+ PathResource.class,
+ PathsResource.class,
+ PathVariablesResource.class,
+ PropertiesResource.class,
+ QueryResource.class,
+ RequestBeanProxyResource.class,
+ RestClient2Resource.class,
+ RestHooksInitResource.class,
+ RestHooksResource.class,
+ SerializersResource.class,
+ StaticFilesResource.class,
+ ThirdPartyProxyResource.class,
+ UrisResource.class,
+ UrlContentResource.class,
+ ShutdownResource.class
+ }
+)
+public class Root extends RestServletDefault {
+ private static final long serialVersionUID = 1L;
+
+ @RestMethod(name="GET", path="/")
+ public ChildResourceDescriptions doGet(RestRequest req) {
+ return new ChildResourceDescriptions(getContext(), req);
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/750916a9/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/SerializersResource.java
----------------------------------------------------------------------
diff --git a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/SerializersResource.java b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/SerializersResource.java
new file mode 100644
index 0000000..21b1f37
--- /dev/null
+++ b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/SerializersResource.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.test;
+
+import static org.apache.juneau.rest.annotation.Inherit.*;
+
+import org.apache.juneau.*;
+import org.apache.juneau.rest.*;
+import org.apache.juneau.rest.annotation.*;
+import org.apache.juneau.serializer.*;
+
+/**
+ * JUnit automated testcase resource.
+ */
+@RestResource(
+ path="/testSerializers",
+ serializers=SerializersResource.TestSerializerA.class
+)
+public class SerializersResource extends RestServletDefault {
+ private static final long serialVersionUID = 1L;
+
+ public static class TestSerializerA extends WriterSerializer {
+
+ public TestSerializerA(PropertyStore propertyStore) {
+ super(propertyStore, "text/a");
+ }
+
+ @Override /* Serializer */
+ public WriterSerializerSession createSession(SerializerSessionArgs args) {
+ return new WriterSerializerSession(args) {
+
+ @Override /* SerializerSession */
+ protected void doSerialize(SerializerPipe out, Object o) throws Exception {
+ out.getWriter().write("text/a - " + o);
+ }
+ };
+ }
+ }
+
+ public static class TestSerializerB extends WriterSerializer {
+
+ public TestSerializerB(PropertyStore propertyStore) {
+ super(propertyStore, "text/b");
+ }
+
+ @Override /* Serializer */
+ public WriterSerializerSession createSession(SerializerSessionArgs args) {
+ return new WriterSerializerSession(args) {
+
+ @Override /* SerializerSession */
+ protected void doSerialize(SerializerPipe out, Object o) throws Exception {
+ out.getWriter().write("text/b - " + o);
+ }
+ };
+ }
+ }
+
+ //====================================================================================================
+ // Serializer defined on class.
+ //====================================================================================================
+ @RestMethod(name="GET", path="/testSerializerOnClass")
+ public String testSerializerOnClass() {
+ return "test1";
+ }
+
+ //====================================================================================================
+ // Serializer defined on method.
+ //====================================================================================================
+ @RestMethod(name="GET", path="/testSerializerOnMethod", serializers=TestSerializerB.class)
+ public String testSerializerOnMethod() {
+ return "test2";
+ }
+
+ //====================================================================================================
+ // Serializer overridden on method.
+ //====================================================================================================
+ @RestMethod(name="GET", path="/testSerializerOverriddenOnMethod", serializers={TestSerializerB.class,TestSerializerC.class}, serializersInherit=SERIALIZERS)
+ public String testSerializerOverriddenOnMethod() {
+ return "test3";
+ }
+
+ public static class TestSerializerC extends WriterSerializer {
+
+ public TestSerializerC(PropertyStore propertyStore) {
+ super(propertyStore, "text/a");
+ }
+
+ @Override /* Serializer */
+ public WriterSerializerSession createSession(SerializerSessionArgs args) {
+ return new WriterSerializerSession(args) {
+
+ @Override /* SerializerSession */
+ protected void doSerialize(SerializerPipe out, Object o) throws Exception {
+ out.getWriter().write("text/c - " + o);
+ }
+ };
+ }
+ }
+
+ //====================================================================================================
+ // Serializer with different Accept than Content-Type.
+ //====================================================================================================
+ @RestMethod(name="GET", path="/testSerializerWithDifferentMediaTypes", serializers={TestSerializerD.class}, serializersInherit=SERIALIZERS)
+ public String testSerializerWithDifferentMediaTypes() {
+ return "test4";
+ }
+
+ public static class TestSerializerD extends WriterSerializer {
+
+ public TestSerializerD(PropertyStore propertyStore) {
+ super(propertyStore, "text/d", "text/a", "text/d");
+ }
+
+ @Override /* Serializer */
+ public WriterSerializerSession createSession(SerializerSessionArgs args) {
+ return new WriterSerializerSession(args) {
+
+ @Override /* SerializerSession */
+ protected void doSerialize(SerializerPipe out, Object o) throws Exception {
+ out.getWriter().write("text/d - " + o);
+ }
+ };
+ }
+ }
+
+ //====================================================================================================
+ // Check for valid 406 error response.
+ //====================================================================================================
+ @RestMethod(name="GET", path="/test406")
+ public String test406() {
+ return "test406";
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/750916a9/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/StaticFilesResource.java
----------------------------------------------------------------------
diff --git a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/StaticFilesResource.java b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/StaticFilesResource.java
new file mode 100644
index 0000000..ba9d895
--- /dev/null
+++ b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/StaticFilesResource.java
@@ -0,0 +1,36 @@
+// ***************************************************************************************************************************
+// * 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.test;
+
+import org.apache.juneau.rest.*;
+import org.apache.juneau.rest.annotation.*;
+
+/**
+ * JUnit automated testcase resource.
+ */
+@RestResource(
+ path="/testStaticFiles",
+ staticFiles="{xdocs:'xdocs'}"
+)
+public class StaticFilesResource extends RestServlet {
+ private static final long serialVersionUID = 1L;
+
+ //====================================================================================================
+ // Tests the @RestResource(staticFiles) annotation.
+ //====================================================================================================
+ @RestMethod(name="GET", path="/*")
+ public String testXdocs() {
+ return null;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/750916a9/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/TestUtils.java
----------------------------------------------------------------------
diff --git a/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/TestUtils.java b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/TestUtils.java
new file mode 100644
index 0000000..4fab49a
--- /dev/null
+++ b/juneau-microservice/juneau-microservice-test/src/main/java/org/apache/juneau/rest/test/TestUtils.java
@@ -0,0 +1,98 @@
+// ***************************************************************************************************************************
+// * 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.test;
+
+import static org.apache.juneau.internal.StringUtils.*;
+
+import java.util.*;
+
+import org.apache.juneau.json.*;
+import org.apache.juneau.rest.client.*;
+import org.apache.juneau.serializer.*;
+import org.apache.juneau.transforms.*;
+import org.junit.Assert;
+import org.junit.ComparisonFailure;
+
+import junit.framework.*;
+
+public class TestUtils {
+
+ private static JsonSerializer js2 = new JsonSerializerBuilder()
+ .simple()
+ .pojoSwaps(IteratorSwap.class, EnumerationSwap.class)
+ .build();
+
+ /**
+ * Assert that the object equals the specified string after running it through JsonSerializer.DEFAULT_LAX.toString().
+ */
+ public static void assertObjectEquals(String s, Object o) {
+ assertObjectEquals(s, o, js2);
+ }
+
+ /**
+ * Assert that the object is an instance of the specified class.
+ */
+ public static void assertClass(Class<?> c, Object o) {
+ Assert.assertEquals(c, o == null ? null : o.getClass());
+ }
+
+ /**
+ * Assert that the object equals the specified string after running it through ws.toString().
+ */
+ public static void assertObjectEquals(String s, Object o, WriterSerializer ws) {
+ if ("xxx".equals(s))
+ System.err.println("Actual=" + ws.toString(o));
+ Assert.assertEquals(s, ws.toString(o));
+ }
+
+ public static void checkErrorResponse(boolean debug, RestCallException e, int status, String...contains) throws AssertionFailedError {
+ String r = e.getResponseMessage();
+ if (debug) {
+ System.err.println(r); // NOT DEBUG
+ e.printStackTrace();
+ }
+ if (status != e.getResponseCode()) {
+ dumpResponse(r, "Response status code was not correct. Expected: ''{0}''. Actual: ''{1}''", status, e.getResponseCode());
+ throw new AssertionFailedError(format("Response status code was not correct. Expected: ''{0}''. Actual: ''{1}''", status, e.getResponseCode()));
+ }
+ for (String s : contains) {
+ if (r == null || ! r.contains(s)) {
+ if (! debug)
+ dumpResponse(r, "Response did not have the following expected text: ''{0}''", s);
+ throw new AssertionFailedError(format("Response did not have the following expected text: ''{0}''", s));
+ }
+ }
+ }
+
+ private static void dumpResponse(String r, String msg, Object...args) {
+ System.err.println("*** Failure ****************************************************************************************"); // NOT DEBUG
+ System.err.println(format(msg, args));
+ System.err.println("*** Response-Start *********************************************************************************"); // NOT DEBUG
+ System.err.println(r); // NOT DEBUG
+ System.err.println("*** Response-End ***********************************************************************************"); // NOT DEBUG
+ }
+
+ public static void assertEqualsAfterSort(String expected, String actual, String msg, Object...args) {
+ String[] e = expected.trim().split("\n"), a = actual.trim().split("\n");
+
+ if (e.length != a.length)
+ throw new ComparisonFailure(format(msg, args), expected, actual);
+
+ Arrays.sort(e);
+ Arrays.sort(a);
+
+ for (int i = 0; i < e.length; i++)
+ if (! e[i].equals(a[i]))
+ throw new ComparisonFailure(format(msg, args), expected, actual);
+ }
+}