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/01 18:46:39 UTC

svn commit: r470011 - in /incubator/cxf/trunk: distribution/src/main/release/samples/handlers/ distribution/src/main/release/samples/handlers/src/demo/handlers/client/ distribution/src/main/release/samples/handlers/src/demo/handlers/common/ distributio...

Author: jliu
Date: Wed Nov  1 09:46:38 2006
New Revision: 470011

URL: http://svn.apache.org/viewvc?view=rev&rev=470011
Log:
Update handler demo and handler system test.

Added:
    incubator/cxf/trunk/distribution/src/main/release/samples/handlers/src/demo/handlers/common/LoggingHandler.java   (with props)
Modified:
    incubator/cxf/trunk/distribution/src/main/release/samples/handlers/README.txt
    incubator/cxf/trunk/distribution/src/main/release/samples/handlers/build.xml
    incubator/cxf/trunk/distribution/src/main/release/samples/handlers/src/demo/handlers/client/Client.java
    incubator/cxf/trunk/distribution/src/main/release/samples/handlers/src/demo/handlers/common/SmallNumberHandler.java
    incubator/cxf/trunk/distribution/src/main/release/samples/handlers/src/demo/handlers/common/demo_handlers.xml
    incubator/cxf/trunk/distribution/src/main/release/samples/handlers/src/demo/handlers/server/AddNumbersImpl.java
    incubator/cxf/trunk/distribution/src/main/release/samples/handlers/wsdl/addNumbers.wsdl
    incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/AddNumbersImpl.java
    incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/HandlerClientServerTest.java
    incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/SmallNumberHandler.java
    incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/handlers.xml
    incubator/cxf/trunk/testutils/src/main/resources/wsdl/addNumbers.wsdl

Modified: incubator/cxf/trunk/distribution/src/main/release/samples/handlers/README.txt
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/distribution/src/main/release/samples/handlers/README.txt?view=diff&rev=470011&r1=470010&r2=470011
==============================================================================
--- incubator/cxf/trunk/distribution/src/main/release/samples/handlers/README.txt (original)
+++ incubator/cxf/trunk/distribution/src/main/release/samples/handlers/README.txt Wed Nov  1 09:46:38 2006
@@ -9,22 +9,9 @@
 within the service implementation class. For this demo, LoggingHandler
 is SOAPHandler that logs the entire SOAP message content to stdout.
 
-While the annotation in the service implementation class specifies
-that the server should use the LoggingHandler, the demo shows how
-this behaviour is superceded by information obtained from the
-celtix-server.xml configuration file, thus allowing control over the
-server's behaviour without changing the code.  When the server process
-uses the configuration file, LoggingHandler is replaced with
-FileLoggingHandler, which logs simple informative messages, not the
-entire message content, to the console and adds information to the
-demo.log file.
-
 The client includes a logical handler that checks the parameters on
 outbound requests and short-circuits the invocation in certain
-circumstances. This handler is not specified programatically but
-through configuration in the file celtix-client.xml.  Alternatively,
-you can run the client without applying the configuration.
-In this case, the client does not instantiate a handler.
+circumstances. This handler is specified programatically.
 
 Please review the README in the samples directory before continuing.
 
@@ -52,12 +39,17 @@
   ant server 
   ant client
 
-When using these ant targets, the server process uses the FileLoggingHandler
+When using these ant targets, the server process uses the LoggingHandler
 and the client process uses the SmallNumberHandler.  Notice that the both
-the client and server consoles display short informative messages.  The server's
-handler also appends information to the file demo.log.  The client handler
-examines the operation parameters and, depending on the parameter values, may
-not forward the request to the server.
+the client and server consoles display short informative messages.  The 
+client handler examines the operation parameters and, depending on the 
+parameter values, may not forward the request to the server. The server 
+handler displays the entire content of each message in its console and
+the client no longer uses a handler.  The @HandlerChain annotation in the
+implementation class indicates that the file demo_handler.xml includes the
+information needed to identify the handler class.
+
+  @HandlerChain(file = "../common/demo_handlers.xml", name = "DemoHandlerChain")
 
 Look in the build.xml file to see how an argument to the java executable specifies
 use of the configuration file.  For example:
