You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by jl...@apache.org on 2006/11/16 11:43:35 UTC

svn commit: r475675 - in /incubator/cxf/trunk: api/src/main/java/org/apache/cxf/endpoint/ api/src/main/java/org/apache/cxf/interceptor/ api/src/main/java/org/apache/cxf/phase/ api/src/test/java/org/apache/cxf/phase/ rt/core/src/main/java/org/apache/cxf...

Author: jliu
Date: Thu Nov 16 02:43:34 2006
New Revision: 475675

URL: http://svn.apache.org/viewvc?view=rev&rev=475675
Log:
CXF-195.
If logical handler returns false, for a request-response MEP, the message direction is reversed and the request message becomes a response message.

Modified:
    incubator/cxf/trunk/api/src/main/java/org/apache/cxf/endpoint/Client.java
    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/core/src/main/java/org/apache/cxf/endpoint/ClientImpl.java
    incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/AbstractJAXWSHandlerInterceptor.java
    incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/HandlerChainInvoker.java
    incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/LogicalHandlerInterceptor.java
    incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/LogicalMessageImpl.java
    incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/handler/LogicalHandlerInterceptorTest.java
    incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/HandlerClientServerTest.java

Modified: incubator/cxf/trunk/api/src/main/java/org/apache/cxf/endpoint/Client.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/endpoint/Client.java?view=diff&rev=475675&r1=475674&r2=475675
==============================================================================
--- incubator/cxf/trunk/api/src/main/java/org/apache/cxf/endpoint/Client.java (original)
+++ incubator/cxf/trunk/api/src/main/java/org/apache/cxf/endpoint/Client.java Thu Nov 16 02:43:34 2006
@@ -23,8 +23,9 @@
 
 import org.apache.cxf.interceptor.InterceptorProvider;
 import org.apache.cxf.service.model.BindingOperationInfo;
+import org.apache.cxf.transport.MessageObserver;
 
