1 /*
   2  * Copyright (c) 2005, 2017, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.  Oracle designates this
   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Oracle in the LICENSE file that accompanied this code.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 package javax.xml.ws.soap;
  27 
  28 import java.lang.annotation.Documented;
  29 import java.lang.annotation.Target;
  30 import java.lang.annotation.ElementType;
  31 import java.lang.annotation.Retention;
  32 import java.lang.annotation.RetentionPolicy;
  33 
  34 import javax.xml.ws.WebServiceRef;
  35 import javax.xml.ws.WebServiceProvider;
  36 import javax.xml.ws.soap.AddressingFeature.Responses;
  37 import javax.xml.ws.spi.WebServiceFeatureAnnotation;
  38 
  39 /**
  40  * This annotation represents the use of WS-Addressing with either
  41  * the SOAP 1.1/HTTP or SOAP 1.2/HTTP binding. Using this annotation
  42  * with any other binding is undefined.
  43  * <p>
  44  * This annotation MUST only be used in conjunction with the
  45  * {@code javax.jws.WebService}, {@link WebServiceProvider},
  46  *  and {@link WebServiceRef} annotations.
  47  * When used with a {@code javax.jws.WebService} annotation, this
  48  * annotation MUST only be used on the service endpoint implementation
  49  * class.
  50  * When used with a {@code WebServiceRef} annotation, this annotation
  51  * MUST only be used when a proxy instance is created. The injected SEI
  52  * proxy, and endpoint MUST honor the values of the {@code Addressing}
  53  * annotation.
  54  * <p>
  55  * This annotation's behaviour is defined by the corresponding feature
  56  * {@link AddressingFeature}.
  57  *
  58  * @since 1.6, JAX-WS 2.1
  59  */
  60 @Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD})
  61 @Retention(RetentionPolicy.RUNTIME)
  62 @Documented
  63 @WebServiceFeatureAnnotation(id=AddressingFeature.ID,bean=AddressingFeature.class)
  64 public @interface Addressing {
  65     /**
  66      * Specifies if this feature is enabled or disabled. If enabled, it means
  67      * the endpoint supports WS-Addressing but does not require its use.
  68      * Corresponding
  69      * <a href="http://www.w3.org/TR/ws-addr-metadata/#wspolicyaddressing">
  70      * 3.1.1 Addressing Assertion</a> must be generated in the generated WSDL.
  71      *
  72      * @return {@code true} if endpoint supports WS-Addressing, {@code false} otherwise
  73      */
  74     boolean enabled() default true;
  75 
  76     /**
  77      * If addressing is enabled, this property determines whether the endpoint
  78      * requires WS-Addressing. If required is true, the endpoint requires
  79      * WS-Addressing and WS-Addressing headers MUST
  80      * be present on incoming messages. A corresponding
  81      * <a href="http://www.w3.org/TR/ws-addr-metadata/#wspolicyaddressing">
  82      * 3.1.1 Addressing Assertion</a> must be generated in the WSDL.
  83      *
  84      * @return {@code true} if endpoint requires WS-Addressing, {@code false} otherwise
  85      */
  86     boolean required() default false;
  87 
  88     /**
  89      * If addressing is enabled, this property determines whether endpoint
  90      * requires the use of anonymous responses, or non-anonymous responses,
  91      * or all.
  92      *
  93      * <p>
  94      * {@link Responses#ALL} supports all response types and this is the
  95      * default value.
  96      *
  97      * <p>
  98      * {@link Responses#ANONYMOUS} requires the use of only anonymous
  99      * responses. It will result into wsam:AnonymousResponses nested assertion
 100      * as specified in
 101      * <a href="http://www.w3.org/TR/ws-addr-metadata/#wspolicyanonresponses">
 102      * 3.1.2 AnonymousResponses Assertion</a> in the generated WSDL.
 103      *
 104      * <p>
 105      * {@link Responses#NON_ANONYMOUS} requires the use of only non-anonymous
 106      * responses. It will result into
 107      * wsam:NonAnonymousResponses nested assertion as specified in
 108      * <a href="http://www.w3.org/TR/ws-addr-metadata/#wspolicynonanonresponses">
 109      * 3.1.3 NonAnonymousResponses Assertion</a> in the generated WSDL.
 110      *
 111      * @return supported response types
 112      * @since 1.7, JAX-WS 2.2
 113      */
 114     Responses responses() default Responses.ALL;
 115 
 116 }