@@ -70,28 +62,6 @@
 
 After running the client, terminate the server process.
 
-Now run the server process using the LoggingHandler.
-
-Using either UNIX or Windows:
-
-  ant server2  (in the background or another window)
-  ant client2
-
-The ant targets client2 and server2 do not include the attribute that
-specifies the configuration file.  For example:
-
-  <target name="client2" description="run demo client" depends="build">
-    <celtixrun classname="demo.handlers.client.Client"
-               param1="${basedir}/wsdl/addNumbers.wsdl"/>
-  </target>
-
-Now, the server displays the entire content of each message in its console and
-the client no longer uses a handler.  The @HandlerChain annotation in the
-implementation class indicates that the file demo_handler.xml includes the
-information needed to identify the handler class.
-
-  @HandlerChain(file = "../common/demo_handlers.xml", name = "DemoHandlerChain")
-
 To remove the code generated from the WSDL file and the .class
 files, run:
 
@@ -144,50 +114,13 @@
 Running the demo using java
 ---------------------------
 
-Run the applications using the configuration information in the files
-celtix-server.xml and celtix-client.xml.  The server will use the FileLoggingHandler
-and the client will use the SmallNumberHandler.
-
-From the samples/handlers directory run the commands (entered on a single command line):
-
-For UNIX (must use forward slashes):
-    java -Djava.util.logging.config.file=$CELTIX_HOME/etc/logging.properties
-         -Dceltix.config.file=file:///$CELTIX_HOME/samples/handlers/celtix-server.xml
-         demo.handlers.server.Server &
-
-    java -Djava.util.logging.config.file=$CELTIX_HOME/etc/logging.properties
-         -Dceltix.config.file=file:///$CELTIX_HOME/samples/handlers/celtix-client.xml
-         demo.handlers.client.Client ./wsdl/addNumbers.wsdl
-
-The server process starts in the background.
-
-For Windows (may use either forward or back slashes):
-  start 
-    java -Djava.util.logging.config.file=%CELTIX_HOME%\etc\logging.properties
-         -Dceltix.config.file=file:///%CELTIX_HOME%\samples\handlers\celtix-server.xml
-         demo.handlers.server.Server
-
-    java -Djava.util.logging.config.file=%CELTIX_HOME%\etc\logging.properties
-         -Dceltix.config.file=file:///%CELTIX_HOME%\samples\handlers\celtix-client.xml
-         demo.handlers.client.Client .\wsdl\addNumbers.wsdl
-
-The server process starts in a new command window.
-
-Notice that the FileLoggingHandler, specified in the configuration file
-celtix-server.xml, logs information to the console and makes entries into
-the file demo.log, which is in the samples/handler directory.  Also, the
-SmallNumberHandler, specified in the configuration file celtix-client.xml,
-logs information to the console in which the client application runs.
-
-Now run the server process using the LoggingHandler.  The client does not use a handler.
-
 From the samples/handlers directory run the commands (entered on a single command line):
 
 For UNIX (must use forward slashes):
-    java -Djava.util.logging.config.file=$CXF_HOME/etc/logging.properties
+    java -Djava.util.logging.config.file=$CXF_HOME%/etc/logging.properties
          demo.handlers.server.Server &
 
-    java -Djava.util.logging.config.file=$CXF_HOME/etc/logging.properties
+    java -Djava.util.logging.config.file=$CXF_HOME%/etc/logging.properties
          demo.handlers.client.Client ./wsdl/addNumbers.wsdl
 
 The server process starts in the background.

Modified: incubator/cxf/trunk/distribution/src/main/release/samples/handlers/build.xml
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/distribution/src/main/release/samples/handlers/build.xml?view=diff&rev=470011&r1=470010&r2=470011
==============================================================================
--- incubator/cxf/trunk/distribution/src/main/release/samples/handlers/build.xml (original)
+++ incubator/cxf/trunk/distribution/src/main/release/samples/handlers/build.xml Wed Nov  1 09:46:38 2006
@@ -29,14 +29,6 @@
         <cxfrun classname="demo.handlers.server.Server" param1="${basedir}/wsdl/addNumbers.wsdl"/>
     </target>
 
