001/* 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017package org.apache.juneau.rest.annotation; 018 019import static org.apache.juneau.commons.utils.CollectionUtils.*; 020 021import java.lang.annotation.*; 022import java.nio.charset.*; 023 024import org.apache.juneau.*; 025import org.apache.juneau.cp.*; 026import org.apache.juneau.encoders.*; 027import org.apache.juneau.http.*; 028import org.apache.juneau.http.annotation.*; 029import org.apache.juneau.httppart.*; 030import org.apache.juneau.commons.annotation.*; 031import org.apache.juneau.commons.reflect.*; 032import org.apache.juneau.rest.*; 033import org.apache.juneau.rest.arg.*; 034import org.apache.juneau.rest.converter.*; 035import org.apache.juneau.rest.debug.*; 036import org.apache.juneau.rest.guard.*; 037import org.apache.juneau.rest.httppart.*; 038import org.apache.juneau.rest.logger.*; 039import org.apache.juneau.rest.processor.*; 040import org.apache.juneau.rest.staticfile.*; 041import org.apache.juneau.rest.swagger.*; 042import org.apache.juneau.serializer.*; 043import org.apache.juneau.svl.*; 044 045/** 046 * Utility classes and methods for the {@link Rest @Rest} annotation. 047 * 048 * <h5 class='section'>See Also:</h5><ul> 049 * <li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/RestAnnotatedClassBasics">@Rest-Annotated Class Basics</a> 050 * </ul> 051 */ 052public class RestAnnotation { 053 /** 054 * Builder class. 055 * 056 * <h5 class='section'>See Also:</h5><ul> 057 * <li class='jm'>{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)} 058 * </ul> 059 */ 060 @SuppressWarnings("unchecked") 061 public static class Builder extends AppliedAnnotationObject.BuilderT { 062 063 private String[] description = {}; 064 private Class<? extends Encoder>[] encoders = new Class[0]; 065 private Class<? extends HttpPartParser> partParser = HttpPartParser.Void.class; 066 private Class<? extends HttpPartSerializer> partSerializer = HttpPartSerializer.Void.class; 067 private Class<? extends StaticFiles> staticFiles = StaticFiles.Void.class; 068 private Class<? extends ResponseProcessor>[] responseProcessors = new Class[0]; 069 private Class<? extends CallLogger> callLogger = CallLogger.Void.class; 070 private Class<? extends RestConverter>[] converters = new Class[0]; 071 private Class<? extends RestGuard>[] guards = new Class[0]; 072 private Class<? extends SwaggerProvider> swaggerProvider = SwaggerProvider.Void.class; 073 private Class<? extends RestOpArg>[] restOpArgs = new Class[0]; 074 private Class<? extends BeanStore> beanStore = BeanStore.Void.class; 075 private Class<? extends RestChildren> restChildrenClass = RestChildren.Void.class; 076 private Class<? extends DebugEnablement> debugEnablement = DebugEnablement.Void.class; 077 private Class<? extends Serializer>[] serializers = new Class[0]; 078 private Class<?>[] children = {}, parsers = {}; 079 private Swagger swagger = SwaggerAnnotation.DEFAULT; 080 private String disableContentParam = "", allowedHeaderParams = "", allowedMethodHeaders = "", allowedMethodParams = "", clientVersionHeader = "", config = "", debug = "", debugOn = "", 081 defaultAccept = "", defaultCharset = "", defaultContentType = "", maxInput = "", messages = "", path = "", renderResponseStackTraces = "", roleGuard = "", rolesDeclared = "", 082 siteName = "", uriAuthority = "", uriContext = "", uriRelativity = "", uriResolution = ""; 083 private String[] consumes = {}, defaultRequestAttributes = {}, defaultRequestHeaders = {}, defaultResponseHeaders = {}, produces = {}, title = {}; 084 private Query[] queryParams = new Query[0]; 085 private Header[] headerParams = new Header[0]; 086 private Path[] pathParams = new Path[0]; 087 private FormData[] formDataParams = new FormData[0]; 088 089 /** 090 * Constructor. 091 */ 092 protected Builder() { 093 super(Rest.class); 094 } 095 096 /** 097 * Sets the {@link Rest#allowedHeaderParams()} property on this annotation. 098 * 099 * @param value The new value for this property. 100 * @return This object. 101 */ 102 public Builder allowedHeaderParams(String value) { 103 allowedHeaderParams = value; 104 return this; 105 } 106 107 /** 108 * Sets the {@link Rest#allowedMethodHeaders()} property on this annotation. 109 * 110 * @param value The new value for this property. 111 * @return This object. 112 */ 113 public Builder allowedMethodHeaders(String value) { 114 allowedMethodHeaders = value; 115 return this; 116 } 117 118 /** 119 * Sets the {@link Rest#allowedMethodParams()} property on this annotation. 120 * 121 * @param value The new value for this property. 122 * @return This object. 123 */ 124 public Builder allowedMethodParams(String value) { 125 allowedMethodParams = value; 126 return this; 127 } 128 129 /** 130 * Sets the {@link Rest#beanStore()} property on this annotation. 131 * 132 * @param value The new value for this property. 133 * @return This object. 134 */ 135 public Builder beanStore(Class<? extends BeanStore> value) { 136 beanStore = value; 137 return this; 138 } 139 140 /** 141 * Instantiates a new {@link Rest @Rest} object initialized with this builder. 142 * 143 * @return A new {@link Rest @Rest} object. 144 */ 145 public Rest build() { 146 return new Object(this); 147 } 148 149 /** 150 * Sets the description property on this annotation. 151 * 152 * @param value The new value for this property. 153 * @return This object. 154 */ 155 public Builder description(String...value) { 156 description = value; 157 return this; 158 } 159 160 /** 161 * Sets the {@link Rest#callLogger()} property on this annotation. 162 * 163 * @param value The new value for this property. 164 * @return This object. 165 */ 166 public Builder callLogger(Class<? extends CallLogger> value) { 167 callLogger = value; 168 return this; 169 } 170 171 /** 172 * Sets the {@link Rest#children()} property on this annotation. 173 * 174 * @param value The new value for this property. 175 * @return This object. 176 */ 177 public Builder children(Class<?>...value) { 178 children = value; 179 return this; 180 } 181 182 /** 183 * Sets the {@link Rest#clientVersionHeader()} property on this annotation. 184 * 185 * @param value The new value for this property. 186 * @return This object. 187 */ 188 public Builder clientVersionHeader(String value) { 189 clientVersionHeader = value; 190 return this; 191 } 192 193 /** 194 * Sets the {@link Rest#config()} property on this annotation. 195 * 196 * @param value The new value for this property. 197 * @return This object. 198 */ 199 public Builder config(String value) { 200 config = value; 201 return this; 202 } 203 204 /** 205 * Sets the {@link Rest#consumes()} property on this annotation. 206 * 207 * @param value The new value for this property. 208 * @return This object. 209 */ 210 public Builder consumes(String...value) { 211 consumes = value; 212 return this; 213 } 214 215 /** 216 * Sets the {@link Rest#converters()} property on this annotation. 217 * 218 * @param value The new value for this property. 219 * @return This object. 220 */ 221 @SafeVarargs 222 public final Builder converters(Class<? extends RestConverter>...value) { 223 converters = value; 224 return this; 225 } 226 227 /** 228 * Sets the {@link Rest#debug()} property on this annotation. 229 * 230 * @param value The new value for this property. 231 * @return This object. 232 */ 233 public Builder debug(String value) { 234 debug = value; 235 return this; 236 } 237 238 /** 239 * Sets the {@link Rest#debugEnablement()} property on this annotation. 240 * 241 * @param value The new value for this property. 242 * @return This object. 243 */ 244 public Builder debugEnablement(Class<? extends DebugEnablement> value) { 245 debugEnablement = value; 246 return this; 247 } 248 249 /** 250 * Sets the {@link Rest#debugOn()} property on this annotation. 251 * 252 * @param value The new value for this property. 253 * @return This object. 254 */ 255 public Builder debugOn(String value) { 256 debugOn = value; 257 return this; 258 } 259 260 /** 261 * Sets the {@link Rest#defaultAccept()} property on this annotation. 262 * 263 * @param value The new value for this property. 264 * @return This object. 265 */ 266 public Builder defaultAccept(String value) { 267 defaultAccept = value; 268 return this; 269 } 270 271 /** 272 * Sets the {@link Rest#defaultCharset()} property on this annotation. 273 * 274 * @param value The new value for this property. 275 * @return This object. 276 */ 277 public Builder defaultCharset(String value) { 278 defaultCharset = value; 279 return this; 280 } 281 282 /** 283 * Sets the {@link Rest#defaultContentType()} property on this annotation. 284 * 285 * @param value The new value for this property. 286 * @return This object. 287 */ 288 public Builder defaultContentType(String value) { 289 defaultContentType = value; 290 return this; 291 } 292 293 /** 294 * Sets the {@link Rest#defaultRequestAttributes()} property on this annotation. 295 * 296 * @param value The new value for this property. 297 * @return This object. 298 */ 299 public Builder defaultRequestAttributes(String...value) { 300 defaultRequestAttributes = value; 301 return this; 302 } 303 304 /** 305 * Sets the {@link Rest#defaultRequestHeaders()} property on this annotation. 306 * 307 * @param value The new value for this property. 308 * @return This object. 309 */ 310 public Builder defaultRequestHeaders(String...value) { 311 defaultRequestHeaders = value; 312 return this; 313 } 314 315 /** 316 * Sets the {@link Rest#defaultResponseHeaders()} property on this annotation. 317 * 318 * @param value The new value for this property. 319 * @return This object. 320 */ 321 public Builder defaultResponseHeaders(String...value) { 322 defaultResponseHeaders = value; 323 return this; 324 } 325 326 /** 327 * Sets the {@link Rest#disableContentParam()} property on this annotation. 328 * 329 * @param value The new value for this property. 330 * @return This object. 331 */ 332 public Builder disableContentParam(String value) { 333 disableContentParam = value; 334 return this; 335 } 336 337 /** 338 * Sets the {@link Rest#encoders()} property on this annotation. 339 * 340 * @param value The new value for this property. 341 * @return This object. 342 */ 343 @SafeVarargs 344 public final Builder encoders(Class<? extends Encoder>...value) { 345 encoders = value; 346 return this; 347 } 348 349 /** 350 * Sets the {@link Rest#guards()} property on this annotation. 351 * 352 * @param value The new value for this property. 353 * @return This object. 354 */ 355 @SafeVarargs 356 public final Builder guards(Class<? extends RestGuard>...value) { 357 guards = value; 358 return this; 359 } 360 361 /** 362 * Sets the {@link Rest#maxInput()} property on this annotation. 363 * 364 * @param value The new value for this property. 365 * @return This object. 366 */ 367 public Builder maxInput(String value) { 368 maxInput = value; 369 return this; 370 } 371 372 /** 373 * Sets the {@link Rest#messages()} property on this annotation. 374 * 375 * @param value The new value for this property. 376 * @return This object. 377 */ 378 public Builder messages(String value) { 379 messages = value; 380 return this; 381 } 382 383 /** 384 * Sets the {@link Rest#parsers()} property on this annotation. 385 * 386 * @param value The new value for this property. 387 * @return This object. 388 */ 389 public Builder parsers(Class<?>...value) { 390 parsers = value; 391 return this; 392 } 393 394 /** 395 * Sets the {@link Rest#partParser()} property on this annotation. 396 * 397 * @param value The new value for this property. 398 * @return This object. 399 */ 400 public Builder partParser(Class<? extends HttpPartParser> value) { 401 partParser = value; 402 return this; 403 } 404 405 /** 406 * Sets the {@link Rest#partSerializer()} property on this annotation. 407 * 408 * @param value The new value for this property. 409 * @return This object. 410 */ 411 public Builder partSerializer(Class<? extends HttpPartSerializer> value) { 412 partSerializer = value; 413 return this; 414 } 415 416 /** 417 * Sets the {@link Rest#path()} property on this annotation. 418 * 419 * @param value The new value for this property. 420 * @return This object. 421 */ 422 public Builder path(String value) { 423 path = value; 424 return this; 425 } 426 427 /** 428 * Sets the {@link Rest#produces()} property on this annotation. 429 * 430 * @param value The new value for this property. 431 * @return This object. 432 */ 433 public Builder produces(String...value) { 434 produces = value; 435 return this; 436 } 437 438 /** 439 * Sets the {@link Rest#renderResponseStackTraces()} property on this annotation. 440 * 441 * @param value The new value for this property. 442 * @return This object. 443 */ 444 public Builder renderResponseStackTraces(String value) { 445 renderResponseStackTraces = value; 446 return this; 447 } 448 449 /** 450 * Sets the {@link Rest#responseProcessors()} property on this annotation. 451 * 452 * @param value The new value for this property. 453 * @return This object. 454 */ 455 @SafeVarargs 456 public final Builder responseProcessors(Class<? extends ResponseProcessor>...value) { 457 responseProcessors = value; 458 return this; 459 } 460 461 /** 462 * Sets the {@link Rest#restChildrenClass()} property on this annotation. 463 * 464 * @param value The new value for this property. 465 * @return This object. 466 */ 467 public Builder restChildrenClass(Class<? extends RestChildren> value) { 468 restChildrenClass = value; 469 return this; 470 } 471 472 /** 473 * Sets the {@link Rest#restOpArgs()} property on this annotation. 474 * 475 * @param value The new value for this property. 476 * @return This object. 477 */ 478 @SafeVarargs 479 public final Builder restOpArgs(Class<? extends RestOpArg>...value) { 480 restOpArgs = value; 481 return this; 482 } 483 484 /** 485 * Sets the {@link Rest#roleGuard()} property on this annotation. 486 * 487 * @param value The new value for this property. 488 * @return This object. 489 */ 490 public Builder roleGuard(String value) { 491 roleGuard = value; 492 return this; 493 } 494 495 /** 496 * Sets the {@link Rest#rolesDeclared()} property on this annotation. 497 * 498 * @param value The new value for this property. 499 * @return This object. 500 */ 501 public Builder rolesDeclared(String value) { 502 rolesDeclared = value; 503 return this; 504 } 505 506 /** 507 * Sets the {@link Rest#serializers()} property on this annotation. 508 * 509 * @param value The new value for this property. 510 * @return This object. 511 */ 512 @SafeVarargs 513 public final Builder serializers(Class<? extends Serializer>...value) { 514 serializers = value; 515 return this; 516 } 517 518 /** 519 * Sets the {@link Rest#siteName()} property on this annotation. 520 * 521 * @param value The new value for this property. 522 * @return This object. 523 */ 524 public Builder siteName(String value) { 525 siteName = value; 526 return this; 527 } 528 529 /** 530 * Sets the {@link Rest#staticFiles()} property on this annotation. 531 * 532 * @param value The new value for this property. 533 * @return This object. 534 */ 535 public Builder staticFiles(Class<? extends StaticFiles> value) { 536 staticFiles = value; 537 return this; 538 } 539 540 /** 541 * Sets the {@link Rest#swagger()} property on this annotation. 542 * 543 * @param value The new value for this property. 544 * @return This object. 545 */ 546 public Builder swagger(Swagger value) { 547 swagger = value; 548 return this; 549 } 550 551 /** 552 * Sets the {@link Rest#swaggerProvider()} property on this annotation. 553 * 554 * @param value The new value for this property. 555 * @return This object. 556 */ 557 public Builder swaggerProvider(Class<? extends SwaggerProvider> value) { 558 swaggerProvider = value; 559 return this; 560 } 561 562 /** 563 * Sets the {@link Rest#title()} property on this annotation. 564 * 565 * @param value The new value for this property. 566 * @return This object. 567 */ 568 public Builder title(String...value) { 569 title = value; 570 return this; 571 } 572 573 /** 574 * Sets the {@link Rest#uriAuthority()} property on this annotation. 575 * 576 * @param value The new value for this property. 577 * @return This object. 578 */ 579 public Builder uriAuthority(String value) { 580 uriAuthority = value; 581 return this; 582 } 583 584 /** 585 * Sets the {@link Rest#uriContext()} property on this annotation. 586 * 587 * @param value The new value for this property. 588 * @return This object. 589 */ 590 public Builder uriContext(String value) { 591 uriContext = value; 592 return this; 593 } 594 595 /** 596 * Sets the {@link Rest#uriRelativity()} property on this annotation. 597 * 598 * @param value The new value for this property. 599 * @return This object. 600 */ 601 public Builder uriRelativity(String value) { 602 uriRelativity = value; 603 return this; 604 } 605 606 /** 607 * Sets the {@link Rest#uriResolution()} property on this annotation. 608 * 609 * @param value The new value for this property. 610 * @return This object. 611 */ 612 public Builder uriResolution(String value) { 613 uriResolution = value; 614 return this; 615 } 616 617 @Override /* Overridden from AppliedAnnotationObject.Builder */ 618 public Builder on(String...value) { 619 super.on(value); 620 return this; 621 } 622 @Override /* Overridden from AppliedAnnotationObject.BuilderT */ 623 public Builder on(Class<?>...value) { 624 super.on(value); 625 return this; 626 } 627 628 @Override /* Overridden from AppliedOnClassAnnotationObject.Builder */ 629 public Builder onClass(Class<?>...value) { 630 super.onClass(value); 631 return this; 632 } 633 634 @Override /* Overridden from AppliedAnnotationObject.BuilderT */ 635 public Builder on(ClassInfo...value) { 636 super.on(value); 637 return this; 638 } 639 640 @Override /* Overridden from AppliedAnnotationObject.BuilderT */ 641 public Builder onClass(ClassInfo...value) { 642 super.onClass(value); 643 return this; 644 } 645 646 } 647 648 /** 649 * Applies {@link Rest} annotations to a {@link org.apache.juneau.rest.RestContext.Builder}. 650 */ 651 public static class RestContextApply extends AnnotationApplier<Rest,RestContext.Builder> { 652 653 /** 654 * Constructor. 655 * 656 * @param vr The resolver for resolving values in annotations. 657 */ 658 public RestContextApply(VarResolverSession vr) { 659 super(Rest.class, RestContext.Builder.class, vr); 660 } 661 662 @Override 663 public void apply(AnnotationInfo<Rest> ai, RestContext.Builder b) { 664 Rest a = ai.inner(); 665 666 classes(a.serializers()).ifPresent(x -> b.serializers().add(x)); 667 classes(a.parsers()).ifPresent(x -> b.parsers().add(x)); 668 type(a.partSerializer()).ifPresent(x -> b.partSerializer().type(x)); 669 type(a.partParser()).ifPresent(x -> b.partParser().type(x)); 670 stream(a.produces()).map(MediaType::of).forEach(x -> b.produces(x)); 671 stream(a.consumes()).map(MediaType::of).forEach(x -> b.consumes(x)); 672 stream(a.defaultRequestAttributes()).map(BasicNamedAttribute::ofPair).forEach(x -> b.defaultRequestAttributes(x)); 673 stream(a.defaultRequestHeaders()).map(HttpHeaders::stringHeader).forEach(x -> b.defaultRequestHeaders(x)); 674 stream(a.defaultResponseHeaders()).map(HttpHeaders::stringHeader).forEach(x -> b.defaultResponseHeaders(x)); 675 string(a.defaultAccept()).map(HttpHeaders::accept).ifPresent(x -> b.defaultRequestHeaders(x)); 676 string(a.defaultContentType()).map(HttpHeaders::contentType).ifPresent(x -> b.defaultRequestHeaders(x)); 677 b.responseProcessors().add(a.responseProcessors()); 678 b.children((java.lang.Object[])a.children()); 679 b.restOpArgs(a.restOpArgs()); 680 classes(a.encoders()).ifPresent(x -> b.encoders().add(x)); 681 string(a.uriContext()).ifPresent(x -> b.uriContext(x)); 682 string(a.uriAuthority()).ifPresent(x -> b.uriAuthority(x)); 683 string(a.uriRelativity()).map(UriRelativity::valueOf).ifPresent(x -> b.uriRelativity(x)); 684 string(a.uriResolution()).map(UriResolution::valueOf).ifPresent(x -> b.uriResolution(x)); 685 b.messages().location(string(a.messages()).orElse(null)); 686 type(a.staticFiles()).ifPresent(x -> b.staticFiles().type(x)); 687 string(a.path()).ifPresent(x -> b.path(x)); 688 string(a.clientVersionHeader()).ifPresent(x -> b.clientVersionHeader(x)); 689 type(a.callLogger()).ifPresent(x -> b.callLogger().type(x)); 690 type(a.swaggerProvider()).ifPresent(x -> b.swaggerProvider(x)); 691 type(a.restChildrenClass()).ifPresent(x -> b.restChildrenClass(x)); 692 type(a.debugEnablement()).ifPresent(x -> b.debugEnablement().type(x)); 693 string(a.disableContentParam()).map(Boolean::parseBoolean).ifPresent(x -> b.disableContentParam(x)); 694 string(a.allowedHeaderParams()).ifPresent(x -> b.allowedHeaderParams(x)); 695 string(a.allowedMethodHeaders()).ifPresent(x -> b.allowedMethodHeaders(x)); 696 string(a.allowedMethodParams()).ifPresent(x -> b.allowedMethodParams(x)); 697 bool(a.renderResponseStackTraces()).ifPresent(x -> b.renderResponseStackTraces(x)); 698 } 699 } 700 701 /** 702 * Applies {@link Rest} annotations to a {@link org.apache.juneau.rest.RestOpContext.Builder}. 703 */ 704 public static class RestOpContextApply extends AnnotationApplier<Rest,RestOpContext.Builder> { 705 706 /** 707 * Constructor. 708 * 709 * @param vr The resolver for resolving values in annotations. 710 */ 711 public RestOpContextApply(VarResolverSession vr) { 712 super(Rest.class, RestOpContext.Builder.class, vr); 713 } 714 715 @Override 716 public void apply(AnnotationInfo<Rest> ai, RestOpContext.Builder b) { 717 Rest a = ai.inner(); 718 719 stream(a.produces()).map(MediaType::of).forEach(x -> b.produces(x)); 720 stream(a.consumes()).map(MediaType::of).forEach(x -> b.consumes(x)); 721 b.converters().append(a.converters()); 722 b.guards().append(a.guards()); 723 string(a.defaultCharset()).map(Charset::forName).ifPresent(x -> b.defaultCharset(x)); 724 string(a.maxInput()).ifPresent(x -> b.maxInput(x)); 725 cdl(a.rolesDeclared()).forEach(x -> b.rolesDeclared(x)); 726 string(a.roleGuard()).ifPresent(x -> b.roleGuard(x)); 727 } 728 } 729 730 private static class Object extends AppliedOnClassAnnotationObject implements Rest { 731 732 private final String[] description; 733 private final Class<? extends Encoder>[] encoders; 734 private final Class<? extends HttpPartParser> partParser; 735 private final Class<? extends HttpPartSerializer> partSerializer; 736 private final Class<? extends StaticFiles> staticFiles; 737 private final Class<? extends ResponseProcessor>[] responseProcessors; 738 private final Class<? extends CallLogger> callLogger; 739 private final Class<? extends RestConverter>[] converters; 740 private final Class<? extends RestGuard>[] guards; 741 private final Class<? extends SwaggerProvider> swaggerProvider; 742 private final Class<? extends RestOpArg>[] restOpArgs; 743 private final Class<? extends BeanStore> beanStore; 744 private final Class<? extends RestChildren> restChildrenClass; 745 private final Class<? extends DebugEnablement> debugEnablement; 746 private final Class<? extends Serializer>[] serializers; 747 private final Class<?>[] children, parsers; 748 private final Swagger swagger; 749 private final String disableContentParam, allowedHeaderParams, allowedMethodHeaders, allowedMethodParams, clientVersionHeader, config, debug, debugOn, defaultAccept, defaultCharset, 750 defaultContentType, maxInput, messages, path, renderResponseStackTraces, roleGuard, rolesDeclared, siteName, uriAuthority, uriContext, uriRelativity, uriResolution; 751 private final String[] consumes, produces, defaultRequestAttributes, defaultRequestHeaders, defaultResponserHeaders, title; 752 private final Query[] queryParams; 753 private final Header[] headerParams; 754 private final Path[] pathParams; 755 private final FormData[] formDataParams; 756 757 Object(RestAnnotation.Builder b) { 758 super(b); 759 description = copyOf(b.description); 760 disableContentParam = b.disableContentParam; 761 allowedHeaderParams = b.allowedHeaderParams; 762 allowedMethodHeaders = b.allowedMethodHeaders; 763 allowedMethodParams = b.allowedMethodParams; 764 beanStore = b.beanStore; 765 callLogger = b.callLogger; 766 children = copyOf(b.children); 767 clientVersionHeader = b.clientVersionHeader; 768 config = b.config; 769 consumes = copyOf(b.consumes); 770 converters = copyOf(b.converters); 771 debug = b.debug; 772 debugEnablement = b.debugEnablement; 773 debugOn = b.debugOn; 774 defaultAccept = b.defaultAccept; 775 defaultCharset = b.defaultCharset; 776 defaultContentType = b.defaultContentType; 777 defaultRequestAttributes = copyOf(b.defaultRequestAttributes); 778 defaultRequestHeaders = copyOf(b.defaultRequestHeaders); 779 defaultResponserHeaders = copyOf(b.defaultResponseHeaders); 780 encoders = copyOf(b.encoders); 781 guards = copyOf(b.guards); 782 maxInput = b.maxInput; 783 messages = b.messages; 784 parsers = copyOf(b.parsers); 785 partParser = b.partParser; 786 partSerializer = b.partSerializer; 787 path = b.path; 788 produces = copyOf(b.produces); 789 renderResponseStackTraces = b.renderResponseStackTraces; 790 responseProcessors = copyOf(b.responseProcessors); 791 restChildrenClass = b.restChildrenClass; 792 restOpArgs = copyOf(b.restOpArgs); 793 roleGuard = b.roleGuard; 794 rolesDeclared = b.rolesDeclared; 795 serializers = copyOf(b.serializers); 796 siteName = b.siteName; 797 staticFiles = b.staticFiles; 798 swagger = b.swagger; 799 swaggerProvider = b.swaggerProvider; 800 title = copyOf(b.title); 801 uriAuthority = b.uriAuthority; 802 uriContext = b.uriContext; 803 uriRelativity = b.uriRelativity; 804 uriResolution = b.uriResolution; 805 queryParams = copyOf(b.queryParams); 806 headerParams = copyOf(b.headerParams); 807 pathParams = copyOf(b.pathParams); 808 formDataParams = copyOf(b.formDataParams); 809 } 810 811 @Override /* Overridden from Rest */ 812 public String allowedHeaderParams() { 813 return allowedHeaderParams; 814 } 815 816 @Override /* Overridden from Rest */ 817 public String allowedMethodHeaders() { 818 return allowedMethodHeaders; 819 } 820 821 @Override /* Overridden from Rest */ 822 public String allowedMethodParams() { 823 return allowedMethodParams; 824 } 825 826 @Override /* Overridden from Rest */ 827 public Class<? extends BeanStore> beanStore() { 828 return beanStore; 829 } 830 831 @Override /* Overridden from Rest */ 832 public Class<? extends CallLogger> callLogger() { 833 return callLogger; 834 } 835 836 @Override /* Overridden from Rest */ 837 public Class<?>[] children() { 838 return children; 839 } 840 841 @Override /* Overridden from Rest */ 842 public String clientVersionHeader() { 843 return clientVersionHeader; 844 } 845 846 @Override /* Overridden from Rest */ 847 public String config() { 848 return config; 849 } 850 851 @Override /* Overridden from Rest */ 852 public String[] consumes() { 853 return consumes; 854 } 855 856 @Override /* Overridden from Rest */ 857 public Class<? extends RestConverter>[] converters() { 858 return converters; 859 } 860 861 @Override /* Overridden from Rest */ 862 public String debug() { 863 return debug; 864 } 865 866 @Override /* Overridden from Rest */ 867 public Class<? extends DebugEnablement> debugEnablement() { 868 return debugEnablement; 869 } 870 871 @Override /* Overridden from Rest */ 872 public String debugOn() { 873 return debugOn; 874 } 875 876 @Override /* Overridden from Rest */ 877 public String defaultAccept() { 878 return defaultAccept; 879 } 880 881 @Override /* Overridden from Rest */ 882 public String defaultCharset() { 883 return defaultCharset; 884 } 885 886 @Override /* Overridden from Rest */ 887 public String defaultContentType() { 888 return defaultContentType; 889 } 890 891 @Override /* Overridden from Rest */ 892 public String[] defaultRequestAttributes() { 893 return defaultRequestAttributes; 894 } 895 896 @Override /* Overridden from Rest */ 897 public String[] defaultRequestHeaders() { 898 return defaultRequestHeaders; 899 } 900 901 @Override /* Overridden from Rest */ 902 public String[] defaultResponseHeaders() { 903 return defaultResponserHeaders; 904 } 905 906 @Override /* Overridden from Rest */ 907 public String disableContentParam() { 908 return disableContentParam; 909 } 910 911 @Override /* Overridden from Rest */ 912 public Class<? extends Encoder>[] encoders() { 913 return encoders; 914 } 915 916 @Override /* Overridden from Rest */ 917 public FormData[] formDataParams() { 918 return formDataParams; 919 } 920 921 @Override /* Overridden from Rest */ 922 public Class<? extends RestGuard>[] guards() { 923 return guards; 924 } 925 926 @Override /* Overridden from Rest */ 927 public Header[] headerParams() { 928 return headerParams; 929 } 930 931 @Override /* Overridden from Rest */ 932 public String maxInput() { 933 return maxInput; 934 } 935 936 @Override /* Overridden from Rest */ 937 public String messages() { 938 return messages; 939 } 940 941 @Override /* Overridden from Rest */ 942 public Class<?>[] parsers() { 943 return parsers; 944 } 945 946 @Override /* Overridden from Rest */ 947 public Class<? extends HttpPartParser> partParser() { 948 return partParser; 949 } 950 951 @Override /* Overridden from Rest */ 952 public Class<? extends HttpPartSerializer> partSerializer() { 953 return partSerializer; 954 } 955 956 @Override /* Overridden from Rest */ 957 public String path() { 958 return path; 959 } 960 961 @Override /* Overridden from Rest */ 962 public Path[] pathParams() { 963 return pathParams; 964 } 965 966 @Override /* Overridden from Rest */ 967 public String[] produces() { 968 return produces; 969 } 970 971 @Override /* Overridden from Rest */ 972 public Query[] queryParams() { 973 return queryParams; 974 } 975 976 @Override /* Overridden from Rest */ 977 public String renderResponseStackTraces() { 978 return renderResponseStackTraces; 979 } 980 981 @Override /* Overridden from Rest */ 982 public Class<? extends ResponseProcessor>[] responseProcessors() { 983 return responseProcessors; 984 } 985 986 @Override /* Overridden from Rest */ 987 public Class<? extends RestChildren> restChildrenClass() { 988 return restChildrenClass; 989 } 990 991 @Override /* Overridden from Rest */ 992 public Class<? extends RestOpArg>[] restOpArgs() { 993 return restOpArgs; 994 } 995 996 @Override /* Overridden from Rest */ 997 public String roleGuard() { 998 return roleGuard; 999 } 1000 1001 @Override /* Overridden from Rest */ 1002 public String rolesDeclared() { 1003 return rolesDeclared; 1004 } 1005 1006 @Override /* Overridden from Rest */ 1007 public Class<? extends Serializer>[] serializers() { 1008 return serializers; 1009 } 1010 1011 @Override /* Overridden from Rest */ 1012 public String siteName() { 1013 return siteName; 1014 } 1015 1016 @Override /* Overridden from Rest */ 1017 public Class<? extends StaticFiles> staticFiles() { 1018 return staticFiles; 1019 } 1020 1021 @Override /* Overridden from Rest */ 1022 public Swagger swagger() { 1023 return swagger; 1024 } 1025 1026 @Override /* Overridden from Rest */ 1027 public Class<? extends SwaggerProvider> swaggerProvider() { 1028 return swaggerProvider; 1029 } 1030 1031 @Override /* Overridden from Rest */ 1032 public String[] title() { 1033 return title; 1034 } 1035 1036 @Override /* Overridden from Rest */ 1037 public String uriAuthority() { 1038 return uriAuthority; 1039 } 1040 1041 @Override /* Overridden from Rest */ 1042 public String uriContext() { 1043 return uriContext; 1044 } 1045 1046 @Override /* Overridden from Rest */ 1047 public String uriRelativity() { 1048 return uriRelativity; 1049 } 1050 1051 @Override /* Overridden from Rest */ 1052 public String uriResolution() { 1053 return uriResolution; 1054 } 1055 1056 @Override /* Overridden from annotation */ 1057 public String[] description() { 1058 return description; 1059 } 1060 } 1061 1062 /** Default value */ 1063 public static final Rest DEFAULT = create().build(); 1064 1065 /** 1066 * Instantiates a new builder for this class. 1067 * 1068 * @return A new builder object. 1069 */ 1070 public static Builder create() { 1071 return new Builder(); 1072 } 1073 1074 /** 1075 * Instantiates a new builder for this class. 1076 * 1077 * @param on The targets this annotation applies to. 1078 * @return A new builder object. 1079 */ 1080 public static Builder create(Class<?>...on) { 1081 return create().on(on); 1082 } 1083 1084 /** 1085 * Instantiates a new builder for this class. 1086 * 1087 * @param on The targets this annotation applies to. 1088 * @return A new builder object. 1089 */ 1090 public static Builder create(String...on) { 1091 return create().on(on); 1092 } 1093}