-public interface Client extends InterceptorProvider {
+public interface Client extends InterceptorProvider, MessageObserver {
     String REQUEST_CONTEXT = "RequestContext";
     String RESPONSE_CONTEXT = "ResponseContext";
     

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=475675&r1=475674&r2=475675
==============================================================================
--- 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 Thu Nov 16 02:43:34 2006
@@ -35,14 +35,18 @@
         SUBCHAIN_COMPLETE
     };
     
+    String STARTING_AFTER_INTERCEPTOR_ID = "starting_after_interceptor_id";
+    
     void add(Interceptor i);
     
     void remove(Interceptor i);
     
     boolean doIntercept(Message message);
     
-    boolean doInterceptInSubChain(Message message);
-   
+    boolean doIntercept(Message message, String startingAfterInterceptorID);
+
+    boolean doInterceptInSubChain(Message message);    
+  
     void pause();
     
     void resume();

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=475675&r1=475674&r2=475675
==============================================================================
--- 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 Thu Nov 16 02:43:34 2006
@@ -182,6 +182,24 @@
     }
     
     /**
+     * Invokes each phase's handler in turn. Start after the Interceptor
+     * specified
+     * 
+     * @param context
+     * @throws Exception
+     */
+    @SuppressWarnings("unchecked")
+    public boolean doIntercept(Message message, String startingAfterInterceptorID) {
+        while (state == State.EXECUTING && iterator.hasNext()) {
+            PhaseInterceptor currentInterceptor = (PhaseInterceptor)iterator.next();
+            if (currentInterceptor.getId().equals(startingAfterInterceptorID)) {
+                break;
+            }
+        }
+        return doIntercept(message);
+    }
+    
+    /**
      * 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.

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=475675&r1=475674&r2=475675
==============================================================================
--- 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 Thu Nov 16 02:43:34 2006
@@ -196,7 +196,7 @@
         assertEquals(0, p1.faultInvoked);
     }
 
-    public void testWrappedInvokation() throws Exception {
+    public void testWrappedInvocation() throws Exception {
         CountingPhaseInterceptor p1 = new CountingPhaseInterceptor("phase1",
                 "p1");
         WrapperingPhaseInterceptor p2 = new WrapperingPhaseInterceptor(
@@ -217,7 +217,7 @@
         assertEquals(1, p3.invoked);
     }
 
-    public void testSubChainInvokation() throws Exception {
+    public void testSubChainInvocation() throws Exception {
         SubChainPhaseInterceptor p1 = new SubChainPhaseInterceptor("phase1",
                 "p1");
         EndOfSubChainPhaseInterceptor p2 = new EndOfSubChainPhaseInterceptor(
@@ -238,7 +238,7 @@
         assertEquals(1, p3.invoked);
     }
 
-    public void testSubChainInvokationWithoutEnteringSubChain() throws Exception {
+    public void testSubChainInvocationWithoutEnteringSubChain() throws Exception {
         CountingPhaseInterceptor p1 = new CountingPhaseInterceptor("phase1",
                 "p1");
         EndOfSubChainPhaseInterceptor p2 = new EndOfSubChainPhaseInterceptor(
@@ -259,6 +259,27 @@
         assertEquals(1, p3.invoked);
     }
 
+    public void testChainInvocationStartFromSpecifiedInterceptor() 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, p2.getId());
+        assertEquals(0, p1.invoked);
+        assertEquals(0, p2.invoked);
+        assertEquals(1, p3.invoked);
+    }
+    
     AbstractPhaseInterceptor setUpPhaseInterceptor(String phase, String id) {
         return setUpPhaseInterceptor(phase, id, null);
     }

Modified: incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/endpoint/ClientImpl.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/endpoint/ClientImpl.java?view=diff&rev=475675&r1=475674&r2=475675
==============================================================================
--- incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/endpoint/ClientImpl.java (original)
+++ incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/endpoint/ClientImpl.java Thu Nov 16 02:43:34 2006
@@ -56,10 +56,9 @@
 import org.apache.cxf.transport.MessageObserver;
 
 public class ClientImpl extends AbstractBasicInterceptorProvider implements Client, MessageObserver {
+    public static final String FINISHED = "exchange.finished";
     
     private static final Logger LOG = LogUtils.getL7dLogger(ClientImpl.class);
-
-    private static final String FINISHED = "exchange.finished";
     
     private Bus bus;
     private Endpoint endpoint;
@@ -124,6 +123,9 @@
         exchange.setConduit(conduit);
         conduit.setMessageObserver(this);
         
+        //set clientImpl to exchange. used by jax-ws handlers
+        exchange.put(Client.class, this);
+        
         // execute chain
         chain.doIntercept(message);
 
@@ -241,7 +243,13 @@
         
         // execute chain
         try {
-            chain.doIntercept(message);
+            String startingInterceptorID = (String) message.get(
+                PhaseInterceptorChain.STARTING_AFTER_INTERCEPTOR_ID);
+            if (startingInterceptorID != null) {
+                chain.doIntercept(message, startingInterceptorID);
+            } else {
+                chain.doIntercept(message);
+            }
         } finally {
             synchronized (message.getExchange()) {
                 if (!isPartialResponse(message)) {

Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/AbstractJAXWSHandlerInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/AbstractJAXWSHandlerInterceptor.java?view=diff&rev=475675&r1=475674&r2=475675
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/AbstractJAXWSHandlerInterceptor.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/AbstractJAXWSHandlerInterceptor.java Thu Nov 16 02:43:34 2006
@@ -41,7 +41,7 @@
                || message == message.getExchange().getOutFaultMessage();
     }
     
-    boolean isRequestor(T message) {
+    protected boolean isRequestor(T message) {
         Boolean b = (Boolean)message.get(Message.REQUESTOR_ROLE);
         return b == null ? true : b.booleanValue();
     }

Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/HandlerChainInvoker.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/HandlerChainInvoker.java?view=diff&rev=475675&r1=475674&r2=475675
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/HandlerChainInvoker.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/HandlerChainInvoker.java Thu Nov 16 02:43:34 2006
@@ -245,6 +245,8 @@
             // and control all of the processing here.
             changeMessageDirection(ctx); 
             handlerProcessingAborted = true;
+            
+            //TODO: reverse chain, call handlerMessage or close            
         }
         return continueProcessing;        
     }    

Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/LogicalHandlerInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/LogicalHandlerInterceptor.java?view=diff&rev=475675&r1=475674&r2=475675
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/LogicalHandlerInterceptor.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/LogicalHandlerInterceptor.java Thu Nov 16 02:43:34 2006
@@ -19,39 +19,76 @@
 
 package org.apache.cxf.jaxws.handler;
 
+import java.util.List;
+
+import javax.xml.transform.Source;
 import javax.xml.ws.Binding;
 
+import org.apache.cxf.endpoint.Client;
 import org.apache.cxf.message.Message;
+import org.apache.cxf.message.MessageImpl;
 import org.apache.cxf.phase.Phase;
+import org.apache.cxf.phase.PhaseInterceptorChain;
 
 public class LogicalHandlerInterceptor<T extends Message> extends AbstractJAXWSHandlerInterceptor<T> {
-    
+
     public LogicalHandlerInterceptor(Binding binding) {
         super(binding);
         setPhase(Phase.USER_LOGICAL);
     }
-    
+
     public void handleMessage(T message) {
         HandlerChainInvoker invoker = getInvoker(message);
         if (!invoker.getLogicalHandlers().isEmpty()) {
             LogicalMessageContextImpl lctx = new LogicalMessageContextImpl(message);
             if (!invoker.invokeLogicalHandlers(isRequestor(message), lctx)) {
-                // need to abort - not sure how to do this:
-                // we have access to the interceptor chain via the message but 
-                // there is no support for terminating the chain yet
+                //TODO: reverseHandlers();
+
+                message.getInterceptorChain().abort();
+                Message responseMsg = new MessageImpl();
+                message.getExchange().setInMessage(responseMsg);
+
+                /**
+                 * 1. message.setHeaders()
+                 * 2. message.setAttachments()
+                 * 3. set XMLSTreamReader to element inside Body
+                 * OR
+                 * message.setContent(Element.class, elementInBody);
+                 * 4. invoke Client.onMessage() starting after this.getID()
+                 */
+                Client client = (Client)message.getExchange().get(Client.class);
+                responseMsg.put(PhaseInterceptorChain.STARTING_AFTER_INTERCEPTOR_ID, this.getId());
+                if (client != null) {
+                    //message.getExchange().put(ClientImpl.FINISHED, Boolean.TRUE);
+                    //lctx.getMessage().getPayload();
+                    Source inSource = message.getContent(Source.class);
+                    if (inSource != null) {
+                        responseMsg.setContent(Source.class, inSource);
+                    }
+                    List inObj = message.getContent(List.class);
+                    if (inObj != null) {
+                        responseMsg.setContent(List.class, inObj);
+                    }
+                    client.onMessage(responseMsg);
+                } else if (!message.getExchange().isOneWay()) {
+                    //for the server side inbound
+
+                    //InterceptorChain chain = OutgoingChainSetupInterceptor.getOutInterceptorChain(
+                    //    message.getExchange());
+                    //chain.doIntercept(message);
+                }
             }
         }
     }