-    <target name="client2" description="run demo client with out handlers" depends="build">
-        <cxfrun classname="demo.handlers.client.Client" param1="${basedir}/wsdl/addNumbers.wsdl"/>
-    </target>
-
-    <target name="server2" description="run demo server with out handlers" depends="build">
-        <cxfrun classname="demo.handlers.server.Server" param1="${basedir}/wsdl/addNumbers.wsdl"/>
-    </target>
-
     <target name="generate.code">
         <echo level="info" message="Generating code using wsdl2java..."/>
         <wsdl2java file="addNumbers.wsdl"/>

Modified: incubator/cxf/trunk/distribution/src/main/release/samples/handlers/src/demo/handlers/client/Client.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/distribution/src/main/release/samples/handlers/src/demo/handlers/client/Client.java?view=diff&rev=470011&r1=470010&r2=470011
==============================================================================
--- incubator/cxf/trunk/distribution/src/main/release/samples/handlers/src/demo/handlers/client/Client.java (original)
+++ incubator/cxf/trunk/distribution/src/main/release/samples/handlers/src/demo/handlers/client/Client.java Wed Nov  1 09:46:38 2006
@@ -20,12 +20,19 @@
 package demo.handlers.client;
 
 import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
 import javax.xml.namespace.QName;
+
+import javax.xml.ws.BindingProvider;
+import javax.xml.ws.handler.Handler;
+
+import demo.handlers.common.SmallNumberHandler;
 import org.apache.handlers.AddNumbers;
 import org.apache.handlers.AddNumbersFault;
 import org.apache.handlers.AddNumbersService;
 
