| /* |
| * Copyright 2001-2004 The Apache Software Foundation. |
| * |
| * Licensed 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.axis.client.async; |
| |
| import javax.xml.namespace.QName; |
| |
| /** |
| * Access the results of the Async call |
| * |
| * @author Davanum Srinivas (dims@yahoo.com) |
| */ |
| public class AsyncResult implements IAsyncResult, Runnable { |
| |
| /** |
| * Field thread |
| */ |
| private Thread thread = null; |
| |
| /** |
| * Field response |
| */ |
| private Object response = null; |
| |
| /** |
| * Field exception |
| */ |
| private Throwable exception = null; |
| |
| /** |
| * Field ac |
| */ |
| private AsyncCall ac = null; |
| |
| /** |
| * Field opName |
| */ |
| private QName opName = null; |
| |
| /** |
| * Field params |
| */ |
| private Object[] params = null; |
| |
| /** |
| * Field status |
| */ |
| private Status status = Status.NONE; |
| |
| /** |
| * Constructor AsyncResult |
| * |
| * @param ac |
| * @param opName |
| * @param params |
| */ |
| public AsyncResult(AsyncCall ac, QName opName, Object[] params) { |
| this.ac = ac; |
| this.opName = opName; |
| this.params = params; |
| |
| if (opName == null) { |
| this.opName = ac.getCall().getOperationName(); |
| } |
| |
| thread = new Thread(this); |
| thread.setDaemon(true); |
| thread.start(); |
| } |
| |
| /** |
| * Method abort |
| */ |
| public void abort() { |
| thread.interrupt(); |
| status = Status.INTERRUPTED; |
| } |
| |
| /** |
| * Method getStatus |
| * |
| * @return |
| */ |
| public Status getStatus() { |
| return status; |
| } |
| |
| /** |
| * Method waitFor |
| * |
| * @param timeout |
| * @throws InterruptedException |
| */ |
| public void waitFor(long timeout) throws InterruptedException { |
| thread.wait(timeout); |
| } |
| |
| /** |
| * Method getResponse |
| * |
| * @return |
| */ |
| public Object getResponse() { |
| return response; |
| } |
| |
| /** |
| * Method getException |
| * |
| * @return |
| */ |
| public Throwable getException() { |
| return exception; |
| } |
| |
| /** |
| * Method run |
| */ |
| public void run() { |
| try { |
| response = ac.getCall().invoke(opName, params); |
| status = Status.COMPLETED; |
| } catch (Throwable e) { |
| exception = e; |
| status = Status.EXCEPTION; |
| } finally { |
| IAsyncCallback callback = ac.getCallback(); |
| if (callback != null) { |
| callback.onCompletion(this); |
| } |
| } |
| } |
| } |