You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@beehive.apache.org by mm...@apache.org on 2004/09/17 19:37:34 UTC

svn commit: rev 46266 - in incubator/beehive/trunk/wsm: drt drt/tests drt/tests/org/apache/beehive/wsm/axis drt/tests/org/apache/beehive/wsm/jsr181/model drt/tests/org/apache/beehive/wsm/jsr181/model/fakeAnnotations src/runtime/org/apache/beehive/wsm/axis src/runtime/org/apache/beehive/wsm/jsr181/model src/runtime/org/apache/beehive/wsm/jsr181/processor/apt test/webapps/AnnotatedAxis/WEB-INF

Author: mmerz
Date: Fri Sep 17 10:37:33 2004
New Revision: 46266

Added:
   incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/model/fakeAnnotations/handlerChainConfig.xml   (contents, props changed)
Removed:
   incubator/beehive/trunk/wsm/drt/tests/FooWSDL.xml~
Modified:
   incubator/beehive/trunk/wsm/drt/build.xml
   incubator/beehive/trunk/wsm/drt/tests/Foo.java
   incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/axis/AxisHookTest.java
   incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/model/Jsr181ModelTest.java
   incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/axis/DropInDeploymentHandler.java
   incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/QNameInfo.java
   incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/SOAPMessageHandlerInfo.java
   incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/WebServiceTYPEMetadata.java
   incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/processor/apt/WsmAnnotationProcessor.java
   incubator/beehive/trunk/wsm/test/webapps/AnnotatedAxis/WEB-INF/server-config.wsdd
Log:
Added support for HandlerChain Annotations and made the AXIS WSM components
backward compatible with the original non-annotated .jws files so both types can
be placed in the context root.

Contributor: Jonathan Colwell



Modified: incubator/beehive/trunk/wsm/drt/build.xml
==============================================================================
--- incubator/beehive/trunk/wsm/drt/build.xml	(original)
+++ incubator/beehive/trunk/wsm/drt/build.xml	Fri Sep 17 10:37:33 2004
@@ -91,6 +91,9 @@
             verbose="false"
             failonerror="true"
             />
+        <copy todir="${build.tests}" >
+            <fileset dir="${tests.src}" includes="**/*.xml" />
+        </copy>
     </target>
 
     <target name="run-drt">

Modified: incubator/beehive/trunk/wsm/drt/tests/Foo.java
==============================================================================
--- incubator/beehive/trunk/wsm/drt/tests/Foo.java	(original)
+++ incubator/beehive/trunk/wsm/drt/tests/Foo.java	Fri Sep 17 10:37:33 2004
@@ -39,8 +39,8 @@
       return (level > 5);
     }
 
-    @WebMethod @Oneway public String goHome(@WebParam(name="when") long time)
+    @WebMethod @Oneway public void goHome(@WebParam(name="when") long time)
     {
-      return "Now";
+
     }
   }

Modified: incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/axis/AxisHookTest.java
==============================================================================
--- incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/axis/AxisHookTest.java	(original)
+++ incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/axis/AxisHookTest.java	Fri Sep 17 10:37:33 2004
@@ -86,7 +86,7 @@
          */
         //assertTrue(EnumWrapper.DOCUMENT.equals(sd.getStyle()));
         assertEquals(EnumWrapper.WRAPPED, sd.getStyle());
-        OperationDesc twoWayOp = sd.getOperationByName(WM_JAVAMETHODNAME);
+        OperationDesc twoWayOp = sd.getOperationByName(WM_OPERATION);
         assertNotNull(twoWayOp);
         if (twoWayOp != null) {
             assertEquals(WM_ACTION, twoWayOp.getSoapAction());
@@ -101,7 +101,7 @@
             }
         }
             
