Author: jliu
Date: Mon Oct 23 06:17:46 2006
New Revision: 466980
URL: http://svn.apache.org/viewvc?view=rev&rev=466980
Log:
* A simple sub chain support: Sub chain can be used when the invocation of a
set of interceptors needs to be wrapped in another interceptor, so that the
interceptor that initiates sub chain can do some work when sub chain invocation
returns, for example, stax can take this opportunity to write the end element.
The interceptor that wants to initiate a sub chain invocation needs to call
PhaseInterceptorChain.doInterceptInSubChain(). The last interceptor in the sub
chain needs to call PhaseInterceptorChain.finishSubChain() to indicate that the
sub chain invocation has finished, the control will be returned to the
interceptor that initiates the sub chain.
We may want to review this simple sub chain support later on, for example, we
may want to configure interceptor chain and sub chain through configuration, if
we are convinced that a sub chain interceptor is the best way to solve stax
related problems. For the time being, we just use this simple sub chain to get
the job done.
* Make SOAPHandlerInterceptor located after SoapOutInterceptor in the chain in
order to access SOAPMessage.
Modified:
incubator/cxf/trunk/api/src/main/java/org/apache/cxf/interceptor/InterceptorChain.java
incubator/cxf/trunk/api/src/main/java/org/apache/cxf/phase/PhaseInterceptorChain.java
incubator/cxf/trunk/api/src/test/java/org/apache/cxf/phase/PhaseInterceptorChainTest.java
incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/RPCOutInterceptor.java
incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapOutInterceptor.java
incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/BareOutInterceptor.java
incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/phase/PhaseManagerImpl.java
incubator/cxf/trunk/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/BareOutInterceptorTest.java
Modified:
incubator/cxf/trunk/api/src/main/java/org/apache/cxf/interceptor/InterceptorChain.java
URL:
http://svn.apache.org/viewvc/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/interceptor/InterceptorChain.java?view=diff&rev=466980&r1=466979&r2=466980
==============================================================================
---
incubator/cxf/trunk/api/src/main/java/org/apache/cxf/interceptor/InterceptorChain.java
(original)
+++
incubator/cxf/trunk/api/src/main/java/org/apache/cxf/interceptor/InterceptorChain.java
Mon Oct 23 06:17:46 2006
@@ -30,7 +30,9 @@
PAUSED,
EXECUTING,
COMPLETE,
- ABORTED
+ ABORTED,
+ SUBCHAIN_EXECUTING,
+ SUBCHAIN_COMPLETE
};
void add(Interceptor i);
@@ -39,11 +41,15 @@
boolean doIntercept(Message message);
+ boolean doInterceptInSubChain(Message message);
+
void pause();
void resume();
void reset();
+
+ void finishSubChain();
ListIterator<Interceptor<? extends Message>> getIterator();
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=466980&r1=466979&r2=466980
==============================================================================
---
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
Mon Oct 23 06:17:46 2006
@@ -27,6 +27,7 @@
import java.util.List;
import java.util.ListIterator;
import java.util.Map;
+import java.util.Stack;
import java.util.TreeMap;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -59,12 +60,14 @@
private final Map<String, List<Interceptor>> nameMap = new HashMap<String,
List<Interceptor>>();
private State state;
+ private Stack subChainState;
private PhaseInterceptorIterator iterator;
private Message pausedMessage;
private MessageObserver faultObserver;
public PhaseInterceptorChain(List<Phase> ps) {
state = State.EXECUTING;
+ subChainState = new Stack();
for (Phase phase : ps) {
List<Interceptor> ints = new ArrayList<Interceptor>();
@@ -107,6 +110,13 @@
state = State.PAUSED;
}
+ public void finishSubChain() {
+ if (!subChainState.isEmpty()) {
+ subChainState.pop();
+ subChainState.push(State.SUBCHAIN_COMPLETE);
+ }
+ }
+
public void resume() {
if (state == State.PAUSED) {
state = State.EXECUTING;
@@ -131,6 +141,10 @@
LOG.info("Invoking handleMessage on interceptor " +
currentInterceptor);
}
currentInterceptor.handleMessage(message);
+
+ if (!subChainState.empty() && subChainState.peek() ==
State.SUBCHAIN_COMPLETE) {
+ return true;
+ }
} catch (Exception ex) {
if (LOG.isLoggable(Level.INFO)) {
LogUtils.log(LOG, Level.INFO, "Interceptor has thrown
exception, unwinding now", ex);
@@ -152,6 +166,22 @@
return state == State.COMPLETE;
}
+ /**
+ * Invokes following inteceptors in a sub chain until the last chain in the
+ * sub chain calls finishSubChain, which makes the flow continues in the
+ * main chain.
+ *
+ * @param context
+ * @throws Exception
+ */
+ @SuppressWarnings("unchecked")
+ public boolean doInterceptInSubChain(Message message) {
+ subChainState.push(State.SUBCHAIN_EXECUTING);
+ boolean result = doIntercept(message);
+ subChainState.pop();
+ return result;
+ }
+
public void reset() {
if (state == State.COMPLETE) {
state = State.EXECUTING;
Modified:
incubator/cxf/trunk/api/src/test/java/org/apache/cxf/phase/PhaseInterceptorChainTest.java
URL:
http://svn.apache.org/viewvc/incubator/cxf/trunk/api/src/test/java/org/apache/cxf/phase/PhaseInterceptorChainTest.java?view=diff&rev=466980&r1=466979&r2=466980
==============================================================================
---
incubator/cxf/trunk/api/src/test/java/org/apache/cxf/phase/PhaseInterceptorChainTest.java
(original)
+++
incubator/cxf/trunk/api/src/test/java/org/apache/cxf/phase/PhaseInterceptorChainTest.java
Mon Oct 23 06:17:46 2006
@@ -33,16 +33,18 @@
import org.easymock.classextension.IMocksControl;
public class PhaseInterceptorChainTest extends TestCase {
-
+
private IMocksControl control;
+
private PhaseInterceptorChain chain;
+
private Message message;
-
+
public void setUp() {
-
+
control = EasyMock.createNiceControl();
message = control.createMock(Message.class);
-
+
Phase phase1 = new Phase("phase1", 1);
Phase phase2 = new Phase("phase2", 2);
Phase phase3 = new Phase("phase3", 3);
@@ -50,56 +52,56 @@
phases.add(phase1);
phases.add(phase2);
phases.add(phase3);
-
+
chain = new PhaseInterceptorChain(phases);
}
-
+
public void tearDown() {
control.verify();
}
-
+
public void testAddOneInterceptor() {
- AbstractPhaseInterceptor p = setUpPhaseInterceptor("phase1", "p1");
+ AbstractPhaseInterceptor p = setUpPhaseInterceptor("phase1", "p1");
control.replay();
chain.add(p);
Iterator<Interceptor<? extends Message>> it = chain.iterator();
assertSame(p, it.next());
assertTrue(!it.hasNext());
}
-
+
@SuppressWarnings("unchecked")
public void testAddTwoInterceptorsSamePhase() {
AbstractPhaseInterceptor p1 = setUpPhaseInterceptor("phase1", "p1");
Set<String> after = new HashSet<String>();
after.add("p1");
- AbstractPhaseInterceptor p2 = setUpPhaseInterceptor("phase1", "p2",
after);
+ AbstractPhaseInterceptor p2 = setUpPhaseInterceptor("phase1", "p2",
+ after);
control.replay();
chain.add(p1);
chain.add(p2);
Iterator<Interceptor<? extends Message>> it = chain.iterator();
-
+
assertSame("Unexpected interceptor at this position.", p1, it.next());
assertSame("Unexpected interceptor at this position.", p2, it.next());
assertTrue(!it.hasNext());
}
-
-
+
public void testSingleInterceptorPass() {
AbstractPhaseInterceptor p = setUpPhaseInterceptor("phase1", "p1");
- setUpPhaseInterceptorInvocations(p, false, false);
+ setUpPhaseInterceptorInvocations(p, false, false);
control.replay();
chain.add(p);
chain.doIntercept(message);
}
-
+
public void testSingleInterceptorFail() {
AbstractPhaseInterceptor p = setUpPhaseInterceptor("phase1", "p1");
- setUpPhaseInterceptorInvocations(p, true, true);
+ setUpPhaseInterceptorInvocations(p, true, true);
control.replay();
chain.add(p);
chain.doIntercept(message);
}
-
+
public void testTwoInterceptorsInSamePhasePass() {
AbstractPhaseInterceptor p1 = setUpPhaseInterceptor("phase1", "p1");
setUpPhaseInterceptorInvocations(p1, false, false);
@@ -110,7 +112,7 @@
chain.add(p1);
chain.doIntercept(message);
}
-
+
@SuppressWarnings("unchecked")
public void testThreeInterceptorsInSamePhaseSecondFail() {
AbstractPhaseInterceptor p1 = setUpPhaseInterceptor("phase1", "p1");
@@ -124,7 +126,7 @@
chain.add(p1);
chain.doIntercept(message);
}
-
+
public void testTwoInterceptorsInSamePhaseSecondFail() {
AbstractPhaseInterceptor p1 = setUpPhaseInterceptor("phase1", "p1");
setUpPhaseInterceptorInvocations(p1, false, true);
@@ -135,7 +137,7 @@
chain.add(p1);
chain.doIntercept(message);
}
-
+
public void testTwoInterceptorsInDifferentPhasesPass() {
AbstractPhaseInterceptor p1 = setUpPhaseInterceptor("phase1", "p1");
setUpPhaseInterceptorInvocations(p1, false, false);
@@ -146,7 +148,7 @@
chain.add(p2);
chain.doIntercept(message);
}
-
+
public void testTwoInterceptorsInDifferentPhasesSecondFail() {
AbstractPhaseInterceptor p1 = setUpPhaseInterceptor("phase1", "p1");
setUpPhaseInterceptorInvocations(p1, false, true);
@@ -157,14 +159,15 @@
chain.add(p2);
chain.doIntercept(message);
}
-
+
public void testInsertionInDifferentPhasePass() {
-
+
AbstractPhaseInterceptor p2 = setUpPhaseInterceptor("phase2", "p2");
setUpPhaseInterceptorInvocations(p2, false, false);
AbstractPhaseInterceptor p3 = setUpPhaseInterceptor("phase3", "p3");
setUpPhaseInterceptorInvocations(p3, false, false);
- InsertingPhaseInterceptor p1 = new InsertingPhaseInterceptor(chain,
p2, "phase1", "p1");
+ InsertingPhaseInterceptor p1 = new InsertingPhaseInterceptor(chain, p2,
+ "phase1", "p1");
control.replay();
chain.add(p3);
chain.add(p1);
@@ -172,34 +175,39 @@
assertEquals(1, p1.invoked);
assertEquals(0, p1.faultInvoked);
}
-
+
public void testInsertionInSamePhasePass() {
-
+
AbstractPhaseInterceptor p2 = setUpPhaseInterceptor("phase1", "p2");
setUpPhaseInterceptorInvocations(p2, false, false);
Set<String> after3 = new HashSet<String>();
after3.add("p2");
- AbstractPhaseInterceptor p3 = setUpPhaseInterceptor("phase1", "p3",
after3);
+ AbstractPhaseInterceptor p3 = setUpPhaseInterceptor("phase1", "p3",
+ after3);
setUpPhaseInterceptorInvocations(p3, false, false);
- InsertingPhaseInterceptor p1 = new InsertingPhaseInterceptor(chain,
p3, "phase1", "p1");
+ InsertingPhaseInterceptor p1 = new InsertingPhaseInterceptor(chain, p3,
+ "phase1", "p1");
p1.addBefore("p2");
- control.replay();
+ control.replay();
chain.add(p1);
chain.add(p2);
chain.doIntercept(message);
assertEquals(1, p1.invoked);
assertEquals(0, p1.faultInvoked);
}
-
+
public void testWrappedInvokation() throws Exception {
- CountingPhaseInterceptor p1 = new CountingPhaseInterceptor("phase1",
"p1");
- WrapperingPhaseInterceptor p2 = new
WrapperingPhaseInterceptor("phase2", "p2");
- CountingPhaseInterceptor p3 = new CountingPhaseInterceptor("phase3",
"p3");
-
+ CountingPhaseInterceptor p1 = new CountingPhaseInterceptor("phase1",
+ "p1");
+ WrapperingPhaseInterceptor p2 = new WrapperingPhaseInterceptor(
+ "phase2", "p2");
+ CountingPhaseInterceptor p3 = new CountingPhaseInterceptor("phase3",
+ "p3");
+
message.getInterceptorChain();
EasyMock.expectLastCall().andReturn(chain).anyTimes();
-
- control.replay();
+
+ control.replay();
chain.add(p1);
chain.add(p2);
chain.add(p3);
@@ -208,58 +216,100 @@
assertEquals(1, p2.invoked);
assertEquals(1, p3.invoked);
}
-
- AbstractPhaseInterceptor setUpPhaseInterceptor(String phase,
- String id) {
- return setUpPhaseInterceptor(phase, id, null);
+
+ public void testSubChainInvokation() throws Exception {
+ SubChainPhaseInterceptor p1 = new SubChainPhaseInterceptor("phase1",
+ "p1");
+ EndOfSubChainPhaseInterceptor p2 = new EndOfSubChainPhaseInterceptor(
+ "phase2", "p2");
+ CountingPhaseInterceptor p3 = new CountingPhaseInterceptor("phase3",
+ "p3");
+
+ message.getInterceptorChain();
+ EasyMock.expectLastCall().andReturn(chain).anyTimes();
+
+ control.replay();
+ chain.add(p1);
+ chain.add(p2);
+ chain.add(p3);
+ chain.doIntercept(message);
+ assertEquals(1, p1.invoked);
+ assertEquals(1, p2.invoked);
+ assertEquals(1, p3.invoked);
}
-
+
+ public void testSubChainInvokationWithoutEnteringSubChain() throws
Exception {
+ CountingPhaseInterceptor p1 = new CountingPhaseInterceptor("phase1",
+ "p1");
+ EndOfSubChainPhaseInterceptor p2 = new EndOfSubChainPhaseInterceptor(
+ "phase2", "p2");
+ CountingPhaseInterceptor p3 = new CountingPhaseInterceptor("phase3",
+ "p3");
+
+ message.getInterceptorChain();
+ EasyMock.expectLastCall().andReturn(chain).anyTimes();
+
+ control.replay();
+ chain.add(p1);
+ chain.add(p2);
+ chain.add(p3);
+ chain.doIntercept(message);
+ assertEquals(1, p1.invoked);
+ assertEquals(1, p2.invoked);
+ assertEquals(1, p3.invoked);
+ }
+
+ AbstractPhaseInterceptor setUpPhaseInterceptor(String phase, String id) {
+ return setUpPhaseInterceptor(phase, id, null);
+ }
+
@SuppressWarnings("unchecked")
- AbstractPhaseInterceptor setUpPhaseInterceptor(String phase,
- String id,
- Set<String> a) {
- AbstractPhaseInterceptor p =
control.createMock(AbstractPhaseInterceptor.class);
+ AbstractPhaseInterceptor setUpPhaseInterceptor(String phase, String id,
+ Set<String> a) {
+ AbstractPhaseInterceptor p = control
+ .createMock(AbstractPhaseInterceptor.class);
EasyMock.expect(p.getPhase()).andReturn(phase).anyTimes();
EasyMock.expect(p.getId()).andReturn(id).anyTimes();
Set<String> before = new HashSet<String>();
Set<String> after = null == a ? new HashSet<String>() : a;
EasyMock.expect(p.getBefore()).andReturn(before).anyTimes();
EasyMock.expect(p.getAfter()).andReturn(after).anyTimes();
-
+
return p;
}
-
+
@SuppressWarnings("unchecked")
void setUpPhaseInterceptorInvocations(AbstractPhaseInterceptor p,
- boolean fail,
- boolean expectFault) {
+ boolean fail, boolean expectFault) {
p.handleMessage(message);
if (fail) {
EasyMock.expectLastCall().andThrow(new RuntimeException());
- message.setContent(EasyMock.isA(Class.class),
EasyMock.isA(Exception.class));
+ message.setContent(EasyMock.isA(Class.class), EasyMock
+ .isA(Exception.class));
EasyMock.expectLastCall();
} else {
EasyMock.expectLastCall();
- }
+ }
if (expectFault) {
- p.handleFault(message);
+ p.handleFault(message);
EasyMock.expectLastCall();
- }
+ }
}
-
- public class InsertingPhaseInterceptor extends
AbstractPhaseInterceptor<Message> {
+
+ public class InsertingPhaseInterceptor extends
+ AbstractPhaseInterceptor<Message> {
int invoked;
+
int faultInvoked;
+
private final PhaseInterceptorChain insertionChain;
+
private final AbstractPhaseInterceptor insertionInterceptor;
-
-
+
public InsertingPhaseInterceptor(PhaseInterceptorChain c,
- AbstractPhaseInterceptor i,
- String phase,
- String id) {
+ AbstractPhaseInterceptor i, String phase, String id) {
setPhase(phase);
- setId(id);
+ setId(id);
insertionChain = c;
insertionInterceptor = i;
}
@@ -268,30 +318,65 @@
insertionChain.add(insertionInterceptor);
invoked++;
}
-
+
public void handleFault(Message m) {
faultInvoked++;
}
}
- public class CountingPhaseInterceptor extends
AbstractPhaseInterceptor<Message> {
+
+ public class CountingPhaseInterceptor extends
+ AbstractPhaseInterceptor<Message> {
int invoked;
- public CountingPhaseInterceptor(String phase,
- String id) {
+
+ public CountingPhaseInterceptor(String phase, String id) {
setPhase(phase);
setId(id);
}
+
public void handleMessage(Message m) {
invoked++;
}
}
+
public class WrapperingPhaseInterceptor extends CountingPhaseInterceptor {
- public WrapperingPhaseInterceptor(String phase,
- String id) {
+ public WrapperingPhaseInterceptor(String phase, String id) {
super(phase, id);
}
+
public void handleMessage(Message m) {
super.handleMessage(m);
m.getInterceptorChain().doIntercept(m);
}
}
+
+ public class SubChainPhaseInterceptor extends
+ AbstractPhaseInterceptor<Message> {
+ int invoked;
+
+ public SubChainPhaseInterceptor(String phase, String id) {
+ setPhase(phase);
+ setId(id);
+ }
+
+ public void handleMessage(Message m) {
+ invoked++;
+ m.getInterceptorChain().doInterceptInSubChain(m);
+ }
+ }
+
+ public class EndOfSubChainPhaseInterceptor extends
+ AbstractPhaseInterceptor<Message> {
+ int invoked;
+
+ public EndOfSubChainPhaseInterceptor(String phase, String id) {
+ setPhase(phase);
+ setId(id);
+ }
+
+ public void handleMessage(Message m) {
+ invoked++;
+ m.getInterceptorChain().finishSubChain();
+ }
+ }
+
}
Modified:
incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/RPCOutInterceptor.java
URL:
http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/RPCOutInterceptor.java?view=diff&rev=466980&r1=466979&r2=466980
==============================================================================
---
incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/RPCOutInterceptor.java
(original)
+++
incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/RPCOutInterceptor.java
Mon Oct 23 06:17:46 2006
@@ -84,6 +84,7 @@
}
// Finishing the writing.
xmlWriter.writeEndElement();
+ message.getInterceptorChain().finishSubChain();
} catch (Exception e) {
e.printStackTrace();
message.setContent(Exception.class, e);
Modified:
incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapOutInterceptor.java
URL:
http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapOutInterceptor.java?view=diff&rev=466980&r1=466979&r2=466980
==============================================================================
---
incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapOutInterceptor.java
(original)
+++
incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapOutInterceptor.java
Mon Oct 23 06:17:46 2006
@@ -88,7 +88,9 @@
soapVersion.getNamespace());
// Calling for Wrapped/RPC/Doc/ Interceptor for writing SOAP body
- message.getInterceptorChain().doIntercept(message);
+ //message.getInterceptorChain().doIntercept(message);
+ message.getInterceptorChain().doInterceptInSubChain(message);
+
xtw.writeEndElement();
// Write Envelop end element
xtw.writeEndElement();
Modified:
incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/BareOutInterceptor.java
URL:
http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/BareOutInterceptor.java?view=diff&rev=466980&r1=466979&r2=466980
==============================================================================
---
incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/BareOutInterceptor.java
(original)
+++
incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/BareOutInterceptor.java
Mon Oct 23 06:17:46 2006
@@ -78,6 +78,7 @@
}
}
}
+ message.getInterceptorChain().finishSubChain();
}
Modified:
incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/phase/PhaseManagerImpl.java
URL:
http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/phase/PhaseManagerImpl.java?view=diff&rev=466980&r1=466979&r2=466980
==============================================================================
---
incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/phase/PhaseManagerImpl.java
(original)
+++
incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/phase/PhaseManagerImpl.java
Mon Oct 23 06:17:46 2006
@@ -101,11 +101,13 @@
outPhases.add(new Phase(Phase.PRE_STREAM, ++i * 1000));
outPhases.add(new Phase(Phase.PRE_PROTOCOL, ++i * 1000));
- outPhases.add(new Phase(Phase.USER_PROTOCOL, ++i * 1000));
- outPhases.add(new Phase(Phase.POST_PROTOCOL, ++i * 1000));
outPhases.add(new Phase(Phase.WRITE, ++i * 1000));
outPhases.add(new Phase(Phase.MARSHAL, ++i * 1000));
+
+ outPhases.add(new Phase(Phase.USER_PROTOCOL, ++i * 1000));
+ outPhases.add(new Phase(Phase.POST_PROTOCOL, ++i * 1000));
+
outPhases.add(new Phase(Phase.USER_STREAM, ++i * 1000));
outPhases.add(new Phase(Phase.POST_STREAM, ++i * 1000));
Modified:
incubator/cxf/trunk/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/BareOutInterceptorTest.java
URL:
http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/BareOutInterceptorTest.java?view=diff&rev=466980&r1=466979&r2=466980
==============================================================================
---
incubator/cxf/trunk/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/BareOutInterceptorTest.java
(original)
+++
incubator/cxf/trunk/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/BareOutInterceptorTest.java
Mon Oct 23 06:17:46 2006
@@ -29,12 +29,15 @@
import javax.xml.stream.XMLStreamWriter;
import org.apache.cxf.interceptor.BareOutInterceptor;
+import org.apache.cxf.interceptor.InterceptorChain;
import org.apache.cxf.message.Message;
import org.apache.cxf.service.model.BindingOperationInfo;
import org.apache.cxf.staxutils.DepthXMLStreamReader;
import org.apache.cxf.staxutils.StaxUtils;
import org.apache.hello_world_soap_http.types.GreetMe;
import org.apache.hello_world_soap_http.types.GreetMeResponse;
+import org.easymock.IMocksControl;
+import org.easymock.classextension.EasyMock;
public class BareOutInterceptorTest extends TestBase {
@@ -52,6 +55,12 @@
writer = getXMLStreamWriter(baos);
message.setContent(XMLStreamWriter.class, writer);
message.getExchange().put(BindingOperationInfo.class, operation);
+ IMocksControl control = EasyMock.createNiceControl();
+ InterceptorChain ic = control.createMock(InterceptorChain.class);
+ ic.finishSubChain();
+ EasyMock.expectLastCall().anyTimes();
+ message.setInterceptorChain(ic);
+ control.replay();
}
public void tearDown() throws Exception {