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.handler;
017    
018    import javax.xml.namespace.QName;
019    
020    /**
021     * The <code>javax.xml.rpc.handler.Handler</code> interface is
022     * required to be implemented by a SOAP message handler. The
023     * <code>handleRequest</code>, <code>handleResponse</code>
024     * and <code>handleFault</code> methods for a SOAP message
025     * handler get access to the <code>SOAPMessage</code> from the
026     * <code>SOAPMessageContext</code>. The implementation of these
027     * methods can modify the <code>SOAPMessage</code> including the
028     * headers and body elements.
029     *
030     * @version 1.0
031     */
032    public interface Handler {
033    
034        /**
035         * The <code>handleRequest</code> method processes the request message.
036         *
037         * @param context MessageContext parameter provides access to the request
038         *                  message.
039         * @return boolean boolean Indicates the processing mode
040         *            <ul>
041         *            <li>Return <code>true</code> to indicate continued
042         *                processing of the request handler chain. The
043         *                <code>HandlerChain</code>
044         *                takes the responsibility of invoking the next
045         *                entity. The next entity may be the next handler
046         *                in the <code>HandlerChain</code> or if this
047         *                handler is the last handler in the chain, the
048         *                next entity is the service endpoint object.
049         *            <li>Return <code>false</code> to indicate blocking
050         *                of the request handler chain. In this case,
051         *                further processing of the request handler chain
052         *                is blocked and the target service endpoint is
053         *                not dispatched. The JAX-RPC runtime system takes
054         *                the responsibility of invoking the response
055         *                handler chain next with the SOAPMessageContext.
056         *                The Handler implementation class has the the
057         *                responsibility of setting the appropriate response
058         *                SOAP message in either handleRequest and/or
059         *                handleResponse method. In the default processing
060         *                model, the response handler chain starts processing
061         *                from the same Handler instance (that returned false)
062         *                and goes backward in the execution sequence.
063         *             </ul>
064         *
065         * @throws javax.xml.rpc.JAXRPCException
066         *                indicates a handler-specific
067         *                runtime error. If <code>JAXRPCException</code> is thrown
068         *                by a handleRequest method, the HandlerChain
069         *                terminates the further processing of this handler
070         *                chain. On the server side, the HandlerChain
071         *                generates a SOAP fault that indicates that the
072         *                message could not be processed for reasons not
073         *                directly attributable to the contents of the
074         *                message itself but rather to a runtime error
075         *                during the processing of the message. On the
076         *                client side, the exception is propagated to
077         *                the client code
078         * @throws javax.xml.rpc.soap.SOAPFaultException
079         *                indicates a SOAP fault. The Handler
080         *                implementation class has the the responsibility
081         *                of setting the SOAP fault in the SOAP message in
082         *                either handleRequest and/or handleFault method.
083         *                If SOAPFaultException is thrown by a server-side
084         *                request handler's handleRequest method, the
085         *                HandlerChain terminates the further processing
086         *                of the request handlers in this handler chain
087         *                and invokes the handleFault method on the
088         *                HandlerChain with the SOAP message context. Next,
089         *                the HandlerChain invokes the handleFault method
090         *                on handlers registered in the handler chain,
091         *                beginning with the Handler instance that threw
092         *                the exception and going backward in execution. The
093         *                client-side request handler's handleRequest method
094         *                should not throw the SOAPFaultException.
095         */
096        public boolean handleRequest(MessageContext context);
097    
098        /**
099         * The <code>handleResponse</code> method processes the response SOAP message.
100         *
101         * @param context MessageContext parameter provides access to
102         *            the response SOAP message
103         *
104         * @return boolean Indicates the processing mode
105         *            <ul>
106         *            <li>Return <code>true</code> to indicate continued
107         *                processing ofthe response handler chain. The
108         *                HandlerChain invokes the <code>handleResponse</code>
109         *                method on the next <code>Handler</code> in
110         *                the handler chain.
111         *            <li>Return <code>false</code> to indicate blocking
112         *                of the response handler chain. In this case, no
113         *                other response handlers in the handler chain
114         *                are invoked.
115         *            </ul>
116         *
117         * @throws javax.xml.rpc.JAXRPCException
118         *                indicates a handler specific runtime error.
119         *                If JAXRPCException is thrown by a handleResponse
120         *                method, the HandlerChain terminates the further
121         *                processing of this handler chain. On the server side,
122         *                the HandlerChain generates a SOAP fault that
123         *                indicates that the message could not be processed
124         *                for reasons not directly attributable to the contents
125         *                of the message itself but rather to a runtime error
126         *                during the processing of the message. On the client
127         *                side, the runtime exception is propagated to the
128         *                client code.
129         */
130        public boolean handleResponse(MessageContext context);
131    
132        /**
133         * The <code>handleFault</code> method processes the SOAP faults
134         * based on the SOAP message processing model.
135         *
136         * @param  context MessageContext parameter provides access to
137         *            the SOAP message
138         * @return boolean Indicates the processing mode
139         *            <ul>
140         *            <li>Return <code>true</code> to indicate continued
141         *                processing of SOAP Fault. The HandlerChain invokes
142         *                the <code>handleFault</code> method on the
143         *                next <code>Handler</code> in the handler chain.
144         *            <li>Return <code>false</code> to indicate end
145         *                of the SOAP fault processing. In this case, no
146         *                other handlers in the handler chain
147         *                are invoked.
148         *            </ul>
149         * @throws javax.xml.rpc.JAXRPCException indicates handler specific runtime
150         *                error. If JAXRPCException is thrown by a handleFault
151         *                method, the HandlerChain terminates the further
152         *                processing of this handler chain. On the server side,
153         *                the HandlerChain generates a SOAP fault that
154         *                indicates that the message could not be processed
155         *                for reasons not directly attributable to the contents
156         *                of the message itself but rather to a runtime error
157         *                during the processing of the message. On the client
158         *                side, the JAXRPCException is propagated to the
159         *                client code.
160         */
161        public boolean handleFault(MessageContext context);
162    
163        /**
164         * The <code>init</code> method enables the Handler instance to
165         * initialize itself. The <code>init</code> method passes the
166         * handler configuration as a <code>HandlerInfo</code> instance.
167         * The HandlerInfo is used to configure the Handler (for example:
168         * setup access to an external resource or service) during the
169         * initialization.
170         * <p>
171         * In the init method, the Handler class may get access to
172         * any resources (for example; access to a logging service or
173         * database) and maintain these as part of its instance variables.
174         * Note that these instance variables must not have any state
175         * specific to the SOAP message processing performed in the
176         * various handle method.
177         *
178         * @param config HandlerInfo configuration for the initialization of this
179         *              handler
180         *
181         * @param config
182         * @throws javax.xml.rpc.JAXRPCException if initialization of the handler
183         *              fails
184         */
185        public abstract void init(HandlerInfo config);
186    
187        /**
188         * The <code>destroy</code> method indicates the end of lifecycle
189         * for a Handler instance.  The Handler implementation class should
190         * release its resources and perform cleanup in the implementation
191         * of the <code>destroy</code> method.
192         *
193         * @throws  javax.xml.rpc.JAXRPCException  if there was any error during
194         *              destroy
195         */
196        public abstract void destroy();
197    
198        /**
199         * Gets the header blocks processed by this Handler instance.
200         *
201         * @return Array of QNames of header blocks processed by this
202         *      handler instance. <code>QName</code> is the qualified
203         *      name of the outermost element of the Header block.
204         */
205        public QName[] getHeaders();
206    }
207