-
 public final class Client {
 
     static QName serviceName = new QName("http://apache.org/handlers",
@@ -48,16 +55,13 @@
         AddNumbersService service = new AddNumbersService(wsdl.toURL(), serviceName);
         AddNumbers port = (AddNumbers)service.getPort(portName, AddNumbers.class);
 
-        try {
-            String number1 = "10";
-            System.out.printf("Invoking addNumbers\n");
-            port.addNumbers(number1);
-            System.out.printf("Invoking addNumbers done\n");
-            //System.out.printf("The result of adding %d and %d is %d.\n\n", number1, number2, result);
-
-            //Comment below out as int type doesnt work. see jira 136
+        //Add client side handlers programmatically
+        SmallNumberHandler sh = new SmallNumberHandler();
+        List<Handler> newHandlerChain = new ArrayList<Handler>();
+        newHandlerChain.add(sh);
+        ((BindingProvider)port).getBinding().setHandlerChain(newHandlerChain);
 
-/*
+        try {
             int number1 = 10;
             int number2 = 20;
 
@@ -76,7 +80,7 @@
             System.out.printf("Invoking addNumbers(%d, %d)\n", number1, number2);
             result = port.addNumbers(number1, number2);
             System.out.printf("The result of adding %d and %d is %d.\n", number1, number2, result);
-*/
+
         } catch (AddNumbersFault ex) {
             System.out.printf("Caught AddNumbersFault: %s\n", ex.getFaultInfo().getMessage());
         }

Added: incubator/cxf/trunk/distribution/src/main/release/samples/handlers/src/demo/handlers/common/LoggingHandler.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/distribution/src/main/release/samples/handlers/src/demo/handlers/common/LoggingHandler.java?view=auto&rev=470011
==============================================================================
--- incubator/cxf/trunk/distribution/src/main/release/samples/handlers/src/demo/handlers/common/LoggingHandler.java (added)
+++ incubator/cxf/trunk/distribution/src/main/release/samples/handlers/src/demo/handlers/common/LoggingHandler.java Wed Nov  1 09:46:38 2006
@@ -0,0 +1,104 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 demo.handlers.common;
+
+
+import java.io.PrintStream;
+import java.util.Map;
+import java.util.Set;
+
+import javax.xml.namespace.QName;
+import javax.xml.soap.SOAPMessage;
+import javax.xml.ws.handler.MessageContext;
+import javax.xml.ws.handler.soap.SOAPHandler;
+import javax.xml.ws.handler.soap.SOAPMessageContext;
+
+/*
+ * This simple SOAPHandler will output the contents of incoming
+ * and outgoing messages.
+ */
+public class LoggingHandler implements SOAPHandler<SOAPMessageContext> {
+
+    private PrintStream out;
+
+    public LoggingHandler() {
+        setLogStream(System.out);
+    }
+
+    protected final void setLogStream(PrintStream ps) {
+        out = ps;
+    }
+
+    public void init(Map c) {
+        System.out.println("LoggingHandler : init() Called....");
+    }
+
+    public Set<QName> getHeaders() {
+        return null;
+    }
+
+    public boolean handleMessage(SOAPMessageContext smc) {
+        System.out.println("LoggingHandler : handleMessage Called....");
+        logToSystemOut(smc);
+        return true;
+    }
+
+    public boolean handleFault(SOAPMessageContext smc) {
+        System.out.println("LoggingHandler : handleFault Called....");
+        logToSystemOut(smc);
+        return true;
+    }
+
+    // nothing to clean up
+    public void close(MessageContext messageContext) {
+        System.out.println("LoggingHandler : close() Called....");
+    }
+
+    // nothing to clean up
+    public void destroy() {
+        System.out.println("LoggingHandler : destroy() Called....");
+    }
+
+    /*
+     * Check the MESSAGE_OUTBOUND_PROPERTY in the context
+     * to see if this is an outgoing or incoming message.
+     * Write a brief message to the print stream and
+     * output the message. The writeTo() method can throw
+     * SOAPException or IOException
+     */
+    protected void logToSystemOut(SOAPMessageContext smc) {
+        Boolean outboundProperty = (Boolean)
+            smc.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
+
+        if (outboundProperty.booleanValue()) {
+            out.println("\nOutbound message:");
+        } else {
+            out.println("\nInbound message:");
+        }
+
+        SOAPMessage message = smc.getMessage();
+        try {
+            message.writeTo(out);
+            out.println();
+        } catch (Exception e) {
+            out.println("Exception in handler: " + e);
+        }
+    }
+}

Propchange: incubator/cxf/trunk/distribution/src/main/release/samples/handlers/src/demo/handlers/common/LoggingHandler.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/cxf/trunk/distribution/src/main/release/samples/handlers/src/demo/handlers/common/LoggingHandler.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/cxf/trunk/distribution/src/main/release/samples/handlers/src/demo/handlers/common/SmallNumberHandler.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/distribution/src/main/release/samples/handlers/src/demo/handlers/common/SmallNumberHandler.java?view=diff&rev=470011&r1=470010&r2=470011
==============================================================================
--- incubator/cxf/trunk/distribution/src/main/release/samples/handlers/src/demo/handlers/common/SmallNumberHandler.java (original)
+++ incubator/cxf/trunk/distribution/src/main/release/samples/handlers/src/demo/handlers/common/SmallNumberHandler.java Wed Nov  1 09:46:38 2006
@@ -20,15 +20,15 @@
 package demo.handlers.common;
 
 import java.util.Map;
-//import javax.xml.bind.JAXBContext;
-//import javax.xml.bind.JAXBException;
-//import javax.xml.ws.LogicalMessage;
-//import javax.xml.ws.ProtocolException;
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBException;
+import javax.xml.ws.LogicalMessage;
+import javax.xml.ws.ProtocolException;
 import javax.xml.ws.handler.LogicalHandler;
 import javax.xml.ws.handler.LogicalMessageContext;
 import javax.xml.ws.handler.MessageContext;
-//import org.objectweb.handlers.types.AddNumbers;
-//import org.objectweb.handlers.types.AddNumbersResponse;
+import org.apache.handlers.types.AddNumbers;
+import org.apache.handlers.types.AddNumbersResponse;
 
 
 
@@ -42,8 +42,7 @@
 
     public final boolean handleMessage(LogicalMessageContext messageContext) {
         System.out.println("LogicalMessageHandler handleMessage called");
-        //Comment below out as int type doesnt work. see jira 136
-/*
+
         try {
             boolean outbound = (Boolean)messageContext.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
 
@@ -86,8 +85,7 @@
         } catch (JAXBException ex) {
             throw new ProtocolException(ex);
         }
-        */
-        return true;
+
     }
 
     public final boolean handleFault(LogicalMessageContext messageContext) {

Modified: incubator/cxf/trunk/distribution/src/main/release/samples/handlers/src/demo/handlers/common/demo_handlers.xml
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/distribution/src/main/release/samples/handlers/src/demo/handlers/common/demo_handlers.xml?view=diff&rev=470011&r1=470010&r2=470011
==============================================================================
--- incubator/cxf/trunk/distribution/src/main/release/samples/handlers/src/demo/handlers/common/demo_handlers.xml (original)
+++ incubator/cxf/trunk/distribution/src/main/release/samples/handlers/src/demo/handlers/common/demo_handlers.xml Wed Nov  1 09:46:38 2006
@@ -24,8 +24,8 @@
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee">
     <handler-chain>
 	<handler>
-		<handler-name>SmallNumberHandler</handler-name>
-		<handler-class>demo.handlers.common.SmallNumberHandler</handler-class>
+		<handler-name>LoggingHandler</handler-name>
+		<handler-class>demo.handlers.common.LoggingHandler</handler-class>
 	</handler>
     </handler-chain>
 </handler-chains>

Modified: incubator/cxf/trunk/distribution/src/main/release/samples/handlers/src/demo/handlers/server/AddNumbersImpl.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/distribution/src/main/release/samples/handlers/src/demo/handlers/server/AddNumbersImpl.java?view=diff&rev=470011&r1=470010&r2=470011
==============================================================================
--- incubator/cxf/trunk/distribution/src/main/release/samples/handlers/src/demo/handlers/server/AddNumbersImpl.java (original)
+++ incubator/cxf/trunk/distribution/src/main/release/samples/handlers/src/demo/handlers/server/AddNumbersImpl.java Wed Nov  1 09:46:38 2006
@@ -23,7 +23,7 @@
 import javax.jws.WebService;
 import org.apache.handlers.AddNumbers;
 import org.apache.handlers.AddNumbersFault;
-//import org.objectweb.handlers.types.FaultDetail;
+import org.apache.handlers.types.FaultDetail;
 
 
 @WebService(name = "AddNumbers",
@@ -42,9 +42,8 @@
      * @throws AddNumbersException
      *             if any of the numbers to be added is negative.
      */
-    public void addNumbers(String number1) throws AddNumbersFault {
-        System.out.println("addNumbers called....." + number1);
-/*
+    public int addNumbers(int number1, int number2) throws AddNumbersFault {
+        System.out.println("addNumbers called....." + number1 + ":" + number2);
         if (number1 < 0 || number2 < 0) {
             String message = "Negative number cant be added!";
             String detail = "Numbers: " + number1 + ", " + number2;
@@ -54,8 +53,6 @@
             throw new AddNumbersFault(message, fault);
         }
         return number1 + number2;
-        */
-        return;
     }
 
 }

Modified: incubator/cxf/trunk/distribution/src/main/release/samples/handlers/wsdl/addNumbers.wsdl
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/distribution/src/main/release/samples/handlers/wsdl/addNumbers.wsdl?view=diff&rev=470011&r1=470010&r2=470011
==============================================================================
--- incubator/cxf/trunk/distribution/src/main/release/samples/handlers/wsdl/addNumbers.wsdl (original)
+++ incubator/cxf/trunk/distribution/src/main/release/samples/handlers/wsdl/addNumbers.wsdl Wed Nov  1 09:46:38 2006
@@ -35,13 +35,15 @@
 
             <complexType name="addNumbersResponse">
                 <sequence>
+                    <element name="return" type="xsd:int" />
                 </sequence>
             </complexType>
             <element name="addNumbersResponse" type="x1:addNumbersResponse"/>
 
             <complexType name="addNumbers">
                 <sequence>
-                    <element name="arg0" type="xsd:string" />
+                    <element name="arg0" type="xsd:int" />
+                    <element name="arg1" type="xsd:int" />
                 </sequence>
             </complexType>
             <element name="addNumbers" type="x1:addNumbers"/>

Modified: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/AddNumbersImpl.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/AddNumbersImpl.java?view=diff&rev=470011&r1=470010&r2=470011
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/AddNumbersImpl.java (original)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/AddNumbersImpl.java Wed Nov  1 09:46:38 2006
@@ -41,8 +41,9 @@
      * @throws AddNumbersException
      *             if any of the numbers to be added is negative.
      */
-    public void addNumbers(String number1) throws AddNumbersFault {
-        System.out.println("addNumbers called....." + number1);
+    public int addNumbers(int number1, int number2) throws AddNumbersFault {
+        System.out.println("addNumbers called....., number1: " + number1 + " number2: " + number2);
+        return number1 * number2;
     }
 
 }

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=470011&r1=470010&r2=470011
==============================================================================
--- 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 Wed Nov  1 09:46:38 2006
@@ -20,11 +20,15 @@
 package org.apache.cxf.systest.handlers;
 
 import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
 
 import javax.xml.namespace.QName;
 
 //import javax.xml.transform.stream.StreamSource;
+import javax.xml.ws.BindingProvider;
 import javax.xml.ws.Endpoint;
+import javax.xml.ws.handler.Handler;
 
 import junit.framework.Test;
 import junit.framework.TestSuite;
@@ -76,11 +80,18 @@
 
         AddNumbersService service = new AddNumbersService(wsdl, serviceName);
         AddNumbers port = (AddNumbers)service.getPort(portName, AddNumbers.class);
-
-        port.addNumbers("20");
-
-        //This assertion can not pass due to jira CXF-136: int type or more than two parameters dont work
-        //assertEquals("2020", result);
+        
+        //Add client side handlers programmatically
+        SmallNumberHandler sh = new SmallNumberHandler();
+        List<Handler> newHandlerChain = new ArrayList<Handler>();
+        newHandlerChain.add(sh);
+        ((BindingProvider)port).getBinding().setHandlerChain(newHandlerChain);
+
+        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);
     }
 
 }

