001// *************************************************************************************************************************** 002// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file * 003// * distributed with this work for additional information regarding copyright ownership. The ASF licenses this file * 004// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance * 005// * with the License. You may obtain a copy of the License at * 006// * * 007// * http://www.apache.org/licenses/LICENSE-2.0 * 008// * * 009// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an * 010// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the * 011// * specific language governing permissions and limitations under the License. * 012// *************************************************************************************************************************** 013package org.apache.juneau.jsonschema.annotation; 014 015import static java.lang.annotation.RetentionPolicy.*; 016 017import java.lang.annotation.*; 018 019import org.apache.juneau.http.annotation.*; 020import org.apache.juneau.oapi.*; 021 022/** 023 * Swagger schema annotation. 024 * 025 * <p> 026 * The Schema Object allows the definition of input and output data types. 027 * These types can be objects, but also primitives and arrays. 028 * This object is based on the JSON Schema Specification Draft 4 and uses a predefined subset of it. 029 * On top of this subset, there are extensions provided by this specification to allow for more complete documentation. 030 * 031 * <p> 032 * Used to populate the auto-generated Swagger documentation and UI for server-side <ja>@RestResource</ja>-annotated classes. 033 * <br>Also used to define OpenAPI schema information for POJOs serialized through {@link OpenApiSerializer} and parsed through {@link OpenApiParser}. 034 * 035 * <h5 class='section'>Examples:</h5> 036 * <p class='bcode w800'> 037 * <jc>// A response object thats a hex-encoded string</jc> 038 * <ja>@Response</ja>( 039 * schema=<ja>@Schema</ja>( 040 * type=<js>"string"</js>, 041 * format=<js>"binary"</js> 042 * ) 043 * ) 044 * </p> 045 * <p class='bcode w800'> 046 * <jc>// Free-form</jc> 047 * <ja>@Response</ja>( 048 * schema=<ja>@Schema</ja>({ 049 * <js>"type:'string',"</js>, 050 * <js>"format:'binary'"</js> 051 * }) 052 * ) 053 * </p> 054 * <p class='bcode w800'> 055 * <jc>// A request body consisting of an array of arrays, the internal array being of type integer, numbers must be between 0 and 63 (inclusive)</jc> 056</jc> 057 * <ja>@Body</ja>( 058 * schema=<ja>@Schema</ja>( 059 * items=<ja>@Items</ja>( 060 * type=<js>"array"</js>, 061 * items=<ja>@SubItems</ja>( 062 * type=<js>"integer"</js>, 063 * minimum=<js>"0"</js>, 064 * maximum=<js>"63"</js> 065 * ) 066 * ) 067 * ) 068 * ) 069 * </p> 070 * 071 * <ul class='seealso'> 072 * <li class='link'>{@doc juneau-rest-server.Swagger} 073 * <li class='extlink'>{@doc SwaggerSchemaObject} 074 * </ul> 075 */ 076@Documented 077@Retention(RUNTIME) 078public @interface Schema { 079 080 /** 081 * <mk>$ref</mk> field of the {@doc SwaggerSchemaObject}. 082 * 083 * <p> 084 * A JSON reference to the schema definition. 085 * 086 * <ul class='notes'> 087 * <li> 088 * The format is a <a href='https://tools.ietf.org/html/draft-pbryan-zyp-json-ref-03'>JSON Reference</a>. 089 * <li> 090 * Supports {@doc DefaultRestSvlVariables} 091 * (e.g. <js>"$L{my.localized.variable}"</js>). 092 * </ul> 093 */ 094 String $ref() default ""; 095 096 /** 097 * <mk>format</mk> field of the {@doc SwaggerSchemaObject}. 098 * 099 * <h5 class='section'>Examples:</h5> 100 * <p class='bcode w800'> 101 * <jc>// Used on parameter</jc> 102 * <ja>@RestMethod</ja>(name=<jsf>PUT</jsf>) 103 * <jk>public void</jk> setAge( 104 * <ja>@Body</ja>(type=<js>"integer"</js>, format=<js>"int32"</js>) String input 105 * ) {...} 106 * </p> 107 * 108 * <ul class='notes'> 109 * <li> 110 * The format is plain text. 111 * <li> 112 * Supports {@doc DefaultRestSvlVariables} 113 * (e.g. <js>"$L{my.localized.variable}"</js>). 114 * </ul> 115 * 116 * <ul class='seealso'> 117 * <li class='extlink'>{@doc SwaggerDataTypeFormats} 118 * </ul> 119 */ 120 String format() default ""; 121 122 /** 123 * <mk>title</mk> field of the {@doc SwaggerSchemaObject}. 124 * 125 * <ul class='notes'> 126 * <li> 127 * The format is plain text. 128 * <li> 129 * Supports {@doc DefaultRestSvlVariables} 130 * (e.g. <js>"$L{my.localized.variable}"</js>). 131 * </ul> 132 */ 133 String title() default ""; 134 135 /** 136 * <mk>description</mk> field of the {@doc SwaggerSchemaObject}. 137 * 138 * <p> 139 * A brief description of the body. This could contain examples of use. 140 * 141 * <h5 class='section'>Examples:</h5> 142 * <p class='bcode w800'> 143 * <jc>// Used on parameter</jc> 144 * <ja>@RestMethod</ja>(name=<jsf>POST</jsf>) 145 * <jk>public void</jk> addPet( 146 * <ja>@Body</ja>(description=<js>"Pet object to add to the store"</js>) Pet input 147 * ) {...} 148 * </p> 149 * <p class='bcode w800'> 150 * <jc>// Used on class</jc> 151 * <ja>@RestMethod</ja>(name=<jsf>POST</jsf>) 152 * <jk>public void</jk> addPet(Pet input) {...} 153 * 154 * <ja>@Body</ja>(description=<js>"Pet object to add to the store"</js>) 155 * <jk>public class</jk> Pet {...} 156 * </p> 157 * 158 * <ul class='notes'> 159 * <li> 160 * The format is plain text. 161 * <br>Multiple lines are concatenated with newlines. 162 * <li> 163 * Supports {@doc DefaultRestSvlVariables} 164 * (e.g. <js>"$L{my.localized.variable}"</js>). 165 * </ul> 166 */ 167 String[] description() default {}; 168 169 /** 170 * <mk>default</mk> field of the {@doc SwaggerSchemaObject}. 171 * 172 * <ul class='notes'> 173 * <li> 174 * The format is any {@doc SimpleJson}. 175 * <br>Multiple lines are concatenated with newlines. 176 * <li> 177 * Supports {@doc DefaultRestSvlVariables} 178 * (e.g. <js>"$L{my.localized.variable}"</js>). 179 * </ul> 180 */ 181 String[] _default() default {}; 182 183 /** 184 * <mk>multipleOf</mk> field of the {@doc SwaggerSchemaObject}. 185 * 186 * <ul class='notes'> 187 * <li> 188 * The format is numeric. 189 * <li> 190 * Supports {@doc DefaultRestSvlVariables} 191 * (e.g. <js>"$L{my.localized.variable}"</js>). 192 * </ul> 193 */ 194 String multipleOf() default ""; 195 196 /** 197 * <mk>maximum</mk> field of the {@doc SwaggerSchemaObject}. 198 * 199 * <ul class='notes'> 200 * <li> 201 * The format is numeric. 202 * <li> 203 * Supports {@doc DefaultRestSvlVariables} 204 * (e.g. <js>"$L{my.localized.variable}"</js>). 205 * </ul> 206 */ 207 String maximum() default ""; 208 209 /** 210 * <mk>exclusiveMaximum</mk> field of the {@doc SwaggerSchemaObject}. 211 * 212 * <ul class='notes'> 213 * <li> 214 * The format is numeric. 215 * <li> 216 * Supports {@doc DefaultRestSvlVariables} 217 * (e.g. <js>"$L{my.localized.variable}"</js>). 218 * </ul> 219 */ 220 boolean exclusiveMaximum() default false; 221 222 /** 223 * <mk>minimum</mk> field of the {@doc SwaggerSchemaObject}. 224 * 225 * <ul class='notes'> 226 * <li> 227 * The format is numeric. 228 * <li> 229 * Supports {@doc DefaultRestSvlVariables} 230 * (e.g. <js>"$L{my.localized.variable}"</js>). 231 * </ul> 232 */ 233 String minimum() default ""; 234 235 /** 236 * <mk>exclusiveMinimum</mk> field of the {@doc SwaggerSchemaObject}. 237 * 238 * <ul class='notes'> 239 * <li> 240 * The format is numeric. 241 * <li> 242 * Supports {@doc DefaultRestSvlVariables} 243 * (e.g. <js>"$L{my.localized.variable}"</js>). 244 * </ul> 245 */ 246 boolean exclusiveMinimum() default false; 247 248 /** 249 * <mk>maxLength</mk> field of the {@doc SwaggerSchemaObject}. 250 * 251 * <ul class='notes'> 252 * <li> 253 * The format is numeric. 254 * <li> 255 * Supports {@doc DefaultRestSvlVariables} 256 * (e.g. <js>"$L{my.localized.variable}"</js>). 257 * </ul> 258 */ 259 long maxLength() default -1; 260 261 /** 262 * <mk>minLength</mk> field of the {@doc SwaggerSchemaObject}. 263 * 264 * <ul class='notes'> 265 * <li> 266 * The format is numeric. 267 * <li> 268 * Supports {@doc DefaultRestSvlVariables} 269 * (e.g. <js>"$L{my.localized.variable}"</js>). 270 * </ul> 271 */ 272 long minLength() default -1; 273 274 /** 275 * <mk>pattern</mk> field of the {@doc SwaggerSchemaObject}. 276 * 277 * <h5 class='section'>Example:</h5> 278 * <p class='bcode w800'> 279 * <ja>@RestMethod</ja>(name=<jsf>PUT</jsf>) 280 * <jk>public void</jk> doPut(<ja>@Body</ja>(format=<js>"/\\w+\\.\\d+/"</js>) String input) {...} 281 * </p> 282 * 283 * <ul class='notes'> 284 * <li> 285 * The format is plain text. 286 * <li> 287 * This string SHOULD be a valid regular expression. 288 * <li> 289 * Supports {@doc DefaultRestSvlVariables} 290 * (e.g. <js>"$L{my.localized.variable}"</js>). 291 * </ul> 292 */ 293 String pattern() default ""; 294 295 /** 296 * <mk>maxItems</mk> field of the {@doc SwaggerSchemaObject}. 297 * 298 * <ul class='notes'> 299 * <li> 300 * The format is numeric. 301 * <li> 302 * Supports {@doc DefaultRestSvlVariables} 303 * (e.g. <js>"$L{my.localized.variable}"</js>). 304 * </ul> 305 */ 306 long maxItems() default -1; 307 308 /** 309 * <mk>minItems</mk> field of the {@doc SwaggerSchemaObject}. 310 * 311 * <ul class='notes'> 312 * <li> 313 * The format is numeric. 314 * <li> 315 * Supports {@doc DefaultRestSvlVariables} 316 * (e.g. <js>"$L{my.localized.variable}"</js>). 317 * </ul> 318 */ 319 long minItems() default -1; 320 321 /** 322 * <mk>uniqueItems</mk> field of the {@doc SwaggerSchemaObject}. 323 * 324 * <ul class='notes'> 325 * <li> 326 * The format is boolean. 327 * <li> 328 * Supports {@doc DefaultRestSvlVariables} 329 * (e.g. <js>"$L{my.localized.variable}"</js>). 330 * </ul> 331 */ 332 boolean uniqueItems() default false; 333 334 335 /** 336 * <mk>maxProperties</mk> field of the {@doc SwaggerSchemaObject}. 337 * 338 * <ul class='notes'> 339 * <li> 340 * The format is a {@doc SimpleJson} object. 341 * <br>Multiple lines are concatenated with newlines. 342 * <li> 343 * Supports {@doc DefaultRestSvlVariables} 344 * (e.g. <js>"$L{my.localized.variable}"</js>). 345 * </ul> 346 */ 347 long maxProperties() default -1; 348 349 350 /** 351 * <mk>minProperties</mk> field of the {@doc SwaggerSchemaObject}. 352 * 353 * <ul class='notes'> 354 * <li> 355 * The format is a {@doc SimpleJson} object. 356 * <br>Multiple lines are concatenated with newlines. 357 * <li> 358 * Supports {@doc DefaultRestSvlVariables} 359 * (e.g. <js>"$L{my.localized.variable}"</js>). 360 * </ul> 361 */ 362 long minProperties() default -1; 363 364 /** 365 * <mk>required</mk> field of the {@doc SwaggerSchemaObject}. 366 * 367 * <p> 368 * Determines whether this parameter is mandatory. 369 * <br>The property MAY be included and its default value is false. 370 * 371 * <h5 class='section'>Examples:</h5> 372 * <p class='bcode w800'> 373 * <jc>// Used on parameter</jc> 374 * <ja>@RestMethod</ja>(name=<jsf>POST</jsf>) 375 * <jk>public void</jk> addPet( 376 * <ja>@Body</ja>(required=<jk>true</jk>) Pet input 377 * ) {...} 378 * </p> 379 * <p class='bcode w800'> 380 * <jc>// Used on class</jc> 381 * <ja>@RestMethod</ja>(name=<jsf>POST</jsf>) 382 * <jk>public void</jk> addPet(Pet input) {...} 383 * 384 * <ja>@Body</ja>(required=<jk>true</jk>) 385 * <jk>public class</jk> Pet {...} 386 * </p> 387 * 388 * <ul class='notes'> 389 * <li> 390 * The format is boolean. 391 * <li> 392 * Supports {@doc DefaultRestSvlVariables} 393 * (e.g. <js>"$L{my.localized.variable}"</js>). 394 * </ul> 395 */ 396 boolean required() default false; 397 398 /** 399 * <mk>enum</mk> field of the {@doc SwaggerSchemaObject}. 400 * 401 * <ul class='notes'> 402 * <li> 403 * The format is a {@doc SimpleJson} array or comma-delimited list. 404 * <br>Multiple lines are concatenated with newlines. 405 * <li> 406 * Supports {@doc DefaultRestSvlVariables} 407 * (e.g. <js>"$L{my.localized.variable}"</js>). 408 * </ul> 409 */ 410 String[] _enum() default {}; 411 412 /** 413 * <mk>type</mk> field of the {@doc SwaggerSchemaObject}. 414 * 415 * <h5 class='section'>Examples:</h5> 416 * <p class='bcode w800'> 417 * <jc>// Used on parameter</jc> 418 * <ja>@RestMethod</ja>(name=<jsf>POST</jsf>) 419 * <jk>public void</jk> addPet( 420 * <ja>@Body</ja>(type=<js>"object"</js>) Pet input 421 * ) {...} 422 * </p> 423 * <p class='bcode w800'> 424 * <jc>// Used on class</jc> 425 * <ja>@RestMethod</ja>(name=<jsf>POST</jsf>) 426 * <jk>public void</jk> addPet(Pet input) {...} 427 * 428 * <ja>@Body</ja>(type=<js>"object"</js>) 429 * <jk>public class</jk> Pet {...} 430 * </p> 431 * 432 * <ul class='notes'> 433 * <li> 434 * The format is plain text. 435 * <li> 436 * The possible values are: 437 * <ul> 438 * <li><js>"object"</js> 439 * <li><js>"string"</js> 440 * <li><js>"number"</js> 441 * <li><js>"integer"</js> 442 * <li><js>"boolean"</js> 443 * <li><js>"array"</js> 444 * <li><js>"file"</js> 445 * </ul> 446 * <li> 447 * Supports {@doc DefaultRestSvlVariables} 448 * (e.g. <js>"$L{my.localized.variable}"</js>). 449 * </ul> 450 * 451 * <ul class='seealso'> 452 * <li class='extlink'>{@doc SwaggerDataTypes} 453 * </ul> 454 * 455 */ 456 String type() default ""; 457 458 /** 459 * <mk>items</mk> field of the {@doc SwaggerSchemaObject}. 460 * 461 * <ul class='notes'> 462 * <li> 463 * The format is a {@doc SimpleJson} object. 464 * <br>Multiple lines are concatenated with newlines. 465 * <li> 466 * Supports {@doc DefaultRestSvlVariables} 467 * (e.g. <js>"$L{my.localized.variable}"</js>). 468 * </ul> 469 */ 470 Items items() default @Items; 471 472 /** 473 * <mk>collectionFormat</mk> field. 474 * 475 * <p> 476 * Note that this field isn't part of the Swagger 2.0 specification, but the specification does not specify how 477 * items are supposed to be represented. 478 * 479 * <p> 480 * Determines the format of the array if <c>type</c> <js>"array"</js> is used. 481 * <br>Can only be used if <c>type</c> is <js>"array"</js>. 482 * 483 * <br>Possible values are: 484 * <ul class='spaced-list'> 485 * <li> 486 * <js>"csv"</js> (default) - Comma-separated values (e.g. <js>"foo,bar"</js>). 487 * <li> 488 * <js>"ssv"</js> - Space-separated values (e.g. <js>"foo bar"</js>). 489 * <li> 490 * <js>"tsv"</js> - Tab-separated values (e.g. <js>"foo\tbar"</js>). 491 * <li> 492 * <js>"pipes</js> - Pipe-separated values (e.g. <js>"foo|bar"</js>). 493 * <li> 494 * <js>"multi"</js> - Corresponds to multiple parameter instances instead of multiple values for a single instance (e.g. <js>"foo=bar&foo=baz"</js>). 495 * <li> 496 * <js>"uon"</js> - UON notation (e.g. <js>"@(foo,bar)"</js>). 497 * </ul> 498 * 499 * <p> 500 * Static strings are defined in {@link CollectionFormatType}. 501 * 502 * <p> 503 * Note that for collections/arrays parameters with POJO element types, the input is broken into a string array before being converted into POJO elements. 504 * 505 * <h5 class='section'>Used for:</h5> 506 * <ul class='spaced-list'> 507 * <li> 508 * Server-side schema-based parsing. 509 * <li> 510 * Server-side generated Swagger documentation. 511 * <li> 512 * Client-side schema-based serializing. 513 * </ul> 514 */ 515 String collectionFormat() default ""; 516 517 /** 518 * <mk>allOf</mk> field of the {@doc SwaggerSchemaObject}. 519 * 520 * <ul class='notes'> 521 * <li> 522 * The format is a {@doc SimpleJson} object. 523 * <br>Multiple lines are concatenated with newlines. 524 * <li> 525 * Supports {@doc DefaultRestSvlVariables} 526 * (e.g. <js>"$L{my.localized.variable}"</js>). 527 * </ul> 528 */ 529 String[] allOf() default {}; 530 531 /** 532 * <mk>properties</mk> field of the {@doc SwaggerSchemaObject}. 533 * 534 * <ul class='notes'> 535 * <li> 536 * The format is a {@doc SimpleJson} object. 537 * <br>Multiple lines are concatenated with newlines. 538 * <li> 539 * Supports {@doc DefaultRestSvlVariables} 540 * (e.g. <js>"$L{my.localized.variable}"</js>). 541 * </ul> 542 */ 543 String[] properties() default {}; 544 545 /** 546 * <mk>additionalProperties</mk> field of the {@doc SwaggerSchemaObject}. 547 * 548 * <ul class='notes'> 549 * <li> 550 * The format is a {@doc SimpleJson} object. 551 * <br>Multiple lines are concatenated with newlines. 552 * <li> 553 * Supports {@doc DefaultRestSvlVariables} 554 * (e.g. <js>"$L{my.localized.variable}"</js>). 555 * </ul> 556 */ 557 String[] additionalProperties() default {}; 558 559 /** 560 * <mk>discriminator</mk> field of the {@doc SwaggerSchemaObject}. 561 * 562 * <ul class='notes'> 563 * <li> 564 * The format is a {@doc SimpleJson} object. 565 * <br>Multiple lines are concatenated with newlines. 566 * <li> 567 * Supports {@doc DefaultRestSvlVariables} 568 * (e.g. <js>"$L{my.localized.variable}"</js>). 569 * </ul> 570 */ 571 String discriminator() default ""; 572 573 /** 574 * <mk>readOnly</mk> field of the {@doc SwaggerSchemaObject}. 575 * 576 * <ul class='notes'> 577 * <li> 578 * The format is a {@doc SimpleJson} object. 579 * <br>Multiple lines are concatenated with newlines. 580 * <li> 581 * Supports {@doc DefaultRestSvlVariables} 582 * (e.g. <js>"$L{my.localized.variable}"</js>). 583 * </ul> 584 */ 585 boolean readOnly() default false; 586 587 /** 588 * <mk>xml</mk> field of the {@doc SwaggerSchemaObject}. 589 * 590 * <ul class='notes'> 591 * <li> 592 * The format is a {@doc SimpleJson} object. 593 * <br>Multiple lines are concatenated with newlines. 594 * <li> 595 * Supports {@doc DefaultRestSvlVariables} 596 * (e.g. <js>"$L{my.localized.variable}"</js>). 597 * </ul> 598 */ 599 String[] xml() default {}; 600 601 /** 602 * <mk>externalDocs</mk> field of the {@doc SwaggerSchemaObject}. 603 * 604 * <ul class='notes'> 605 * <li> 606 * The format is a {@doc SimpleJson} object. 607 * <br>Multiple lines are concatenated with newlines. 608 * <li> 609 * Supports {@doc DefaultRestSvlVariables} 610 * (e.g. <js>"$L{my.localized.variable}"</js>). 611 * </ul> 612 */ 613 ExternalDocs externalDocs() default @ExternalDocs; 614 615 /** 616 * <mk>example</mk> field of the {@doc SwaggerSchemaObject}. 617 * 618 * <p> 619 * A free-form property to include an example of an instance for this schema. 620 * 621 * <p> 622 * This attribute defines a JSON representation of the body value that is used by <c>BasicRestInfoProvider</c> to construct 623 * media-type-based examples of the body of the request. 624 * 625 * <ul class='notes'> 626 * <li> 627 * The format is a {@doc SimpleJson} object or plain text string. 628 * <br>Multiple lines are concatenated with newlines. 629 * <li> 630 * Supports {@doc DefaultRestSvlVariables} 631 * (e.g. <js>"$L{my.localized.variable}"</js>). 632 * </ul> 633 */ 634 String[] example() default {}; 635 636 /** 637 * <mk>x-examples</mk> field of the {@doc SwaggerSchemaObject}. 638 * 639 * <p> 640 * This is a JSON object whose keys are media types and values are string representations of that value. 641 * 642 * <ul class='notes'> 643 * <li> 644 * The format is a {@doc SimpleJson} object. 645 * <br>Multiple lines are concatenated with newlines. 646 * <li> 647 * Supports {@doc DefaultRestSvlVariables} 648 * (e.g. <js>"$L{my.localized.variable}"</js>). 649 * </ul> 650 */ 651 String[] examples() default {}; 652 653 /** 654 * Specifies that schema information for this part should not be shown in the generated Swagger documentation. 655 */ 656 boolean ignore() default false; 657 658 /** 659 * Free-form value for the {@doc SwaggerSchemaObject}. 660 * 661 * <p> 662 * This is a JSON object that makes up the swagger information for this field. 663 * 664 * <p> 665 * The following are completely equivalent ways of defining the swagger description of a Schema object: 666 * <p class='bcode w800'> 667 * <jc>// Normal</jc> 668 * <ja>@Schema</ja>( 669 * type=<js>"array"</js>, 670 * items=<ja>@Items</ja>( 671 * $ref=<js>"#/definitions/Pet"</js> 672 * ) 673 * ) 674 * </p> 675 * <p class='bcode w800'> 676 * <jc>// Free-form</jc> 677 * <ja>@Schema</ja>( 678 * <js>"type: 'array',"</js>, 679 * <js>"items: {"</js>, 680 * <js>"$ref: '#/definitions/Pet'"</js>, 681 * <js>"}"</js> 682 * ) 683 * </p> 684 * <p class='bcode w800'> 685 * <jc>// Free-form using variables</jc> 686 * <ja>@Schema</ja>(<js>"$L{petArraySwagger}"</js>) 687 * </p> 688 * <p class='bcode w800'> 689 * <mc>// Contents of MyResource.properties</mc> 690 * <mk>petArraySwagger</mk> = <mv>{ type: "array", items: { $ref: "#/definitions/Pet" } }</mv> 691 * </p> 692 * 693 * <p> 694 * The reasons why you may want to use this field include: 695 * <ul> 696 * <li>You want to pull in the entire Swagger JSON definition for this field from an external source such as a properties file. 697 * <li>You want to add extra fields to the Swagger documentation that are not officially part of the Swagger specification. 698 * </ul> 699 * 700 * <ul class='notes'> 701 * <li> 702 * The format is a {@doc SimpleJson} object. 703 * <li> 704 * The leading/trailing <c>{ }</c> characters are optional. 705 * <br>The following two example are considered equivalent: 706 * <p class='bcode w800'> 707 * <ja>@Schema</ja>(<js>"{type: 'array'}"</js>) 708 * </p> 709 * <p class='bcode w800'> 710 * <ja>@Schema</ja>(<js>"type: 'array'"</js>) 711 * </p> 712 * <li> 713 * Multiple lines are concatenated with newlines so that you can format the value to be readable. 714 * <li> 715 * Supports {@doc DefaultRestSvlVariables} 716 * (e.g. <js>"$L{my.localized.variable}"</js>). 717 * <li> 718 * Values defined in this field supersede values pulled from the Swagger JSON file and are superseded by individual values defined on this annotation. 719 * </ul> 720 */ 721 String[] value() default {}; 722}