View Javadoc
1   /*
2    * Copyright (c) 1997, 2012, 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 com.sun.xml.internal.ws.api.model;
27  
28  import com.sun.xml.internal.bind.api.Bridge;
29  
30  import javax.xml.namespace.QName;
31  import javax.xml.ws.Holder;
32  import javax.jws.WebParam;
33  import javax.jws.WebParam.Mode;
34  
35  /**
36   * Runtime Parameter that abstracts the annotated java parameter
37   * <p/>
38   * <p/>
39   * A parameter may be bound to a header, a body, or an attachment.
40   * Note that when it's bound to a body, it's bound to a body,
41   * it binds to the whole payload.
42   * <p/>
43   * <p/>
44   * Sometimes multiple Java parameters are packed into the payload,
45   * in which case the subclass {@link com.sun.xml.internal.ws.model.WrapperParameter} is used.
46   *
47   * @author Vivek Pandey
48   */
49  public interface Parameter {
50      /**
51       * Gets the root {@link SEIModel} that owns this model.
52       */
53      SEIModel getOwner();
54  
55      /**
56       * Gets the parent {@link JavaMethod} to which this parameter belongs.
57       */
58      JavaMethod getParent();
59  
60      /**
61       * @return Returns the {@link QName} of the payload/infoset of a SOAP body or header.
62       */
63      QName getName();
64  
65      /**
66       * Gives the {@link Bridge} associated with this Parameter
67       * @deprecated
68       */
69      Bridge getBridge();
70  
71      /**
72       * @return Returns the mode, such as IN, OUT or INOUT.
73       */
74      Mode getMode();
75  
76      /**
77       * Position of a parameter in the method signature. It would be -1 if the parameter is a return.
78       *
79       * @return Returns the index.
80       */
81      int getIndex();
82  
83      /**
84       * @return true if <tt>this instanceof {@link com.sun.xml.internal.ws.model.WrapperParameter}</tt>.
85       */
86      boolean isWrapperStyle();
87  
88      /**
89       * Returns true if this parameter is bound to the return value from the {@link JavaMethod}.
90       *
91       * <p>
92       * Just the convenience method for <tt>getIndex()==-1</tt>
93       */
94      boolean isReturnValue();
95  
96      /**
97       * Returns the binding associated with the parameter. For IN parameter the binding will be
98       * same as {@link #getInBinding()}, for OUT parameter the binding will be same as
99       * {@link #getOutBinding()} and for INOUT parameter the binding will be same as calling
100      * {@link #getInBinding()}
101      *
102      * @return the Binding for this Parameter. Returns {@link ParameterBinding#BODY} by default.
103      */
104     ParameterBinding getBinding();
105 
106     /**
107      * Returns the {@link ParameterBinding} associated with the IN mode
108      *
109      * @return the binding
110      */
111     ParameterBinding getInBinding();
112 
113     /**
114      * Returns the {@link ParameterBinding} associated with the OUT mode
115      *
116      * @return the binding
117      */
118     ParameterBinding getOutBinding();
119 
120     /**
121      * @return true if the {@link Mode} associated with the parameter is {@link Mode#IN} and false otherwise.
122      */
123     boolean isIN();
124 
125     /**
126      * @return true if the {@link Mode} associated with the parameter is {@link Mode#OUT} and false otherwise.
127      */
128     boolean isOUT();
129 
130     /**
131      * @return true if the {@link Mode} associated with the parameter is {@link Mode#INOUT} and false otherwise.
132      */
133     boolean isINOUT();
134 
135     /**
136      * If true, this parameter maps to the return value of a method invocation.
137      *
138      * <p>
139      * {@link JavaMethod#getResponseParameters()} is guaranteed to have
140      * at most one such {@link Parameter}. Note that there coule be none,
141      * in which case the method returns <tt>void</tt>.
142      *
143      * <p>
144      * Other response parameters are bound to {@link Holder}.
145      */
146     boolean isResponse();
147 
148     /**
149      * Gets the holder value if applicable. To be called for inbound client side
150      * message.
151      *
152      * @param obj
153      * @return the holder value if applicable.
154      */
155     Object getHolderValue(Object obj);
156 
157     /**
158      * Gives the wsdl:part@name value
159      *
160      * @return Value of {@link WebParam#partName()} annotation if present,
161      *         otherwise its the localname of the infoset associated with the parameter
162      */
163     String getPartName();
164 }