Repository: camel Updated Branches: refs/heads/master a465e190f -> c69f3edf6
CAMEL-9632: Allow to specify response headers in rest-dsl model for swagger to use. Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/c69f3edf Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/c69f3edf Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/c69f3edf Branch: refs/heads/master Commit: c69f3edf649b6e1a6c997c6af132bf82b4785a26 Parents: a465e19 Author: Claus Ibsen <davscl...@apache.org> Authored: Thu Feb 25 13:04:59 2016 +0100 Committer: Claus Ibsen <davscl...@apache.org> Committed: Thu Feb 25 13:04:59 2016 +0100 ---------------------------------------------------------------------- .../rest/RestOperationParamDefinition.java | 2 +- .../RestOperationResponseHeaderDefinition.java | 221 +++++++++++++++++++ .../RestOperationResponseMsgDefinition.java | 44 +++- .../org/apache/camel/model/rest/jaxb.index | 1 + .../rest/FromRestExplicitComponentTest.java | 4 +- .../camel/component/rest/FromRestGetTest.java | 7 +- .../rest/FromRestIdAndDescriptionTest.java | 4 +- .../rest/SpringFromRestConfigurationTest.xml | 4 +- .../component/rest/SpringFromRestGetTest.xml | 4 +- .../rest/SpringFromRestIdAndDescriptionTest.xml | 4 +- .../apache/camel/swagger/RestSwaggerReader.java | 105 +++++++++ .../swagger/RestSwaggerReaderDayOfWeekTest.java | 3 + .../component/rest/FromRestGetTest.java | 3 + .../rest/FromRestConfigurationTest.xml | 4 +- .../component/rest/FromRestGetTest.xml | 4 +- .../rest/FromRestIdAndDescriptionTest.xml | 4 +- 16 files changed, 403 insertions(+), 15 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/c69f3edf/camel-core/src/main/java/org/apache/camel/model/rest/RestOperationParamDefinition.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/model/rest/RestOperationParamDefinition.java b/camel-core/src/main/java/org/apache/camel/model/rest/RestOperationParamDefinition.java index 122cc03..c60db00 100644 --- a/camel-core/src/main/java/org/apache/camel/model/rest/RestOperationParamDefinition.java +++ b/camel-core/src/main/java/org/apache/camel/model/rest/RestOperationParamDefinition.java @@ -187,7 +187,7 @@ public class RestOperationParamDefinition { } /** - * Sets the Swagger Parameter list of allowable values. + * Sets the Swagger Parameter list of allowable values (enum). */ public void setAllowableValues(List<String> allowableValues) { this.allowableValues = allowableValues; http://git-wip-us.apache.org/repos/asf/camel/blob/c69f3edf/camel-core/src/main/java/org/apache/camel/model/rest/RestOperationResponseHeaderDefinition.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/model/rest/RestOperationResponseHeaderDefinition.java b/camel-core/src/main/java/org/apache/camel/model/rest/RestOperationResponseHeaderDefinition.java new file mode 100644 index 0000000..9b8dc86 --- /dev/null +++ b/camel-core/src/main/java/org/apache/camel/model/rest/RestOperationResponseHeaderDefinition.java @@ -0,0 +1,221 @@ +/** + * 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 + * <p> + * http://www.apache.org/licenses/LICENSE-2.0 + * <p> + * 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.camel.model.rest; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementWrapper; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlTransient; + +import org.apache.camel.spi.Metadata; +import org.apache.camel.util.ObjectHelper; + +/** + * To specify the rest operation response headers using Swagger. + * <p> + * This maps to the Swagger Response Header Object. + */ +@Metadata(label = "rest") +@XmlRootElement(name = "responseHeader") +@XmlAccessorType(XmlAccessType.FIELD) +public class RestOperationResponseHeaderDefinition { + + @XmlTransient + private RestOperationResponseMsgDefinition response; + + @XmlAttribute(required = true) + private String name; + + @XmlAttribute + @Metadata(defaultValue = "") + private String description; + + @XmlAttribute + @Metadata(defaultValue = "csv") + private CollectionFormat collectionFormat; + + @XmlAttribute + @Metadata(defaultValue = "string") + private String arrayType; + + @XmlAttribute + @Metadata(defaultValue = "string") + private String dataType; + + @XmlElementWrapper(name = "allowableValues") + @XmlElement(name = "value") + private List<String> allowableValues; + + public RestOperationResponseHeaderDefinition(RestOperationResponseMsgDefinition response) { + this(); + this.response = response; + } + + public RestOperationResponseHeaderDefinition() { + this.collectionFormat = CollectionFormat.csv; + this.arrayType = "string"; + this.dataType = "string"; + } + + /** + * Ends the configuration of this response message + */ + public RestOperationResponseMsgDefinition endResponseHeader() { + return response; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public CollectionFormat getCollectionFormat() { + return collectionFormat; + } + + /** + * Sets the Swagger Parameter collection format. + */ + public void setCollectionFormat(CollectionFormat collectionFormat) { + this.collectionFormat = collectionFormat; + } + + + public String getArrayType() { + return arrayType; + } + + /** + * Sets the Swagger Parameter array type. + * Required if data type is "array". Describes the type of items in the array. + */ + public void setArrayType(String arrayType) { + this.arrayType = arrayType; + } + + public String getDataType() { + return dataType; + } + + /** + * Sets the Swagger header data type. + */ + public void setDataType(String dataType) { + this.dataType = dataType; + } + + public List<String> getAllowableValues() { + if (allowableValues != null) { + return allowableValues; + } + + return new ArrayList<String>(); + } + + /** + * Sets the Swagger Parameter list of allowable values. + */ + public void setAllowableValues(List<String> allowableValues) { + this.allowableValues = allowableValues; + } + + /** + * Name of the parameter. + * <p> + * This option is mandatory. + */ + public RestOperationResponseHeaderDefinition name(String name) { + setName(name); + return this; + } + + /** + * Description of the parameter. + */ + public RestOperationResponseHeaderDefinition description(String name) { + setDescription(name); + return this; + } + + /** + * Sets the collection format. + */ + public RestOperationResponseHeaderDefinition collectionFormat(CollectionFormat collectionFormat) { + setCollectionFormat(collectionFormat); + return this; + } + + /** + * The data type of the array data type + */ + public RestOperationResponseHeaderDefinition arrayType(String arrayType) { + setArrayType(arrayType); + return this; + } + + /** + * The data type of the header such as <tt>string</tt>, <tt>integer</tt>, <tt>boolean</tt> + */ + public RestOperationResponseHeaderDefinition dataType(String type) { + setDataType(type); + return this; + } + + /** + * Allowed values of the header when its an enum type + */ + public RestOperationResponseHeaderDefinition allowableValues(List<String> allowableValues) { + setAllowableValues(allowableValues); + return this; + } + + /** + * Allowed values of the parameter when its an enum type + */ + public RestOperationResponseHeaderDefinition allowableValues(String... allowableValues) { + setAllowableValues(Arrays.asList(allowableValues)); + return this; + } + + /** + * Ends the configuration of this header + */ + public RestOperationResponseMsgDefinition endHeader() { + // name and type is mandatory + ObjectHelper.notEmpty(name, "name"); + ObjectHelper.notEmpty(dataType, "dataType"); + return response; + } + +} http://git-wip-us.apache.org/repos/asf/camel/blob/c69f3edf/camel-core/src/main/java/org/apache/camel/model/rest/RestOperationResponseMsgDefinition.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/model/rest/RestOperationResponseMsgDefinition.java b/camel-core/src/main/java/org/apache/camel/model/rest/RestOperationResponseMsgDefinition.java index 7705e96..ee7a3c5 100644 --- a/camel-core/src/main/java/org/apache/camel/model/rest/RestOperationResponseMsgDefinition.java +++ b/camel-core/src/main/java/org/apache/camel/model/rest/RestOperationResponseMsgDefinition.java @@ -5,9 +5,9 @@ * 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 - * + * <p> + * http://www.apache.org/licenses/LICENSE-2.0 + * <p> * 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. @@ -16,13 +16,17 @@ */ package org.apache.camel.model.rest; +import java.util.ArrayList; +import java.util.List; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlTransient; import org.apache.camel.spi.Metadata; +import org.apache.camel.util.ObjectHelper; /** * To specify the rest operation response messages using Swagger. @@ -48,15 +52,21 @@ public class RestOperationResponseMsgDefinition { @Metadata(defaultValue = "") private String responseModel; + @XmlElement(name = "header") + private List<RestOperationResponseHeaderDefinition> headers; + public RestOperationResponseMsgDefinition(VerbDefinition verb) { + this(); this.verb = verb; } public RestOperationResponseMsgDefinition() { + this.code = "200"; + this.message = "success"; } public String getCode() { - return code != null ? code : "200"; + return code; } public void setCode(String code) { @@ -72,13 +82,21 @@ public class RestOperationResponseMsgDefinition { } public String getMessage() { - return message != null ? message : "success"; + return message; } public void setMessage(String message) { this.message = message; } + public List<RestOperationResponseHeaderDefinition> getHeaders() { + return headers; + } + + public void setHeaders(List<RestOperationResponseHeaderDefinition> headers) { + this.headers = headers; + } + /** * The response code such as a HTTP status code. */ @@ -113,9 +131,25 @@ public class RestOperationResponseMsgDefinition { } /** + * Adds a response header + */ + public RestOperationResponseHeaderDefinition header(String name) { + if (headers == null) { + headers = new ArrayList<RestOperationResponseHeaderDefinition>(); + } + RestOperationResponseHeaderDefinition header = new RestOperationResponseHeaderDefinition(this); + header.setName(name); + headers.add(header); + return header; + } + + /** * Ends the configuration of this response message */ public RestDefinition endResponseMessage() { + // code and message is mandatory + ObjectHelper.notEmpty(code, "code"); + ObjectHelper.notEmpty(message, "message"); verb.getResponseMsgs().add(this); return verb.getRest(); } http://git-wip-us.apache.org/repos/asf/camel/blob/c69f3edf/camel-core/src/main/resources/org/apache/camel/model/rest/jaxb.index ---------------------------------------------------------------------- diff --git a/camel-core/src/main/resources/org/apache/camel/model/rest/jaxb.index b/camel-core/src/main/resources/org/apache/camel/model/rest/jaxb.index index ef0d1ac..809e195 100644 --- a/camel-core/src/main/resources/org/apache/camel/model/rest/jaxb.index +++ b/camel-core/src/main/resources/org/apache/camel/model/rest/jaxb.index @@ -28,6 +28,7 @@ RestDefinition RestHostNameResolver RestOperationParamDefinition RestOperationResponseMsgDefinition +RestOperationResponseHeaderDefinition RestParamType RestPropertyDefinition RestsDefinition http://git-wip-us.apache.org/repos/asf/camel/blob/c69f3edf/camel-core/src/test/java/org/apache/camel/component/rest/FromRestExplicitComponentTest.java ---------------------------------------------------------------------- diff --git a/camel-core/src/test/java/org/apache/camel/component/rest/FromRestExplicitComponentTest.java b/camel-core/src/test/java/org/apache/camel/component/rest/FromRestExplicitComponentTest.java index 2a13baf..44d56e8 100644 --- a/camel-core/src/test/java/org/apache/camel/component/rest/FromRestExplicitComponentTest.java +++ b/camel-core/src/test/java/org/apache/camel/component/rest/FromRestExplicitComponentTest.java @@ -41,7 +41,9 @@ public class FromRestExplicitComponentTest extends FromRestGetTest { param().type(RestParamType.query).description("header param description2").dataType("string").allowableValues("a", "b", "c", "d") .defaultValue("b").collectionFormat(CollectionFormat.multi).name("header_letter").required(false).access("acc2") .endParam() - .responseMessage().code(300).message("test msg").responseModel(Integer.class).endResponseMessage() + .responseMessage().code(300).message("test msg").responseModel(Integer.class) + .header("rate").description("Rate limit").dataType("integer").endHeader() + .endResponseMessage() .responseMessage().code("error").message("does not work").endResponseMessage() .to("direct:bye") .post().to("mock:update"); http://git-wip-us.apache.org/repos/asf/camel/blob/c69f3edf/camel-core/src/test/java/org/apache/camel/component/rest/FromRestGetTest.java ---------------------------------------------------------------------- diff --git a/camel-core/src/test/java/org/apache/camel/component/rest/FromRestGetTest.java b/camel-core/src/test/java/org/apache/camel/component/rest/FromRestGetTest.java index 35081a2..7fb9e17 100644 --- a/camel-core/src/test/java/org/apache/camel/component/rest/FromRestGetTest.java +++ b/camel-core/src/test/java/org/apache/camel/component/rest/FromRestGetTest.java @@ -81,6 +81,9 @@ public class FromRestGetTest extends ContextTestSupport { assertEquals("acc2", rest.getVerbs().get(0).getParams().get(1).getAccess()); assertEquals("300", rest.getVerbs().get(0).getResponseMsgs().get(0).getCode()); + assertEquals("rate", rest.getVerbs().get(0).getResponseMsgs().get(0).getHeaders().get(0).getName()); + assertEquals("Rate limit", rest.getVerbs().get(0).getResponseMsgs().get(0).getHeaders().get(0).getDescription()); + assertEquals("integer", rest.getVerbs().get(0).getResponseMsgs().get(0).getHeaders().get(0).getDataType()); assertEquals("error", rest.getVerbs().get(0).getResponseMsgs().get(1).getCode()); assertEquals("test msg", rest.getVerbs().get(0).getResponseMsgs().get(0).getMessage()); assertEquals(Integer.class.getCanonicalName(), rest.getVerbs().get(0).getResponseMsgs().get(0).getResponseModel()); @@ -116,7 +119,9 @@ public class FromRestGetTest extends ContextTestSupport { param().type(RestParamType.query).description("header param description2").dataType("string").allowableValues("a", "b", "c", "d") .defaultValue("b").collectionFormat(CollectionFormat.multi).name("header_letter").required(false).access("acc2") .endParam() - .responseMessage().code(300).message("test msg").responseModel(Integer.class).endResponseMessage() + .responseMessage().code(300).message("test msg").responseModel(Integer.class) + .header("rate").description("Rate limit").dataType("integer").endHeader() + .endResponseMessage() .responseMessage().code("error").message("does not work").endResponseMessage() .to("direct:bye") .post().to("mock:update"); http://git-wip-us.apache.org/repos/asf/camel/blob/c69f3edf/camel-core/src/test/java/org/apache/camel/component/rest/FromRestIdAndDescriptionTest.java ---------------------------------------------------------------------- diff --git a/camel-core/src/test/java/org/apache/camel/component/rest/FromRestIdAndDescriptionTest.java b/camel-core/src/test/java/org/apache/camel/component/rest/FromRestIdAndDescriptionTest.java index 68941b0..c857505 100644 --- a/camel-core/src/test/java/org/apache/camel/component/rest/FromRestIdAndDescriptionTest.java +++ b/camel-core/src/test/java/org/apache/camel/component/rest/FromRestIdAndDescriptionTest.java @@ -59,7 +59,9 @@ public class FromRestIdAndDescriptionTest extends FromRestGetTest { param().type(RestParamType.query).description("header param description2").dataType("string").allowableValues("a", "b", "c", "d") .defaultValue("b").collectionFormat(CollectionFormat.multi).name("header_letter").required(false).access("acc2") .endParam() - .responseMessage().code(300).message("test msg").responseModel(Integer.class).endResponseMessage() + .responseMessage().code(300).message("test msg").responseModel(Integer.class) + .header("rate").description("Rate limit").dataType("integer").endHeader() + .endResponseMessage() .responseMessage().code("error").message("does not work").endResponseMessage() .to("direct:bye") .post().description("Updates the bye message").to("mock:update"); http://git-wip-us.apache.org/repos/asf/camel/blob/c69f3edf/components/camel-spring/src/test/resources/org/apache/camel/component/rest/SpringFromRestConfigurationTest.xml ---------------------------------------------------------------------- diff --git a/components/camel-spring/src/test/resources/org/apache/camel/component/rest/SpringFromRestConfigurationTest.xml b/components/camel-spring/src/test/resources/org/apache/camel/component/rest/SpringFromRestConfigurationTest.xml index ab2f2ee..4c543c7 100644 --- a/components/camel-spring/src/test/resources/org/apache/camel/component/rest/SpringFromRestConfigurationTest.xml +++ b/components/camel-spring/src/test/resources/org/apache/camel/component/rest/SpringFromRestConfigurationTest.xml @@ -60,7 +60,9 @@ <value>d</value> </allowableValues> </param> - <responseMessage code="300" message="test msg" responseModel="java.lang.Integer"/> + <responseMessage code="300" message="test msg" responseModel="java.lang.Integer"> + <header name="rate" description="Rate limit" dataType="integer"/> + </responseMessage> <responseMessage code="error" message="does not work"/> <to uri="direct:bye"/> </get> http://git-wip-us.apache.org/repos/asf/camel/blob/c69f3edf/components/camel-spring/src/test/resources/org/apache/camel/component/rest/SpringFromRestGetTest.xml ---------------------------------------------------------------------- diff --git a/components/camel-spring/src/test/resources/org/apache/camel/component/rest/SpringFromRestGetTest.xml b/components/camel-spring/src/test/resources/org/apache/camel/component/rest/SpringFromRestGetTest.xml index 66833de..f98b41c 100644 --- a/components/camel-spring/src/test/resources/org/apache/camel/component/rest/SpringFromRestGetTest.xml +++ b/components/camel-spring/src/test/resources/org/apache/camel/component/rest/SpringFromRestGetTest.xml @@ -50,7 +50,9 @@ <value>d</value> </allowableValues> </param> - <responseMessage code="300" message="test msg" responseModel="java.lang.Integer"/> + <responseMessage code="300" message="test msg" responseModel="java.lang.Integer"> + <header name="rate" description="Rate limit" dataType="integer"/> + </responseMessage> <responseMessage code="error" message="does not work"/> <to uri="direct:bye"/> </get> http://git-wip-us.apache.org/repos/asf/camel/blob/c69f3edf/components/camel-spring/src/test/resources/org/apache/camel/component/rest/SpringFromRestIdAndDescriptionTest.xml ---------------------------------------------------------------------- diff --git a/components/camel-spring/src/test/resources/org/apache/camel/component/rest/SpringFromRestIdAndDescriptionTest.xml b/components/camel-spring/src/test/resources/org/apache/camel/component/rest/SpringFromRestIdAndDescriptionTest.xml index 5e838fd..d69d494 100644 --- a/components/camel-spring/src/test/resources/org/apache/camel/component/rest/SpringFromRestIdAndDescriptionTest.xml +++ b/components/camel-spring/src/test/resources/org/apache/camel/component/rest/SpringFromRestIdAndDescriptionTest.xml @@ -54,7 +54,9 @@ <value>d</value> </allowableValues> </param> - <responseMessage code="300" message="test msg" responseModel="java.lang.Integer"/> + <responseMessage code="300" message="test msg" responseModel="java.lang.Integer"> + <header name="rate" description="Rate limit" dataType="integer"/> + </responseMessage> <responseMessage code="error" message="does not work"/> <to uri="direct:bye"/> </get> http://git-wip-us.apache.org/repos/asf/camel/blob/c69f3edf/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerReader.java ---------------------------------------------------------------------- diff --git a/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerReader.java b/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerReader.java index 29b2e72..bc01e37 100644 --- a/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerReader.java +++ b/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerReader.java @@ -53,6 +53,7 @@ import io.swagger.models.properties.RefProperty; import io.swagger.models.properties.StringProperty; import org.apache.camel.model.rest.RestDefinition; import org.apache.camel.model.rest.RestOperationParamDefinition; +import org.apache.camel.model.rest.RestOperationResponseHeaderDefinition; import org.apache.camel.model.rest.RestOperationResponseMsgDefinition; import org.apache.camel.model.rest.RestParamType; import org.apache.camel.model.rest.VerbDefinition; @@ -303,6 +304,110 @@ public class RestSwaggerReader { response.setSchema(prop); } response.setDescription(msg.getMessage()); + + // add headers + if (msg.getHeaders() != null) { + for (RestOperationResponseHeaderDefinition header : msg.getHeaders()) { + String name = header.getName(); + String type = header.getDataType(); + if ("string".equals(type)) { + StringProperty sp = new StringProperty(); + sp.setName(name); + sp.setDescription(header.getDescription()); + if (header.getAllowableValues() != null) { + sp.setEnum(header.getAllowableValues()); + } + response.addHeader(name, sp); + } else if ("int".equals(type) || "integer".equals(type)) { + IntegerProperty ip = new IntegerProperty(); + ip.setName(name); + ip.setDescription(header.getDescription()); + + List<Integer> values; + if (!header.getAllowableValues().isEmpty()) { + values = new ArrayList<Integer>(); + for (String text : header.getAllowableValues()) { + values.add(Integer.valueOf(text)); + } + ip.setEnum(values); + } + response.addHeader(name, ip); + } else if ("long".equals(type)) { + LongProperty lp = new LongProperty(); + lp.setName(name); + lp.setDescription(header.getDescription()); + + List<Long> values; + if (!header.getAllowableValues().isEmpty()) { + values = new ArrayList<Long>(); + for (String text : header.getAllowableValues()) { + values.add(Long.valueOf(text)); + } + lp.setEnum(values); + } + response.addHeader(name, lp); + } else if ("float".equals(type)) { + FloatProperty lp = new FloatProperty(); + lp.setName(name); + lp.setDescription(header.getDescription()); + + List<Float> values; + if (!header.getAllowableValues().isEmpty()) { + values = new ArrayList<Float>(); + for (String text : header.getAllowableValues()) { + values.add(Float.valueOf(text)); + } + lp.setEnum(values); + } + response.addHeader(name, lp); + } else if ("double".equals(type)) { + DoubleProperty dp = new DoubleProperty(); + dp.setName(name); + dp.setDescription(header.getDescription()); + + List<Double> values; + if (!header.getAllowableValues().isEmpty()) { + values = new ArrayList<Double>(); + for (String text : header.getAllowableValues()) { + values.add(Double.valueOf(text)); + } + dp.setEnum(values); + } + response.addHeader(name, dp); + } else if ("boolean".equals(type)) { + BooleanProperty bp = new BooleanProperty(); + bp.setName(name); + bp.setDescription(header.getDescription()); + response.addHeader(name, bp); + } else if ("array".equals(type)) { + ArrayProperty ap = new ArrayProperty(); + ap.setName(name); + ap.setDescription(header.getDescription()); + if (header.getArrayType() != null) { + if (header.getArrayType().equalsIgnoreCase("string")) { + ap.setItems(new StringProperty()); + } + if (header.getArrayType().equalsIgnoreCase("int") || header.getArrayType().equalsIgnoreCase("integer")) { + ap.setItems(new IntegerProperty()); + } + if (header.getArrayType().equalsIgnoreCase("long")) { + ap.setItems(new LongProperty()); + } + if (header.getArrayType().equalsIgnoreCase("float")) { + ap.setItems(new FloatProperty()); + } + if (header.getArrayType().equalsIgnoreCase("double")) { + ap.setItems(new DoubleProperty()); + } + if (header.getArrayType().equalsIgnoreCase("boolean")) { + ap.setItems(new BooleanProperty()); + } + } + response.addHeader(name, ap); + } + } + } + op.addResponse(msg.getCode(), response); } http://git-wip-us.apache.org/repos/asf/camel/blob/c69f3edf/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderDayOfWeekTest.java ---------------------------------------------------------------------- diff --git a/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderDayOfWeekTest.java b/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderDayOfWeekTest.java index 01f949f..3a138cd 100644 --- a/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderDayOfWeekTest.java +++ b/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderDayOfWeekTest.java @@ -53,6 +53,7 @@ public class RestSwaggerReaderDayOfWeekTest extends CamelTestSupport { .endParam() .responseMessage() .code(200).responseModel(DayResponse.class) + .header("X-Rate-Limit-Limit").description("The number of allowed requests in the current period").dataType("integer").endHeader() .endResponseMessage() .to("log:week"); } @@ -85,6 +86,8 @@ public class RestSwaggerReaderDayOfWeekTest extends CamelTestSupport { assertTrue(json.contains("\"enum\" : [ \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\" ]")); assertTrue(json.contains("\"$ref\" : \"#/definitions/DayResponse\"")); assertTrue(json.contains("\"format\" : \"org.apache.camel.swagger.DayResponse\"")); + assertTrue(json.contains("\"X-Rate-Limit-Limit\" : {")); + assertTrue(json.contains("\"description\" : \"The number of allowed requests in the current period\"")); context.stop(); } http://git-wip-us.apache.org/repos/asf/camel/blob/c69f3edf/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/component/rest/FromRestGetTest.java ---------------------------------------------------------------------- diff --git a/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/component/rest/FromRestGetTest.java b/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/component/rest/FromRestGetTest.java index d13020f..deefa84 100644 --- a/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/component/rest/FromRestGetTest.java +++ b/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/component/rest/FromRestGetTest.java @@ -78,6 +78,9 @@ public class FromRestGetTest extends CamelBlueprintTestSupport { assertEquals("acc2", rest.getVerbs().get(0).getParams().get(1).getAccess()); assertEquals("300", rest.getVerbs().get(0).getResponseMsgs().get(0).getCode()); + assertEquals("rate", rest.getVerbs().get(0).getResponseMsgs().get(0).getHeaders().get(0).getName()); + assertEquals("Rate limit", rest.getVerbs().get(0).getResponseMsgs().get(0).getHeaders().get(0).getDescription()); + assertEquals("integer", rest.getVerbs().get(0).getResponseMsgs().get(0).getHeaders().get(0).getDataType()); assertEquals("test msg", rest.getVerbs().get(0).getResponseMsgs().get(0).getMessage()); assertEquals(Integer.class.getCanonicalName(), rest.getVerbs().get(0).getResponseMsgs().get(0).getResponseModel()); http://git-wip-us.apache.org/repos/asf/camel/blob/c69f3edf/components/camel-test-blueprint/src/test/resources/org/apache/camel/test/blueprint/component/rest/FromRestConfigurationTest.xml ---------------------------------------------------------------------- diff --git a/components/camel-test-blueprint/src/test/resources/org/apache/camel/test/blueprint/component/rest/FromRestConfigurationTest.xml b/components/camel-test-blueprint/src/test/resources/org/apache/camel/test/blueprint/component/rest/FromRestConfigurationTest.xml index b1ff47c..997186d 100644 --- a/components/camel-test-blueprint/src/test/resources/org/apache/camel/test/blueprint/component/rest/FromRestConfigurationTest.xml +++ b/components/camel-test-blueprint/src/test/resources/org/apache/camel/test/blueprint/component/rest/FromRestConfigurationTest.xml @@ -55,7 +55,9 @@ <value>d</value> </allowableValues> </param> - <responseMessage code="300" message="test msg" responseModel="java.lang.Integer"/> + <responseMessage code="300" message="test msg" responseModel="java.lang.Integer"> + <header name="rate" description="Rate limit" dataType="integer"/> + </responseMessage> <to uri="direct:bye"/> </get> <post> http://git-wip-us.apache.org/repos/asf/camel/blob/c69f3edf/components/camel-test-blueprint/src/test/resources/org/apache/camel/test/blueprint/component/rest/FromRestGetTest.xml ---------------------------------------------------------------------- diff --git a/components/camel-test-blueprint/src/test/resources/org/apache/camel/test/blueprint/component/rest/FromRestGetTest.xml b/components/camel-test-blueprint/src/test/resources/org/apache/camel/test/blueprint/component/rest/FromRestGetTest.xml index ec18aa7..bc87c1c 100644 --- a/components/camel-test-blueprint/src/test/resources/org/apache/camel/test/blueprint/component/rest/FromRestGetTest.xml +++ b/components/camel-test-blueprint/src/test/resources/org/apache/camel/test/blueprint/component/rest/FromRestGetTest.xml @@ -48,7 +48,9 @@ <value>d</value> </allowableValues> </param> - <responseMessage code="300" message="test msg" responseModel="java.lang.Integer"/> + <responseMessage code="300" message="test msg" responseModel="java.lang.Integer"> + <header name="rate" description="Rate limit" dataType="integer"/> + </responseMessage> <to uri="direct:bye"/> </get> <post> http://git-wip-us.apache.org/repos/asf/camel/blob/c69f3edf/components/camel-test-blueprint/src/test/resources/org/apache/camel/test/blueprint/component/rest/FromRestIdAndDescriptionTest.xml ---------------------------------------------------------------------- diff --git a/components/camel-test-blueprint/src/test/resources/org/apache/camel/test/blueprint/component/rest/FromRestIdAndDescriptionTest.xml b/components/camel-test-blueprint/src/test/resources/org/apache/camel/test/blueprint/component/rest/FromRestIdAndDescriptionTest.xml index 1c380bc..3af51df 100644 --- a/components/camel-test-blueprint/src/test/resources/org/apache/camel/test/blueprint/component/rest/FromRestIdAndDescriptionTest.xml +++ b/components/camel-test-blueprint/src/test/resources/org/apache/camel/test/blueprint/component/rest/FromRestIdAndDescriptionTest.xml @@ -52,7 +52,9 @@ <value>d</value> </allowableValues> </param> - <responseMessage code="300" message="test msg" responseModel="java.lang.Integer"/> + <responseMessage code="300" message="test msg" responseModel="java.lang.Integer"> + <header name="rate" description="Rate limit" dataType="integer"/> + </responseMessage> <to uri="direct:bye"/> </get> <post>