-        OperationDesc oneWayOp = sd.getOperationByName(WM_JAVAONEWAYMETHODNAME);
+        OperationDesc oneWayOp = sd.getOperationByName(WM_ONEWAY + WM_OPERATION);
         assertNotNull(oneWayOp);
         if (oneWayOp != null) {
             assertEquals(WM_ONEWAY + WM_ACTION, oneWayOp.getSoapAction());

Modified: incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/model/Jsr181ModelTest.java
==============================================================================
--- incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/model/Jsr181ModelTest.java	(original)
+++ incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/model/Jsr181ModelTest.java	Fri Sep 17 10:37:33 2004
@@ -142,12 +142,14 @@
         WebService wsAnnotation = new FakeWebServiceAnnotation("", "", "", "", "");
         typeAnnotations.add(wsAnnotation);
 
-        typeAnnotations.add(new FakeHandlerChainAnnotation("testfile",
-                "testname"));
+        typeAnnotations.add(new FakeHandlerChainAnnotation
+                            ("org/apache/beehive/wsm/jsr181/model/fakeAnnotations/handlerChainConfig.xml",
+                             "testname"));
         WebServiceTYPEMetadata type = new WebServiceTYPEMetadata(
                 wsAnnotation, "a.b.c.testclass", typeAnnotations,  methodMetadata);
-        assertTrue(type.getHcFileName() == "testfile");
+        assertTrue(type.getHcFileName() == "org/apache/beehive/wsm/jsr181/model/fakeAnnotations/handlerChainConfig.xml");
         assertTrue(type.getHcName() == "testname");
+        assertFalse(type.getSoapHandlers().isEmpty());
     }
 
     // test empty handler list

Added: incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/model/fakeAnnotations/handlerChainConfig.xml
==============================================================================
--- (empty file)
+++ incubator/beehive/trunk/wsm/drt/tests/org/apache/beehive/wsm/jsr181/model/fakeAnnotations/handlerChainConfig.xml	Fri Sep 17 10:37:33 2004
@@ -0,0 +1,25 @@
+<handler-config>
+  <handler-chain>
+    <handler-chain-name>testname</handler-chain-name>
+    <handler>
+      <handler-name>
+        handlerOne
+      </handler-name>
+      <handler-class>
+        org.apache.beehive.wsm.HandlerOne
+      </handler-class>
+      <init-param>
+        <param-name>param_1</param-name>
+        <param-value>defaultValue</param-value>
+      </init-param>
+    </handler>
+    <handler>
+      <handler-name>
+        handlerTwo
+      </handler-name>
+      <handler-class>
+        org.apache.beehive.wsm.HandlerTwo
+      </handler-class>
+    </handler>
+  </handler-chain>
+</handler-config>

Modified: incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/axis/DropInDeploymentHandler.java
==============================================================================
--- incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/axis/DropInDeploymentHandler.java	(original)
+++ incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/axis/DropInDeploymentHandler.java	Fri Sep 17 10:37:33 2004
@@ -97,6 +97,8 @@
                 ss.setEngine(mc.getAxisEngine());
                 ss.init();  
                 mc.setService(ss);
