/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.axis2.jaxws.core.controller; import org.apache.axis2.jaxws.core.InvocationContext; import javax.xml.ws.AsyncHandler; import javax.xml.ws.Response; import java.util.concurrent.Future; /** * The <tt>InvocationController</tt> is an interface modeling the invocation of a * target web service. All of the information that the InvocationController needs * should exist within the InvocatonContext that is passed in to the various invoke * methods. * <p/> * The request information is passed in within the InvocationContext. The InvocationController * assumes that there is a MessageContext within that InvocationContext that is populated with all * of the information that it needs to invoke. If not, an error will be returned. Once the * response comes back, the information for that response will be held inside of the MessageContext * representing the response, that exists in the InvocationContext. * <p/> * The InvocationController supports four different invocation patterns: * <p/> * 1) synchronous - This is represented by the {@link #invoke(InvocationContext)} method. This is a * blocking, request/response call to the web service. * <p/> * 2) one-way - This is represented by the {@link #invokeOneWay(InvocationContext)} method. This is * a one-way invocation that only returns errors related to sending the message. If an error occurs * while processing, the client will not be notified. * <p/> * 3) asynchronous (callback) - {@link #invokeAsync(InvocationContext, AsyncHandler)} * <p/> * 4) asynchronous (polling) - {@link #invokeAsync(InvocationContext)} */ public interface InvocationController { /** * Performs a synchronous (blocking) invocation of a target service. The InvocationContext * passed in should contain a valid MessageContext containing the properties and message to be * sent for the request. The response contents will be processed and placed in the * InvocationContext as well. * * @param ic * @return */ public InvocationContext invoke(InvocationContext ic); /** * Performs a one-way invocation of the client. This is SHOULD NOT be a robust invocation, so * any fault that occurs during the processing of the request will not be returned to the * client. Errors returned to the client are problems that occurred during the sending of the * message to the server. * * @param ic */ public void invokeOneWay(InvocationContext ic) throws Exception; /** * Performs an asynchronous (non-blocking) invocation of the client based on a callback model. * The AsyncHandler that is passed in is the callback that the client programmer supplied when * they invoked their JAX-WS Dispatch or their SEI-based dynamic proxy. * * @param ic * @param callback * @return */ public Response invokeAsync(InvocationContext ic); /** * Performs an asynchronous (non-blocking) invocation of the client based on a polling model. * The Response object that is returned allows the client programmer to poll against it to see * if a response has been sent back by the server. * * @param ic * @return */ public Future<?> invokeAsync(InvocationContext ic, AsyncHandler asyncHandler); }