Modified: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/SmallNumberHandler.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/SmallNumberHandler.java?view=diff&rev=470011&r1=470010&r2=470011
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/SmallNumberHandler.java (original)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/SmallNumberHandler.java Wed Nov  1 09:46:38 2006
@@ -19,38 +19,94 @@
 package org.apache.cxf.systest.handlers;
 
 import java.util.Map;
-/*
- * import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException;
- * import javax.xml.ws.LogicalMessage; import javax.xml.ws.ProtocolException;
- */
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBException;
+import javax.xml.ws.LogicalMessage;
+import javax.xml.ws.ProtocolException;
 import javax.xml.ws.handler.LogicalHandler;
 import javax.xml.ws.handler.LogicalMessageContext;
 import javax.xml.ws.handler.MessageContext;
 
-// import org.apache.handlers.types.AddNumbers;
+import org.apache.handlers.types.AddNumbers;
+import org.apache.handlers.types.AddNumbersResponse;
 
-// import org.apache.handlers.types.AddNumbersResponse;
 
 /**
  * handles addition of small numbers.
  */
-public class SmallNumberHandler implements
-        LogicalHandler<LogicalMessageContext> {
+public class SmallNumberHandler implements LogicalHandler<LogicalMessageContext> {
+
+
+    // Implementation of javax.xml.ws.handler.Handler
+
     public final boolean handleMessage(LogicalMessageContext messageContext) {
-        //System.out.println("SmallNumberHandler : handleMessage Called....");
-        return true;
+        //System.out.println("LogicalMessageHandler handleMessage called");
+
+        try {
+            boolean outbound = (Boolean)messageContext.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
+
+            if (outbound) {
+                // get the LogicalMessage from our context
+                //
+                LogicalMessage msg = messageContext.getMessage();
+
+                // check the payload, if its an AddNumbers request, we'll intervene
+                //
+                JAXBContext jaxbContext = JAXBContext.newInstance(AddNumbers.class);
+                Object payload = msg.getPayload(jaxbContext);
+
+                if (payload instanceof AddNumbers) {
+                    AddNumbers req = (AddNumbers)payload;
+
+                    // now, if the arguments are small, let's do the calculation here
+                    //
+                    int a = req.getArg0();
+                    int b = req.getArg1();
+
+                    if (isSmall(a) && isSmall(b)) {
+                        int answer = a + b;
+
+                        //System.out.printf("SmallNumberHandler addNumbers(%d, %d) == %d\n", a, b, answer);
+                        // ok, we've done the calculation, so build the
+                        // response and set it as the payload of the message
+                        AddNumbersResponse resp = new AddNumbersResponse();
+                        resp.setReturn(answer);
+                        msg.setPayload(resp, jaxbContext);
+
+                        // finally, return false, indicating that request
+                        // processing stops here and our answer will be
+                        // returned to the client
+                        return false;
+                    }
+                }
+            }
+            return true;
+        } catch (JAXBException ex) {
+            throw new ProtocolException(ex);
+        }
+
     }
 
     public final boolean handleFault(LogicalMessageContext messageContext) {
+        System.out.println("LogicalMessageHandler handleFault called");
+        System.out.println(messageContext);
+
         return true;
     }
 
     public void close(MessageContext ctx) {
+        System.out.println("LogicalHandler close called");
     }
 
     public void init(Map config) {
+        System.out.println("LogicalHandler init called");
     }
 
     public void destroy() {
+        System.out.println("LogicalHandler close called");
+    }
+
+    private boolean isSmall(int i) {
+        return i > 0 && i <= 10;
     }
 }

Modified: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/handlers.xml
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/handlers.xml?view=diff&rev=470011&r1=470010&r2=470011
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/handlers.xml (original)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/handlers.xml Wed Nov  1 09:46:38 2006
@@ -5,15 +5,7 @@
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee">
     <handler-chain>
-	<handler>
-		<handler-name>lh1</handler-name>
-		<handler-class>org.apache.cxf.systest.handlers.SmallNumberHandler</handler-class>
-		<init-param>
-			<param-name>token</param-name>
-			<param-value>String</param-value>
-		</init-param>
-	</handler>
-	<handler>
+        <handler>
 		<handler-name>ph1</handler-name>
 		<handler-class>org.apache.cxf.systest.handlers.LoggingHandler</handler-class>
 		<init-param>

Modified: incubator/cxf/trunk/testutils/src/main/resources/wsdl/addNumbers.wsdl
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/testutils/src/main/resources/wsdl/addNumbers.wsdl?view=diff&rev=470011&r1=470010&r2=470011
==============================================================================
--- incubator/cxf/trunk/testutils/src/main/resources/wsdl/addNumbers.wsdl (original)
+++ incubator/cxf/trunk/testutils/src/main/resources/wsdl/addNumbers.wsdl Wed Nov  1 09:46:38 2006
@@ -35,13 +35,15 @@
 
             <complexType name="addNumbersResponse">
                 <sequence>
+                    <element name="return" type="xsd:int" />
                 </sequence>
             </complexType>
             <element name="addNumbersResponse" type="x1:addNumbersResponse"/>
 
             <complexType name="addNumbers">
                 <sequence>
-                    <element name="arg0" type="xsd:string" />
+                    <element name="arg0" type="xsd:int" />
+                    <element name="arg1" type="xsd:int" />
                 </sequence>
             </complexType>
             <element name="addNumbers" type="x1:addNumbers"/>
@@ -53,7 +55,7 @@
                     <element name="message" type="xsd:string" />
                 </sequence>
             </complexType>
-        </xsd:schema>
+       </xsd:schema>
     </types>
     <message name="addNumbers">
         <part name="parameters" element="x1:addNumbers" />