You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by gn...@apache.org on 2007/04/17 22:00:48 UTC
svn commit: r529747 -
/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/phase/PhaseInterceptorChain.java
Author: gnodet
Date: Tue Apr 17 13:00:47 2007
New Revision: 529747
URL: http://svn.apache.org/viewvc?view=rev&rev=529747
Log:
Change synchronization in pause/resume, so that a single thread can call pause/resume if needed
Modified:
incubator/cxf/trunk/api/src/main/java/org/apache/cxf/phase/PhaseInterceptorChain.java
Modified: incubator/cxf/trunk/api/src/main/java/org/apache/cxf/phase/PhaseInterceptorChain.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/phase/PhaseInterceptorChain.java?view=diff&rev=529747&r1=529746&r2=529747
==============================================================================
--- incubator/cxf/trunk/api/src/main/java/org/apache/cxf/phase/PhaseInterceptorChain.java (original)
+++ incubator/cxf/trunk/api/src/main/java/org/apache/cxf/phase/PhaseInterceptorChain.java Tue Apr 17 13:00:47 2007
@@ -33,6 +33,7 @@
import org.apache.cxf.common.logging.LogUtils;
import org.apache.cxf.helpers.CastUtils;
+import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.interceptor.Interceptor;
import org.apache.cxf.interceptor.InterceptorChain;
import org.apache.cxf.message.Message;
@@ -63,7 +64,6 @@
private PhaseInterceptorIterator iterator;
private Message pausedMessage;
private MessageObserver faultObserver;
- private Object pauseWaitObject = new Object();
// currently one chain for one request/response, use below as signal to avoid duplicate fault processing
// on nested calling of doIntercept(), which will throw same fault multi-times
@@ -117,24 +117,13 @@
}
}
- public void pause() {
+ public synchronized void pause() {
state = State.PAUSED;
}
- public void resume() {
+ public synchronized void resume() {
if (state == State.PAUSED) {
state = State.EXECUTING;
-
- if (pausedMessage == null) {
- synchronized (pauseWaitObject) {
- try {
- pauseWaitObject.wait(1000);
- } catch (InterruptedException e) {
- // do nothing
- }
- }
- }
-
doIntercept(pausedMessage);
}
}
@@ -147,7 +136,8 @@
* @throws Exception
*/
@SuppressWarnings("unchecked")
- public boolean doIntercept(Message message) {
+ public synchronized boolean doIntercept(Message message) {
+ pausedMessage = message;
while (state == State.EXECUTING && iterator.hasNext()) {
try {
Interceptor currentInterceptor = iterator.next();
@@ -165,6 +155,9 @@
if (LOG.isLoggable(Level.INFO)) {
LogUtils.log(LOG, Level.INFO, "Interceptor has thrown exception, unwinding now", ex);
}
+ if (!(ex instanceof Fault)) {
+ ex = new Fault(ex);
+ }
message.setContent(Exception.class, ex);
if (message.getExchange() != null) {
message.getExchange().put(Exception.class, ex);
@@ -180,11 +173,6 @@
}
if (state == State.EXECUTING) {
state = State.COMPLETE;
- } else if (state == State.PAUSED) {
- pausedMessage = message;
- synchronized (pauseWaitObject) {
- pauseWaitObject.notifyAll();
- }
}
return state == State.COMPLETE;
}
@@ -198,7 +186,7 @@
* @throws Exception
*/
@SuppressWarnings("unchecked")
- public boolean doIntercept(Message message, String startingAfterInterceptorID) {
+ public synchronized boolean doIntercept(Message message, String startingAfterInterceptorID) {
while (state == State.EXECUTING && iterator.hasNext()) {
PhaseInterceptor currentInterceptor = (PhaseInterceptor)iterator.next();
if (currentInterceptor.getId().equals(startingAfterInterceptorID)) {
@@ -208,7 +196,7 @@
return doIntercept(message);
}
- public void reset() {
+ public synchronized void reset() {
if (state == State.COMPLETE) {
state = State.EXECUTING;
iterator.reset();
@@ -238,7 +226,7 @@
}
- public void abort() {
+ public synchronized void abort() {
this.state = InterceptorChain.State.ABORTED;
}