+                // blow away the real path to bypass the regular JWSHandler
+                mc.removeProperty(Constants.MC_REALPATH);
             }
        
         } catch (Exception e) {
@@ -115,56 +117,59 @@
     {
 
         if (cls != null) {
-
-            WebServiceTYPEMetadata wsm = WsmReflectionAnnotationProcessor
-                .getObjectModel(cls);
-        
             SOAPService rpc = mSoapServiceMap.get(cls);
 
             if (rpc == null) {
-                HandlerHandler hh = new HandlerHandler();
-                hh.init(wsm);
-                rpc = new SOAPService(hh, new RPCProvider(), hh);
-                rpc.setName(wsm.getWsName());
-                rpc.setOption(RPCProvider.OPTION_CLASSNAME, cls.getName() );
-
-                // Take the setting for the scope option from the handler
-                // parameter named "scope"
-                String scope = (String)getOption(RPCProvider.OPTION_SCOPE);
-                if (scope == null) {
-                    scope = "Request";
-                }
-                rpc.setOption(RPCProvider.OPTION_SCOPE, scope);
+
+                WebServiceTYPEMetadata wsm = WsmReflectionAnnotationProcessor
+                    .getObjectModel(cls);
+
+                if (wsm != null) {
+                    HandlerHandler hh = new HandlerHandler();
+                    hh.init(wsm);
+                    rpc = new SOAPService(hh, new RPCProvider(), hh);
+                    rpc.setName(wsm.getWsName());
+                    rpc.setOption(RPCProvider.OPTION_CLASSNAME, cls.getName() );
+
+                    // Take the setting for the scope option from the handler
+                    // parameter named "scope"
+                    String scope = (String)getOption(RPCProvider.OPTION_SCOPE);
+                    if (scope == null) {
+                        scope = "Request";
+                    }
+                    rpc.setOption(RPCProvider.OPTION_SCOPE, scope);
                 
-                ServiceDesc sd = AxisHook.createServiceDesc(wsm,
-                                                            cls
-                                                            .getClassLoader());
-                rpc.setServiceDescription(sd);
+                    ServiceDesc sd = AxisHook
+                        .createServiceDesc(wsm, cls.getClassLoader());
+                    rpc.setServiceDescription(sd);
      
-                List allowedMethodNames = sd.getAllowedMethods();
-                Iterator allowIt = allowedMethodNames.iterator();
-                StringBuffer sb = new StringBuffer();
-                boolean firstPass = true;
-                while (allowIt.hasNext()) {
-                    if (firstPass) {
-                        sb.append(' ');
-                        firstPass = false;
+                    List allowedMethodNames = sd.getAllowedMethods();
+                    Iterator allowIt = allowedMethodNames.iterator();
+                    StringBuffer sb = new StringBuffer();
+                    boolean firstPass = true;
+                    while (allowIt.hasNext()) {
+                        if (firstPass) {
+                            sb.append(' ');
+                            firstPass = false;
+                        }
+                        sb.append(((String)allowIt.next()));
                     }
-                    sb.append(((String)allowIt.next()));
-                }
-                rpc.setOption(RPCProvider.OPTION_ALLOWEDMETHODS, sb.toString());
-                rpc.setOption(RPCProvider.OPTION_WSDL_PORTTYPE, wsm.getWsName());
-                rpc.setOption(RPCProvider.OPTION_WSDL_SERVICEPORT,
-                              wsm.getWsName());
-                rpc.setOption(RPCProvider.OPTION_WSDL_SERVICEELEMENT,
-                              wsm.getWsServiceName());
-                rpc.setOption(RPCProvider.OPTION_WSDL_TARGETNAMESPACE, 
-                              wsm.getWsTargetNamespace());
+                    rpc.setOption(RPCProvider.OPTION_ALLOWEDMETHODS,
+                                  sb.toString());
+                    rpc.setOption(RPCProvider.OPTION_WSDL_PORTTYPE,
+                                  wsm.getWsName());
+                    rpc.setOption(RPCProvider.OPTION_WSDL_SERVICEPORT,
+                                  wsm.getWsName());
+                    rpc.setOption(RPCProvider.OPTION_WSDL_SERVICEELEMENT,
+                                  wsm.getWsServiceName());
+                    rpc.setOption(RPCProvider.OPTION_WSDL_TARGETNAMESPACE, 
+                                  wsm.getWsTargetNamespace());
 
-                rpc.setStyle(sd.getStyle());
-                rpc.setUse(sd.getUse());
+                    rpc.setStyle(sd.getStyle());
+                    rpc.setUse(sd.getUse());
                 
-                mSoapServiceMap.put(cls, rpc);                
+                    mSoapServiceMap.put(cls, rpc);                
+                }
             }
             return rpc;
         }

Modified: incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/QNameInfo.java
==============================================================================
--- incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/QNameInfo.java	(original)
+++ incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/QNameInfo.java	Fri Sep 17 10:37:33 2004
@@ -27,6 +27,13 @@
         initFromAnnotation(annotation);
     }
 
+    public QNameInfo(javax.xml.namespace.QName qName) {
+        if(null != qName) {
+            this.namespaceURI = qName.getNamespaceURI();
+            this.localName = qName.getLocalPart();
+        }
+    }
+
 
 /**
      * @param a

Modified: incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/SOAPMessageHandlerInfo.java
==============================================================================
--- incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/SOAPMessageHandlerInfo.java	(original)
+++ incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/SOAPMessageHandlerInfo.java	Fri Sep 17 10:37:33 2004
@@ -41,16 +41,43 @@
      * 
      */
     public SOAPMessageHandlerInfo(SOAPMessageHandler annotation) {
-        setName(annotation.name());
-        setClassName(annotation.className());
-        for (InitParam p : annotation.initParams()) {
-            addInitParam(p.name(), p.value());
+
+        String handlerClassName = annotation.className();
+        if (handlerClassName.length() == 0) {
+            throw new IllegalArgumentException
+                ("A className is required to configure a SOAPMessageHandler");
         }
-        addRoles(Arrays.asList(annotation.roles()));
-        for (QName q : annotation.headers()) {
-            addHeader(new QNameInfo(q));
+        else {
+            setClassName(handlerClassName);
+
+            String handlerName = annotation.name();
+            setName((handlerName.length() > 0) ? handlerName : handlerClassName);
+
+            for (InitParam p : annotation.initParams()) {
+                addInitParam(p.name(), p.value());
+            }
+            addRoles(Arrays.asList(annotation.roles()));
+            for (QName q : annotation.headers()) {
+                addHeader(new QNameInfo(q));
+            }
         }        
     }
+
+    public SOAPMessageHandlerInfo(String handlerClassName,
+                                  String handlerName,
+                                  Map<String, String> initParams,
+                                  Collection<String> roles,
+                                  Collection<QNameInfo> headers)
+    {        
+        setClassName(handlerClassName);
+        setName((handlerName != null && handlerName.length() > 0) 
+                ? handlerName : handlerClassName);
+        
+        addInitParams(initParams);
+        addRoles(roles);
+        addHeaders(headers);
+    }
+
     /**
      * @return Returns the className.
      */

Modified: incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/WebServiceTYPEMetadata.java
==============================================================================
--- incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/WebServiceTYPEMetadata.java	(original)
+++ incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/model/WebServiceTYPEMetadata.java	Fri Sep 17 10:37:33 2004
@@ -3,6 +3,7 @@
 import java.io.IOException;
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Method;
+import java.net.URL;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
@@ -10,7 +11,17 @@
 import java.util.List;
 import java.util.Map;
 import javax.jws.*;
-import javax.jws.soap.*;
+import javax.jws.soap.SOAPBinding;
+import javax.jws.soap.SOAPMessageHandler;
+import javax.jws.soap.SOAPMessageHandlers;
+import javax.xml.namespace.QName;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
 
 import org.apache.beehive.wsm.jsr181.wsdl.WSDLProcessor;
 import org.apache.xmlbeans.XmlException;
@@ -31,7 +42,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  *
- * $Header:$
+ * $Header:$Factory
  */
 
 public class WebServiceTYPEMetadata extends AnnotationModel {
@@ -217,32 +228,47 @@
 
     private void initFromAnnotation(HandlerChain annotation) {
         if (null != annotation) {
-            setHcFileName(annotation.file());
-            setHcName(annotation.name());
+            if (getSoapHandlers().isEmpty()) {
+                String hcPath = annotation.file();
+                String hcName = annotation.name();
+                setHcFileName(hcPath);
+                setHcName(hcName);
+                try {
+                    configureHandlerChain(hcPath, hcName);
+                }
+                catch (Exception e) {
+                    throw new RuntimeException
+                        ("An Exception occurred while configuring"
+                         + " the HandlerChain", e);
+                }
+            }
+            else {
+                throw new IllegalArgumentException
+                    ("SOAPMessageHandlers and HandlerChain annotations" +
+                     " are mutually exclusive, and a SOAPMessageHandlers " +
+                     "annotation is already present.");
+            }
         }
-        // todo: check if SOAPMessageHandlers() is used anywhere -> throw error!
-        // no defaults to handle
-
     }
 
     private void initFromAnnotation(SOAPMessageHandlers annotation) {
+        
         if (null != annotation) {
-            SOAPMessageHandler[] soapMsgHandlerArray = annotation.value();
+            if (getHcFileName() == null) {
+                SOAPMessageHandler[] soapMsgHandlerArray = annotation.value();
 
-            for (int i = 0; i < soapMsgHandlerArray.length; i++) {
-                addSOAPHandler(new SOAPMessageHandlerInfo(
-                        soapMsgHandlerArray[i]));
+                for (int i = 0; i < soapMsgHandlerArray.length; i++) {
+                    addSOAPHandler(new SOAPMessageHandlerInfo
+                                   (soapMsgHandlerArray[i]));
+                }
             }
-        }
-        // todo: check if SOAPMessageHandlers() is used anywhere -> throw error!
-        // walk through the handlers make sure the name is set, or it is
-        // defaulted to the classname
-        for (SOAPMessageHandlerInfo messageHandlerInfo : getSoapHandlers()) {
-            if (messageHandlerInfo.getName().length() == 0) {
-                messageHandlerInfo.setName(messageHandlerInfo.getClassName());
+            else {
+                throw new IllegalArgumentException
+                    ("SOAPMessageHandlers and HandlerChain annotations" +
+                     " are mutually exclusive, and a HandlerChain " +
+                     "annotation is already present.");
             }
-        }
-
+        }        
     }
 
     private void initFromAnnotation(SecurityRoles annotation) {
@@ -258,6 +284,148 @@
             setSiRunAs(annotation.runAs());
         }
         // no defaults to handle
+
+    }
+
+    private void configureHandlerChain(String handlerChainConfigPath,
+                                       String handlerChainName)
+        throws Exception
+    {
+
+        URL handlerChainConfigURL;
+        
+        // check if we have a likely absolute URL
+        if (handlerChainConfigPath.indexOf("://") > 2) {
+
+            handlerChainConfigURL = new URL(handlerChainConfigPath);
+        }
+        else {
+            // attempt to load a handler config file as a resource.
+            /*
+             * FIXME jcolwell@bea.com 2004-Sep-16 -- perhaps add code to ensure
+             * that ClassLoader used to load the config file is the same one
+             * that would be able to load the Class providing these annotations.
+             * 
+             * Using the current ClassLoader for the moment.
+             */
+            handlerChainConfigURL = getClass().getClassLoader()
+                .getResource(handlerChainConfigPath);
+            if (handlerChainConfigURL == null) {
+                // try again using the classes package as a prefix
+                StringBuffer fullPath = new StringBuffer
+                    (javaFQClassName.substring(0,javaFQClassName
+                                               .lastIndexOf('.')));
+
+                if (!handlerChainConfigPath.startsWith("/")) {
+                    fullPath.append('/');
+                }
+
+                handlerChainConfigURL = getClass().getClassLoader()
+                    .getResource(fullPath.toString().replace('.', '/') +
+                                 handlerChainConfigPath); 
+                
+            }
+        }
+        initHandlersFromChainConfig(handlerChainConfigURL, handlerChainName);
+    }
+
+    /**
+     * Made public so specific implementations can configure handlers relevant 
+     * to their own environment.  Calls to this are ignored if SOAPHandlers are 
+     * already configured.
+     *
+     * e.g. in case the config file is located next to the .jws source file in
+     * the context root of an axis webapp rather than in the classpath
+     */
+    public void initHandlersFromChainConfig(URL chainConfigURL,
+                                            String chainName)
+        throws Exception
+    {
+        if (getSoapHandlers().isEmpty() &&
+            chainConfigURL != null && chainName != null) {
+            DocumentBuilderFactory factory =  DocumentBuilderFactory
+                .newInstance();
+            factory.setNamespaceAware(true);
+            factory.setIgnoringComments(true);
+
+            DocumentBuilder builder = factory.newDocumentBuilder();
+            Document doc = builder.parse(chainConfigURL.openStream());
+
+            NodeList handlerChainNodes = doc
+                .getElementsByTagName("handler-chain");
+            for (int j = 0; j < handlerChainNodes.getLength(); j++) {
+                Node handlerChainNode = handlerChainNodes.item(j);
+                if (handlerChainNode.getNodeType() == Node.ELEMENT_NODE) {
+                    Element chainElement = (Element)handlerChainNode;
+                    NodeList chainNames = chainElement
+                        .getElementsByTagName("handler-chain-name");
+                    //should only be one chain name so just grab the first one
+                    if (chainNames.getLength() > 0
+                        && chainName.equals(chainNames.item(0).getFirstChild()
+                                            .getNodeValue())) {
+
+                        NodeList handlers = chainElement
+                            .getElementsByTagName("handler");
+                    
+                        for (int k = 0; k < handlers.getLength(); k++) {
+                            processHandlerNode(handlers.item(k));
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    private void processHandlerNode(Node handlerNode) {
+
+        if (handlerNode.hasChildNodes()) {
+            String handlerName = null;
+            String handlerClassName = null;
+            Map<String, String> initParams = new HashMap<String, String>();
+            Collection<String> roles = new ArrayList<String>();
+            Collection<QNameInfo> headers = new ArrayList<QNameInfo>();
+
+            Node currentChild = handlerNode.getFirstChild();
+            while (currentChild != null) {
+                
+                String nodeName = currentChild.getNodeName();
+                if ("handler-name".equals(nodeName)) {
+                    handlerName = currentChild.getFirstChild().getNodeValue();
+                }
+                else if ("handler-class".equals(nodeName)) {
+                    handlerClassName = currentChild
+                        .getFirstChild().getNodeValue();
+                }
+                else if ("soap-role".equals(nodeName)) {
+                    roles.add(currentChild
+                              .getFirstChild().getNodeValue());
+                }
+                else if ("soap-header".equals(nodeName)) {
+                    headers.add(new QNameInfo(QName.valueOf(currentChild
+                                                            .getFirstChild()
+                                                            .getNodeValue())));
+                }
+                else if ("init-param".equals(nodeName)) {
+                    nodeName = currentChild.getFirstChild().getNodeName();
+                    if ("param-name".equals(nodeName)) {
+                        initParams
+                            .put(currentChild.getFirstChild().getNodeValue(),
+                                 currentChild.getLastChild().getNodeValue());
+                    }
+                    else {
+                        initParams
+                            .put(currentChild.getLastChild().getNodeValue(),
+                                 currentChild.getFirstChild().getNodeValue());
+                    }
+                }
+                currentChild = currentChild.getNextSibling();
+            }
+            addSOAPHandler(new SOAPMessageHandlerInfo(handlerClassName,
+                                                      handlerName,
+                                                      initParams,
+                                                      roles,
+                                                      headers));
+        }
 
     }
 

Modified: incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/processor/apt/WsmAnnotationProcessor.java
==============================================================================
--- incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/processor/apt/WsmAnnotationProcessor.java	(original)
+++ incubator/beehive/trunk/wsm/src/runtime/org/apache/beehive/wsm/jsr181/processor/apt/WsmAnnotationProcessor.java	Fri Sep 17 10:37:33 2004
@@ -242,6 +242,10 @@
         {
             return short.class;
         }
+        else if (name.equals("void"))
+        {
+            return void.class;
+        }
         else
         {
             return Class.forName(name);

Modified: incubator/beehive/trunk/wsm/test/webapps/AnnotatedAxis/WEB-INF/server-config.wsdd
==============================================================================
--- incubator/beehive/trunk/wsm/test/webapps/AnnotatedAxis/WEB-INF/server-config.wsdd	(original)
+++ incubator/beehive/trunk/wsm/test/webapps/AnnotatedAxis/WEB-INF/server-config.wsdd	Fri Sep 17 10:37:33 2004
@@ -11,10 +11,10 @@
    <handler type="java:org.apache.beehive.wsm.axis.DropInDeploymentHandler">
     <parameter name="scope" value="session"/>
    </handler>
-   <!--<handler type="java:org.apache.axis.handlers.JWSHandler">
+  <handler type="java:org.apache.axis.handlers.JWSHandler">
     <parameter name="scope" value="session"/>
    </handler>
-   <handler type="java:org.apache.axis.handlers.JWSHandler">
+    <!--<handler type="java:org.apache.axis.handlers.JWSHandler">
     <parameter name="scope" value="request"/>
     <parameter name="extension" value=".jwr"/>
    </handler>-->