responseimpl.java
来自「RESIN 3.2 最新源码」· Java 代码 · 共 150 行
JAVA
150 行
/** Copyright (c) 1998-2007 Caucho Technology -- all rights reserved** This file is part of Resin(R) Open Source** Each copy or derived work must preserve the copyright notice and this* notice unmodified.** Resin Open Source is free software; you can redistribute it and/or modify* it under the terms of the GNU General Public License as published by* the Free Software Foundation; either version 2 of the License, or* (at your option) any later version.** Resin Open Source is distributed in the hope that it will be useful,* but WITHOUT ANY WARRANTY; without even the implied warranty of* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, or any warranty* of NON-INFRINGEMENT. See the GNU General Public License for more* details.** You should have received a copy of the GNU General Public License* along with Resin Open Source; if not, write to the** Free Software Foundation, Inc.* 59 Temple Place, Suite 330* Boston, MA 02111-1307 USA** @author Emil Ong*/package com.caucho.soap.jaxws;import java.util.Map;import java.util.concurrent.CancellationException;import java.util.concurrent.ExecutionException;import java.util.concurrent.TimeUnit;import java.util.logging.Logger;import java.util.logging.Level;import javax.xml.ws.Response;import com.caucho.util.Alarm;public class ResponseImpl<T> implements Response<T> { private final static Logger log = Logger.getLogger(ResponseImpl.class.getName()); private T _value; private Map<String,Object> _context; private boolean _done = false; private boolean _cancelled = false; private Exception _exception = null; public Map<String,Object> getContext() { return _context; } public void setContext(Map<String,? extends Object> context) { _context = (Map<String,Object>) context; } public T get() throws InterruptedException, CancellationException, ExecutionException { synchronized(this) { while (! _done && ! _cancelled) wait(); if (_cancelled) throw new CancellationException(); if (_exception != null) throw new ExecutionException(_exception); return _value; } } public T get(long timeout, TimeUnit unit) throws InterruptedException, CancellationException, ExecutionException { long expire = unit.toMillis(timeout) + Alarm.getExactTime(); synchronized(this) { if (Alarm.isTest()) { // When Alarm.isTest(), getExactTime returns the test time while (! _done && ! _cancelled && Alarm.getExactTime() < expire) wait(expire - Alarm.getExactTime()); } else { while (! _done && ! _cancelled && Alarm.getCurrentTime() < expire) wait(expire - Alarm.getCurrentTime()); } if (_cancelled) throw new CancellationException(); if (_exception != null) throw new ExecutionException(_exception); return _value; } } public void set(T value) { synchronized(this) { _done = true; _value = value; notifyAll(); } } public void setException(Exception e) { synchronized(this) { _done = true; _exception = e; notifyAll(); } } public boolean cancel(boolean mayInterruptIfRunning) { synchronized(this) { _cancelled = true; notifyAll(); return true; } } public boolean isDone() { return _done; } public boolean isCancelled() { return _cancelled; }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?