001    /*
002     * Copyright 2001-2004 The Apache Software Foundation.
003     * 
004     * Licensed under the Apache License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     * 
008     *      http://www.apache.org/licenses/LICENSE-2.0
009     * 
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013     * See the License for the specific language governing permissions and
014     * limitations under the License.
015     */
016    package javax.xml.rpc;
017    
018    import javax.xml.namespace.QName;
019    import java.util.Iterator;
020    import java.util.List;
021    import java.util.Map;
022    
023    /**
024     * The <code>javax.xml.rpc.Call</code> interface provides support
025     * for the dynamic invocation of a service endpoint. The
026     * <code>javax.xml.rpc.Service</code> interface acts as a factory
027     * for the creation of <code>Call</code> instances.
028     * <p>
029     * Once a <code>Call</code> instance is created, various setter
030     * and getter methods may be used to configure this <code>Call</code>
031     * instance.
032     *
033     * @version 1.0
034     */
035    public interface Call {
036    
037        /**
038         * Standard property: User name for authentication
039         * <p>Type: <code>java.lang.String
040         */
041        public static final String USERNAME_PROPERTY =
042            "javax.xml.rpc.security.auth.username";
043    
044        /**
045         * Standard property: Password for authentication
046         * <p>Type: <code>java.lang.String</code>
047         */
048        public static final String PASSWORD_PROPERTY =
049            "javax.xml.rpc.security.auth.password";
050    
051        /**
052         * Standard property for operation style. This property is
053         * set to "rpc" if the operation style is rpc; "document"
054         * if the operation style is document.
055         * <p>Type: <code>java.lang.String</code>
056         */
057        public static final String OPERATION_STYLE_PROPERTY =
058            "javax.xml.rpc.soap.operation.style";
059    
060        /**
061         * Standard property for SOAPAction. This boolean property
062         * indicates whether or not SOAPAction is to be used. The
063         * default value of this property is false indicating that
064         * the SOAPAction is not used.
065         * <p>Type: <code>java.lang.Boolean</code>
066         */
067        public static final String SOAPACTION_USE_PROPERTY =
068            "javax.xml.rpc.soap.http.soapaction.use";
069    
070        /**
071         * Standard property for SOAPAction. Indicates the SOAPAction
072         * URI if the <code>javax.xml.rpc.soap.http.soapaction.use</code>
073         * property is set to <code>true</code>.
074         * <p>Type: <code>java.lang.String</code>
075         */
076        public static final String SOAPACTION_URI_PROPERTY =
077            "javax.xml.rpc.soap.http.soapaction.uri";
078    
079        /**
080         * Standard property for encoding Style:  Encoding style specified
081         * as a namespace URI. The default value is the SOAP 1.1 encoding
082         * <code>http://schemas.xmlsoap.org/soap/encoding/</code>
083         * <p>Type: <code>java.lang.String</code>
084         */
085        public static final String ENCODINGSTYLE_URI_PROPERTY =
086            "javax.xml.rpc.encodingstyle.namespace.uri";
087    
088        /**
089         * Standard property: This boolean property is used by a service
090         * client to indicate whether or not it wants to participate in
091         * a session with a service endpoint. If this property is set to
092         * true, the service client indicates that it wants the session
093         * to be maintained. If set to false, the session is not maintained.
094         * The default value for this property is <code>false</code>.
095         * <p>Type: <code>java.lang.Boolean</code>
096         */
097        public static final String SESSION_MAINTAIN_PROPERTY =
098            "javax.xml.rpc.session.maintain";
099    
100        /**
101         * Indicates whether <code>addParameter</code> and
102         * <code>setReturnType</code> methods
103         * are to be invoked to specify the parameter and return type
104         * specification for a specific operation.
105         *
106         * @param operationName Qualified name of the operation
107         *
108         * @return Returns true if the Call implementation class
109         *      requires addParameter and setReturnType to be
110         *      invoked in the client code for the specified
111         *      operation. This method returns false otherwise.
112         */
113        public boolean isParameterAndReturnSpecRequired(QName operationName);
114    
115        /**
116         * Adds a parameter type and mode for a specific  operation.
117         * Note that the client code may not call any
118         * <code>addParameter</code> and <code>setReturnType</code>
119         * methods before calling the <code>invoke</code> method. In
120         * this case, the Call implementation class determines the
121         * parameter types by using reflection on parameters, using
122         * the WSDL description and configured type mapping registry.
123         *
124         * @param paramName Name of the parameter
125         * @param xmlType XML datatype of the parameter
126         * @param parameterMode Mode of the parameter-whether
127         *                <code>ParameterMode.IN</code>,
128         *                <code>ParameterMode.OUT</code>,
129         *                or <code>ParameterMode.INOUT
130         * @throws JAXRPCException This exception may
131         *     be thrown if the method <code>isParameterAndReturnSpecRequired</code>
132         *     returns <code>false</code> for this operation.
133         * @throws java.lang.IllegalArgumentException If any illegal
134         *     parameter name or XML type is specified
135         */
136        public void addParameter(String paramName, QName xmlType,
137                                 ParameterMode parameterMode);
138    
139        /**
140         * Adds a parameter type and mode for a specific  operation.
141         * This method is used to specify the Java type for either
142         * OUT or INOUT parameters.
143         *
144         * @param paramName Name of the parameter
145         * @param xmlType XML datatype of the parameter
146         * @param javaType The Java class of the parameter
147         * @param parameterMode Mode of the parameter-whether
148         *                ParameterMode.IN, OUT or INOUT
149         * @throws JAXRPCException <ul>
150         *
151         *     <li>This exception may be thrown if this method is
152         *     invoked when the method <code>isParameterAndReturnSpecRequired</code>
153         *     returns <code>false</code>.
154         *     <li>If specified XML type and Java type mapping
155         *     is not valid. For example, <code>TypeMappingRegistry</code>
156         *     has no serializers for this mapping.
157         *     </ul>
158         * @throws java.lang.IllegalArgumentException  If any illegal
159         *     parameter name or XML type is specified
160         * @throws java.lang.UnsupportedOperationException If this
161         *     method is not supported
162         */
163        public void addParameter(String paramName, QName xmlType, Class javaType,
164                                 ParameterMode parameterMode);
165    
166        /**
167         * Gets the XML type of a parameter by name.
168         *
169         * @param paramName name of the parameter
170         *
171         * @return Returns XML type for the specified parameter
172         */
173        public QName getParameterTypeByName(String paramName);
174    
175        /**
176         * Sets the return type for a specific operation. Invoking
177         * <code>setReturnType(null)</code> removes the return
178         * type for this Call object.
179         *
180         * @param xmlType XML data type of the return value
181         * @throws JAXRPCException This exception
182         *     may be thrown when the method
183         *     <code>isParameterAndReturnSpecRequired</code> returns
184         *     <code>false</code>.
185         * @throws java.lang.IllegalArgumentException If an illegal
186         *     XML type is specified
187         */
188        public void setReturnType(QName xmlType);
189    
190        /**
191         * Sets the return type for a specific operation.
192         *
193         * @param xmlType XML data type of the return value
194         * @param javaType Java class of the return value
195         * @throws JAXRPCException <ul>
196         *     <li>This exception may be thrown if this method is
197         *     invoked when the method <code>isParameterAndReturnSpecRequired</code>
198         *     returns <code>false</code>.
199         *     <li>If XML type and Java type cannot be mapped
200         *     using the standard type mapping or TypeMapping
201         *     registry
202         *     </ul>
203         * @throws java.lang.UnsupportedOperationException If this
204         *     method is not supported
205         * @throws java.lang.IllegalArgumentException If an illegal
206         *     XML type is specified
207         */
208        public void setReturnType(QName xmlType, Class javaType);
209    
210        /**
211         * Gets the return type for a specific operation.
212         *
213         * @return  the XML type for the return value
214         */
215        public QName getReturnType();
216    
217        /**
218         * Removes all specified parameters from this <code>Call</code> instance.
219         * Note that this method removes only the parameters and not
220         * the return type. The <code>setReturnType(null)</code> is
221         * used to remove the return type.
222         *
223         * @throws JAXRPCException This exception may be
224         *     thrown If this method is called when the method
225         *     <code>isParameterAndReturnSpecRequired</code>
226         *     returns <code>false</code> for this Call's operation.
227         */
228        public void removeAllParameters();
229    
230        /**
231         * Gets the name of the operation to be invoked using this Call instance.
232         *
233         * @return Qualified name of the operation
234         */
235        public QName getOperationName();
236    
237        /**
238         * Sets the name of the operation to be invoked using this
239         * <code>Call</code> instance.
240         *
241         * @param operationName QName of the operation to be
242         *                   invoked using the Call instance
243         */
244        public void setOperationName(QName operationName);
245    
246        /**
247         * Gets the qualified name of the port type.
248         *
249         * @return Qualified name of the port type
250         */
251        public QName getPortTypeName();
252    
253        /**
254         * Sets the qualified name of the port type.
255         *
256         * @param portType Qualified name of the port type
257         */
258        public void setPortTypeName(QName portType);
259    
260        /**
261         * Sets the address of the target service endpoint.
262         * This address must correspond to the transport specified
263         * in the binding for this <code>Call</code> instance.
264         *
265         * @param address Address of the target service endpoint;
266         *             specified as an URI
267         */
268        public void setTargetEndpointAddress(String address);
269    
270        /**
271         * Gets the address of a target service endpoint.
272         *
273         * @return Endpoint address of the target service port as an URI
274         */
275        public String getTargetEndpointAddress();
276    
277        /**
278         * Sets the value for a named property. JAX-RPC specification
279         * specifies a standard set of properties that may be passed
280         * to the <code>Call.setProperty</code> method.
281         *
282         * @param name Name of the property
283         * @param value Value of the property
284         * @throws JAXRPCException <ul>
285         *     <li>If an optional standard property name is
286         *         specified, however this <code>Call</code> implementation
287         *         class does not support the configuration of
288         *         this property.
289         *     <li>If an invalid (or unsupported) property name is
290         *         specified or if a value of mismatched property
291         *         type is passed.
292         *     <li>If there is any error in the configuration of
293         *         a valid property.
294         *     </ul>
295         */
296        public void setProperty(String name, Object value);
297    
298        /**
299         * Gets the value of a named property.
300         *
301         * @param name Name of the property
302         *
303         * @return Value of the named property
304         * @throws JAXRPCException if an invalid or
305         *     unsupported property name is passed.
306         */
307        public Object getProperty(String name);
308    
309        /**
310         * Removes a named property.
311         *
312         * @param name Name of the property
313         * @throws JAXRPCException if an invalid or
314         *     unsupported property name is passed.
315         */
316        public void removeProperty(String name);
317    
318        /**
319         * Gets the names of configurable properties supported by
320         * this <code>Call</code> object.
321         *
322         * @return Iterator for the property names
323         */
324        public Iterator getPropertyNames();
325    
326        // Remote Method Invocation methods
327    
328        /**
329         * Invokes a specific operation using a synchronous request-response
330         * interaction mode.
331         *
332         * @param inputParams Object[]--Parameters for this invocation. This
333         *     includes only the input params
334         *
335         * @return Returns the return value or <code>null</code>
336         *
337         * @throws java.rmi.RemoteException if there is any error in the remote
338         *                                    method invocation or if the Call
339         *                                    object is not configured properly.
340         * @throws javax.xml.rpc.soap.SOAPFaultException Indicates a SOAP fault
341         * @throws JAXRPCException <ul>
342         *
343         *     <li>If there is an error in the configuration of the
344         *         <code>Call</code> object
345         *     <li>If <code>inputParams</code> do not match the required parameter
346         *         set (as specified through the <code>addParameter</code>
347         *         invocations or in the corresponding WSDL)
348         *     <li>If parameters and return type are incorrectly
349         *         specified
350         *     </ul>
351         */
352        public Object invoke(Object[] inputParams) throws java.rmi.RemoteException;
353    
354        /**
355         * Invokes a specific operation using a synchronous request-response
356         * interaction mode.
357         *
358         * @param operationName QName of the operation
359         * @param inputParams Object[]--Parameters for this invocation. This
360         *     includes only the input params.
361         *
362         * @return Return value or null
363         *
364         * @throws java.rmi.RemoteException if there is any error in the
365         *     remote method invocation.
366         * @throws javax.xml.rpc.soap.SOAPFaultException Indicates a SOAP fault
367         * @throws JAXRPCException <ul>
368         *     <li>If there is an error in the configuration of the
369         *         <code>Cal</code>l object
370         *     <li>If <code>inputParam</code>s do not match the required parameter
371         *         set (as specified through the <code>addParameter</code>
372         *         invocations or in the corresponding WSDL)
373         *     <li>If parameters and return type are incorrectly
374         *         specified
375         *     </ul>
376         */
377        public Object invoke(QName operationName, Object[] inputParams)
378            throws java.rmi.RemoteException;
379    
380        /**
381         * Invokes a remote method using the one-way interaction mode. The
382         * client thread does not block waiting for the completion of the
383         * server processing for this remote method invocation. This method
384         * must not throw any remote exceptions. This method may throw a
385         * <code>JAXRPCException</code> during the processing of the one-way
386         * remote call.
387         *
388         * @param params  Object[]--Parameters for this invocation. This
389         *     includes only the input params.
390         *
391         * @throws JAXRPCException if there is an error in the
392         *     configuration of the <code>Call</code> object (example: a
393         *     non-void return type has been incorrectly specified for the
394         *     one-way call) or if there is any error during the
395         *     invocation of the one-way remote call
396         */
397        public void invokeOneWay(Object[] params);
398    
399        /**
400         * Returns a <code>Map</code> of {name, value} for the output parameters of
401         * the last invoked operation. The parameter names in the
402         * returned Map are of type <code>java.lang.String</code>.
403         *
404         * @return Map Output parameters for the last <code>Call.invoke()</code>.
405         *         Empty <code>Map</code> is returned if there are no output
406         *         parameters.
407         * @throws javax.xml.rpc.JAXRPCException If this method is invoked for a
408         *     one-way operation or is invoked before any
409         *     <code>invoke</code> method has been called.
410         */
411        public Map getOutputParams();
412    
413        /**
414         * Returns a <code>List</code> values for the output parameters
415         * of the last invoked operation.
416         *
417         * @return java.util.List Values for the output parameters. An
418         *         empty <code>List</code> is returned if there are
419         *         no output values.
420         *
421         * @throws JAXRPCException If this method is invoked for a
422         *     one-way operation or is invoked before any
423         *     <code>invoke</code> method has been called.
424         */
425        public List getOutputValues();
426    }
427