-    
+
     public void handleFault(T message) {
         // TODO
     }
-    
-    
+
     public void onCompletion(T message) {
         if (isRequestor(message) && (isOneway(message) || !isOutbound(message))) {
             getInvoker(message).mepComplete(message);
         }
     }
-   
+
 }

Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/LogicalMessageImpl.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/LogicalMessageImpl.java?view=diff&rev=475675&r1=475674&r2=475675
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/LogicalMessageImpl.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/LogicalMessageImpl.java Thu Nov 16 02:43:34 2006
@@ -20,7 +20,7 @@
 package org.apache.cxf.jaxws.handler;
 
 
-import java.util.Arrays;
+import java.util.ArrayList;
 import java.util.List;
 
 import javax.xml.bind.JAXBContext;
@@ -51,7 +51,9 @@
 
     public void setPayload(Object arg0, JAXBContext arg1) {
         // TODO - what to do with JAXB context?
-        msgContext.getWrappedMessage().setContent(List.class, Arrays.asList(arg0));
+        List<Object> l = new ArrayList<Object>();
+        l.add(arg0);        
+        msgContext.getWrappedMessage().setContent(List.class, l);
     }
 
    

Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/handler/LogicalHandlerInterceptorTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/handler/LogicalHandlerInterceptorTest.java?view=diff&rev=475675&r1=475674&r2=475675
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/handler/LogicalHandlerInterceptorTest.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/handler/LogicalHandlerInterceptorTest.java Thu Nov 16 02:43:34 2006
@@ -23,14 +23,21 @@
 import java.util.List;
 
 import javax.xml.ws.Binding;
