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 2018/09/16 21:34:54 UTC

[juneau] branch master updated: Bug in SwaggerGenerator with bean with read-only properties.

This is an automated email from the ASF dual-hosted git repository.

jamesbognar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/juneau.git


The following commit(s) were added to refs/heads/master by this push:
     new 01ad847  Bug in SwaggerGenerator with bean with read-only properties.
01ad847 is described below

commit 01ad8471317bed020eb6b15ecdcaab4bde7bea5e
Author: JamesBognar <ja...@apache.org>
AuthorDate: Sun Sep 16 17:34:39 2018 -0400

    Bug in SwaggerGenerator with bean with read-only properties.
---
 .../org/apache/juneau/rest/BasicRestServlet.java   |  5 ++-
 .../juneau/rest/BasicRestInfoProviderTest.java     | 48 ++++++++++++++++++++++
 2 files changed, 52 insertions(+), 1 deletion(-)

diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestServlet.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestServlet.java
index 4c8f26f..92fec74 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestServlet.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestServlet.java
@@ -223,7 +223,10 @@ public abstract class BasicRestServlet extends RestServlet implements BasicRestC
 		// Shortcut for boolean properties.
 		flags={
 			// Use $ref references for bean definitions to reduce duplication in Swagger.
-			JSONSCHEMA_useBeanDefs
+			JSONSCHEMA_useBeanDefs,
+
+			// When parsing generated beans, ignore unknown properties that may only exist as getters and not setters.
+			BEAN_ignoreUnknownBeanProperties
 		}
 	)
 	public Swagger getOptions(RestRequest req) {
diff --git a/juneau-rest/juneau-rest-server/src/test/java/org/apache/juneau/rest/BasicRestInfoProviderTest.java b/juneau-rest/juneau-rest-server/src/test/java/org/apache/juneau/rest/BasicRestInfoProviderTest.java
index 2d005aa..14aac88 100644
--- a/juneau-rest/juneau-rest-server/src/test/java/org/apache/juneau/rest/BasicRestInfoProviderTest.java
+++ b/juneau-rest/juneau-rest-server/src/test/java/org/apache/juneau/rest/BasicRestInfoProviderTest.java
@@ -2286,4 +2286,52 @@ public class BasicRestInfoProviderTest {
 	public static class Foo {
 		public int id;
 	}
+
+	//=================================================================================================================
+	// Example bean with getter-only property.
+	//=================================================================================================================
+
+	@RestResource
+	public static class P extends BasicRestServlet {
+		private static final long serialVersionUID = 1L;
+
+		@RestMethod(name=GET,path="/")
+		public P01 doFoo(@Body P01 body) {
+			return null;
+		}
+	}
+
+	public static class P01 {
+		private int f1;
+
+		public P01 setF1(int f1) {
+			this.f1 = f1;
+			return this;
+		}
+
+		public int getF1() {
+			return f1;
+		}
+
+		public int getF2() {
+			return 2;
+		}
+
+		@Example
+		public static P01 example() {
+			return new P01().setF1(1);
+		}
+	}
+
+	static MockRest p = MockRest.create(P.class);
+
+	@Test
+	public void p01_bodyWithReadOnlyProperty() throws Exception {
+		Swagger s = JsonParser.DEFAULT.parse(p.options("/").accept("application/json").execute().getBodyAsString(), Swagger.class);
+		Operation o = s.getOperation("/", "get");
+		ParameterInfo pi = o.getParameter("body", null);
+		assertEquals("{\n\tf1: 1,\n\tf2: 2\n}", pi.getExamples().get("application/json+simple"));
+		ResponseInfo ri = o.getResponse("200");
+		assertEquals("{\n\tf1: 1,\n\tf2: 2\n}", ri.getExamples().get("application/json+simple"));
+	}
 }