| <!-- |
| /*************************************************************************************************************************** |
| * 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. |
| ***************************************************************************************************************************/ |
| --> |
| |
| JSON-Schema Support |
| |
| <p> |
| Juneau provides the {@link oaj.json.JsonSchemaSerializer} class for generating JSON-Schema |
| documents that describe the output generated by the {@link oaj.json.JsonSerializer} class. |
| This class shares the same properties as <c>JsonSerializer</c>. |
| For convenience the {@link oaj.json.JsonSerializer#getSchemaSerializer()} method has been |
| added for creating instances of schema serializers from the regular serializer instance. |
| </p> |
| <h5 class='figure'>Sample Beans</h5> |
| <p class='bpcode w800'> |
| <jk>public class</jk> Person { |
| |
| <jc>// Bean properties</jc> |
| <jk>public</jk> String <jf>name</jf>; |
| <jk>public</jk> Calendar <jf>birthDate</jf>; |
| <jk>public</jk> List<Address> <jf>addresses</jf>; |
| |
| <jc>// Getters/setters omitted</jc> |
| } |
| |
| <jk>public class</jk> Address { |
| |
| <jc>// Bean properties</jc> |
| <jk>public</jk> String <jf>street</jf>, <jf>city</jf>; |
| <jk>public</jk> StateEnum <jf>state</jf>; |
| <jk>public int</jk> <jf>zip</jf>; |
| <jk>public boolean</jk> <jf>isCurrent</jf>; |
| |
| <jc>// Getters/setters omitted</jc> |
| } |
| </p> |
| <p> |
| The code for creating our POJO model and generating JSON-Schema is shown below: |
| </p> |
| <p class='bpcode w800'> |
| <jc>// Get the one of the default schema serializers.</jc> |
| JsonSchemaSerializer s = JsonSchemaSerializer.<jsf>DEFAULT_SIMPLE_READABLE</jsf>; |
| |
| <jc>// Get the JSON Schema for the POJO.</jc> |
| String jsonSchema = s.serialize(<jk>new</jk> Person()); |
| |
| <jc>// This also works.</jc> |
| jsonSchema = s.serialize(Person.<jk>class</jk>); |
| </p> |
| |
| <h5 class='figure'>JSON Schema</h5> |
| <p class='bpcode w800'> |
| { |
| <jok>type: <jov>'object'</jov>, |
| <jok>description</jok>: <jov>'org.apache.juneau.sample.Person'</jov>, |
| <jok>properties</jok>: { |
| <jok>name</jok>: { |
| <jok>type</jok>: <jov>'string'</jov>, |
| <jok>description</jok>: <jov>'java.lang.String'</jov> |
| }, |
| <jok>birthDate</jok>: { |
| <jok>type</jok>: <jov>'string'</jov>, |
| <jok>description</jok>: <jov>'java.util.Calendar'</jov> |
| }, |
| <jok>addresses</jok>: { |
| <jok>type</jok>: <jov>'array'</jov>, |
| <jok>description</jok>: <jov>'java.util.LinkedList<org.apache.juneau.sample.Address>'</jov>, |
| <jok>items</jok>: { |
| <jok>type</jok>: <jov>'object'</jov>, |
| <jok>description</jok>: <jov>'org.apache.juneau.sample.Address'</jov>, |
| <jok>properties</jok>: { |
| <jok>street</jok>: { |
| <jok>type</jok>: <jov>'string'</jov>, |
| <jok>description</jok>: <jov>'java.lang.String'</jov> |
| }, |
| <jok>city</jok>: { |
| <jok>type</jok>: <jov>'string'</jov>, |
| <jok>description</jok>: <jov>'java.lang.String'</jov> |
| }, |
| <jok>state</jok>: { |
| <jok>type</jok>: <jov>'string'</jov>, |
| <jok>description</jok>: <jov>'java.lang.String'</jov> |
| }, |
| <jok>zip</jok>: { |
| <jok>type</jok>: <jov>'number'</jov>, |
| <jok>description</jok>: <jov>'int'</jov> |
| }, |
| <jok>isCurrent</jok>: { |
| <jok>type</jok>: <jov>'boolean'</jov>, |
| <jok>description</jok>: <jov>'boolean'</jov> |
| } |
| } |
| } |
| } |
| } |
| } |
| </p> |