+import javax.xml.ws.LogicalMessage;
+import javax.xml.ws.handler.Handler;
 import javax.xml.ws.handler.LogicalHandler;
 import javax.xml.ws.handler.LogicalMessageContext;
 import javax.xml.ws.handler.MessageContext;
 
 import junit.framework.TestCase;
 
+import org.apache.cxf.endpoint.Client;
+import org.apache.cxf.interceptor.InterceptorChain;
 import org.apache.cxf.message.Exchange;
 import org.apache.cxf.message.Message;
+import org.apache.cxf.message.MessageImpl;
+import org.apache.handlers.types.AddNumbersResponse;
+import org.easymock.EasyMock;
 import org.easymock.classextension.IMocksControl;
 
 import static org.easymock.EasyMock.eq;
@@ -40,33 +47,34 @@
 import static org.easymock.classextension.EasyMock.createNiceControl;
 
 public class LogicalHandlerInterceptorTest extends TestCase {
-    
+
     private IMocksControl control;
     private Binding binding;
     private HandlerChainInvoker invoker;
     private Message message;
     private Exchange exchange;
-    
+
     public void setUp() {
         control = createNiceControl();
         binding = control.createMock(Binding.class);
         invoker = control.createMock(HandlerChainInvoker.class);
         message = control.createMock(Message.class);
-        exchange = control.createMock(Exchange.class);        
+        exchange = control.createMock(Exchange.class);
     }
-    
+
     public void tearDown() {
-        control.verify();
     }
-    
+
     public void testInterceptSuccess() {
         List<LogicalHandler> list = new ArrayList<LogicalHandler>();
         list.add(new LogicalHandler() {
             public void close(MessageContext arg0) {
             }
+
             public boolean handleFault(MessageContext arg0) {
                 return true;
             }
+
             public boolean handleMessage(MessageContext arg0) {
                 return true;
             }
@@ -75,37 +83,14 @@
         expect(message.getExchange()).andReturn(exchange).anyTimes();
         expect(exchange.get(HandlerChainInvoker.class)).andReturn(invoker);
         expect(exchange.getOutMessage()).andReturn(message);
-        expect(invoker.invokeLogicalHandlers(eq(true),
-            isA(LogicalMessageContext.class))).andReturn(true);
+        expect(invoker.invokeLogicalHandlers(eq(true), isA(LogicalMessageContext.class))).andReturn(true);
         control.replay();
         LogicalHandlerInterceptor<Message> li = new LogicalHandlerInterceptor<Message>(binding);
         assertEquals("unexpected phase", "user-logical", li.getPhase());
         li.handleMessage(message);
+        control.verify();
     }
-    
-    public void testInterceptFailure() {
-        List<LogicalHandler> list = new ArrayList<LogicalHandler>();
-        list.add(new LogicalHandler() {
-            public void close(MessageContext arg0) {
-            }
-            public boolean handleFault(MessageContext arg0) {
-                return true;
-            }
-            public boolean handleMessage(MessageContext arg0) {
-                return true;
-            }
-        });
-        expect(invoker.getLogicalHandlers()).andReturn(list);
-        expect(message.getExchange()).andReturn(exchange).anyTimes();
-        expect(exchange.get(HandlerChainInvoker.class)).andReturn(invoker);
-        expect(exchange.getOutMessage()).andReturn(message);
-        expect(invoker.invokeLogicalHandlers(eq(true), 
-            isA(LogicalMessageContext.class))).andReturn(false);
-        control.replay();
-        LogicalHandlerInterceptor<Message> li = new LogicalHandlerInterceptor<Message>(binding);
-        li.handleMessage(message);   
-    }
-    
+
     public void testOnCompletion() {
         expect(message.getExchange()).andReturn(exchange).anyTimes();
         expect(exchange.get(HandlerChainInvoker.class)).andReturn(invoker);
@@ -115,5 +100,51 @@
         control.replay();
         LogicalHandlerInterceptor<Message> li = new LogicalHandlerInterceptor<Message>(binding);
         li.onCompletion(message);
+        control.verify();
+    }
+
+    //JAX-WS spec: If handler returns false, for a request-response MEP, if the message 
+    //direction is reversed during processing of a request message then the message
+    //becomes a response message.
+    public void testReturnFalseClientSide() throws Exception {
+        List<Handler> list = new ArrayList<Handler>();
+        list.add(new LogicalHandler<LogicalMessageContext>() {
+            public void close(MessageContext arg0) {
+            }
+
+            public boolean handleFault(LogicalMessageContext messageContext) {
+                return true;
+            }
+
+            public boolean handleMessage(LogicalMessageContext messageContext) {
+                LogicalMessage msg = messageContext.getMessage();
+                AddNumbersResponse resp = new AddNumbersResponse();
+                resp.setReturn(11);
+                msg.setPayload(resp, null);
+                return false;
+            }
+        });
+        HandlerChainInvoker invoker1 = new HandlerChainInvoker(list);
+
+        IMocksControl control1 = createNiceControl();
+        Binding binding1 = control1.createMock(Binding.class);
+        Exchange exchange1 = control1.createMock(Exchange.class);
+        expect(exchange1.get(HandlerChainInvoker.class)).andReturn(invoker1).anyTimes();
+        Message outMessage = new MessageImpl();
+        outMessage.setExchange(exchange1);
+        InterceptorChain chain = control1.createMock(InterceptorChain.class);
+        outMessage.setInterceptorChain(chain);
+        chain.abort();
+        EasyMock.expectLastCall();
+        Client client = control1.createMock(Client.class);
+        expect(exchange1.get(Client.class)).andReturn(client).anyTimes();
+        client.onMessage(isA(Message.class));
+        EasyMock.expectLastCall();
+
+        control1.replay();
+
+        LogicalHandlerInterceptor<Message> li = new LogicalHandlerInterceptor<Message>(binding1);
+        li.handleMessage(outMessage);
+        control1.verify();
     }
 }

Modified: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/HandlerClientServerTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/HandlerClientServerTest.java?view=diff&rev=475675&r1=475674&r2=475675
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/HandlerClientServerTest.java (original)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/HandlerClientServerTest.java Thu Nov 16 02:43:34 2006
@@ -65,9 +65,8 @@
 
         int result = port.addNumbers(10, 20);
         assertEquals(200, result);
-        //int result1 = port.addNumbers(5, 6);
-        //TODO: This test can not pass due to jira cxf-195
-        //assertEquals(11, result1);
+        int result1 = port.addNumbers(5, 6);
+        assertEquals(11, result1);
     }
 
 }