You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@beehive.apache.org by ek...@apache.org on 2005/12/07 08:25:13 UTC

svn commit: r354746 - in /beehive/trunk: system-controls/test/src/webservice/ system-controls/test/src/webservice/jcxgen-tests/ system-controls/test/src/webservice/schemas/ system-controls/test/src/webservice/servers/webapp/WEB-INF/src/web/ system-cont...

Author: ekoneil
Date: Tue Dec  6 23:24:25 2005
New Revision: 354746

URL: http://svn.apache.org/viewcvs?rev=354746&view=rev
Log:
WSM and service control stuff:

- add stub for JAX-RPC artifact generation (don't bother looking, nothing here yet)
- add tests for header values passed into WS methods in Axis
- fix the web service control tests to account for the 181 spec requirement that IN / INOUT params are usable for RPC encoding or headers.  These tests were doc tests passing IN / INOUT not using headers.
- add TypeUtils class that does the introspection on Holders to determine the held type.  This decouples wsm/src/core from some type stuff that needs to move into the service control.

BB: self
Test: WSM and service control tests pass


Added:
    beehive/trunk/wsm/src/core/org/apache/beehive/wsm/processor/generator/jaxrpc/
    beehive/trunk/wsm/src/core/org/apache/beehive/wsm/processor/generator/jaxrpc/JaxRpcResourceGenerator.java   (with props)
    beehive/trunk/wsm/src/core/org/apache/beehive/wsm/util/TypeUtils.java   (with props)
    beehive/trunk/wsm/test/src/junit-server/org/apache/beehive/wsm/test/misc/HeaderParamTest.java   (with props)
    beehive/trunk/wsm/test/webapp/src/org/apache/beehive/wsm/test/headers/NameHeader.java   (with props)
    beehive/trunk/wsm/test/webapp/src/org/apache/beehive/wsm/test/holders/NameHeaderHolder.java   (with props)
    beehive/trunk/wsm/test/webapp/src/webservice/HeaderService.java   (with props)
Modified:
    beehive/trunk/system-controls/test/src/webservice/build.xml
    beehive/trunk/system-controls/test/src/webservice/jcxgen-tests/build.xml
    beehive/trunk/system-controls/test/src/webservice/schemas/DocumentLiteralWrappedSample.wsdl
    beehive/trunk/system-controls/test/src/webservice/servers/webapp/WEB-INF/src/web/Service.jws
    beehive/trunk/system-controls/test/src/webservice/servers/webapp/WEB-INF/webservices/web/complex/DocumentLiteralWrappedSample.java
    beehive/trunk/system-controls/test/src/webservice/tests/org/apache/beehive/controls/system/webservice/units/dlwservice/DocLitWrapWebServiceTest.java
    beehive/trunk/wsm/src/axis/org/apache/beehive/wsm/axis/ServiceDescriptionFactory.java
    beehive/trunk/wsm/test/build.xml
    beehive/trunk/wsm/test/src/junit-server/org/apache/beehive/wsm/test/controls/SimpleControlsTest.java

Modified: beehive/trunk/system-controls/test/src/webservice/build.xml
URL: http://svn.apache.org/viewcvs/beehive/trunk/system-controls/test/src/webservice/build.xml?rev=354746&r1=354745&r2=354746&view=diff
==============================================================================
--- beehive/trunk/system-controls/test/src/webservice/build.xml (original)
+++ beehive/trunk/system-controls/test/src/webservice/build.xml Tue Dec  6 23:24:25 2005
@@ -90,8 +90,8 @@
             <formatter type="plain"/>
             <batchtest filtertrace="off" todir="${log.dir}">
                 <fileset dir="${junit-source.dir}">
-<!--                    <include name="**/SanityTest.java"/>   -->
-<include name="**/SoapMarshallingRpcLitArrayTypesTest.java"/>
+<!--                <include name="**/SanityTest.java"/>   -->
+                    <include name="**/SoapMarshallingRpcLitArrayTypesTest.java"/>
                 </fileset>
             </batchtest>
         </junit>
@@ -351,7 +351,6 @@
         <mkdir dir="${webapp.build.dir}"/>
         <mkdir dir="${log.dir}"/>
     </target>
-
 
     <!-- ================================================================ -->
     <!--                                                                  -->

Modified: beehive/trunk/system-controls/test/src/webservice/jcxgen-tests/build.xml
URL: http://svn.apache.org/viewcvs/beehive/trunk/system-controls/test/src/webservice/jcxgen-tests/build.xml?rev=354746&r1=354745&r2=354746&view=diff
==============================================================================
--- beehive/trunk/system-controls/test/src/webservice/jcxgen-tests/build.xml (original)
+++ beehive/trunk/system-controls/test/src/webservice/jcxgen-tests/build.xml Tue Dec  6 23:24:25 2005
@@ -1,4 +1,22 @@
 <?xml version="1.0" ?>
+
+<!--
+   Copyright 2004 The Apache Software Foundation.
+
+   Licensed 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.
+  
+   $Header:$
+-->
 <project name="Beehive/ServiceControl DRT For JCX Generation" default="drt" basedir=".">
 
     <property environment="os"/>
@@ -102,7 +120,6 @@
     <!-- generate_jcxs - Generate webservice controls from wsdls             -->
     <!-- =================================================================== -->
     <target name="generate_jcxs" depends="gen_xmlbeans">
-
 
         <taskdef name="scgen"
                  classname="org.apache.beehive.controls.system.webservice.generator.ServiceControlGeneratorTask"

Modified: beehive/trunk/system-controls/test/src/webservice/schemas/DocumentLiteralWrappedSample.wsdl
URL: http://svn.apache.org/viewcvs/beehive/trunk/system-controls/test/src/webservice/schemas/DocumentLiteralWrappedSample.wsdl?rev=354746&r1=354745&r2=354746&view=diff
==============================================================================
--- beehive/trunk/system-controls/test/src/webservice/schemas/DocumentLiteralWrappedSample.wsdl (original)
+++ beehive/trunk/system-controls/test/src/webservice/schemas/DocumentLiteralWrappedSample.wsdl Tue Dec  6 23:24:25 2005
@@ -54,15 +54,12 @@
     </complexType>
    </element>
    <element name="createAddressInBody">
-    <complexType>
-     <sequence/>
-    </complexType>
+    <complexType/>
    </element>
    <element name="createAddressInBodyResponse">
     <complexType>
      <sequence>
-      <element name="ReturnCreateAddressInBodyResult" type="xsd:int"/>
-      <element name="out_param_body" type="impl:Address"/>
+      <element name="ReturnCreateAddressInBodyResult" type="impl:Address"/>
      </sequence>
     </complexType>
    </element>
@@ -89,8 +86,7 @@
    <element name="changeAddressInBodyResponse">
     <complexType>
      <sequence>
-      <element name="ChangeAddressInBodyResult" type="xsd:int"/>
-      <element name="inout_param_body" type="impl:Address"/>
+      <element name="ChangeAddressInBodyResult" type="impl:Address"/>
      </sequence>
     </complexType>
    </element>

Modified: beehive/trunk/system-controls/test/src/webservice/servers/webapp/WEB-INF/src/web/Service.jws
URL: http://svn.apache.org/viewcvs/beehive/trunk/system-controls/test/src/webservice/servers/webapp/WEB-INF/src/web/Service.jws?rev=354746&r1=354745&r2=354746&view=diff
==============================================================================
--- beehive/trunk/system-controls/test/src/webservice/servers/webapp/WEB-INF/src/web/Service.jws (original)
+++ beehive/trunk/system-controls/test/src/webservice/servers/webapp/WEB-INF/src/web/Service.jws Tue Dec  6 23:24:25 2005
@@ -33,16 +33,15 @@
 import org.apache.beehive.sample.AddressBookImpl;
 
 @WebService(targetNamespace="http://controlhaus.org/ServiceControlTestServer", serviceName="ServiceControlTest")
-//@SOAPBinding( style = SOAPBinding.Style.RPC, use = SOAPBinding.Use.ENCODED)
 public class Service  {
 
-    AddressBook addressBook;
+    private AddressBook _addressBook;
 
     /**
      * Constructor.
      */
     public Service() {
-        addressBook = new AddressBookImpl();
+        _addressBook = new AddressBookImpl();
     }
     
     /**
@@ -53,7 +52,7 @@
     @WebMethod
     public void addEntry(String name, Address address) throws RemoteException {
         try {
-            addressBook.addEntry(name, address);
+            _addressBook.addEntry(name, address);
         } catch (InvalidNameException e) {
             throw new RemoteException("Invalid name: " +name ,  e);
         }
@@ -76,7 +75,7 @@
             	return result;
             }
             if(0 == "bob".compareTo(name)) throw new RemoteException( "Invalid name", new InvalidNameException("Bob is invalid name!"));
-            return addressBook.getAddressFromName(name);
+            return _addressBook.getAddressFromName(name);
         } catch (InvalidNameException e) {
             throw new RemoteException("Invalid name: " +name ,  e);
         }
@@ -88,16 +87,16 @@
             if(null == name) return null;
             Address[] result = new Address[name.length];
             for(int i=0; i< name.length; i++) {
-             result[i] = addressBook.getAddressFromName(name[i]);
+             result[i] = _addressBook.getAddressFromName(name[i]);
             }
             return result;
         } catch (InvalidNameException e) {
             throw new RemoteException("Invalid name: " +name ,  e);
         }
     }    
-    
+    /*    
     @WebMethod
-    public int FindClosestName(@WebParam( mode=WebParam.Mode.INOUT) StringHolder name) {
+    public int FindClosestName(@WebParam(mode=WebParam.Mode.INOUT) StringHolder name) {
     	System.out.println("Find the closest name for: " + name.value);
     	int res = 0;
     	if(name == null) {
@@ -110,6 +109,7 @@
     	}
     	return res;
     }
+    */
     
     
      @WebMethod

Modified: beehive/trunk/system-controls/test/src/webservice/servers/webapp/WEB-INF/webservices/web/complex/DocumentLiteralWrappedSample.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/system-controls/test/src/webservice/servers/webapp/WEB-INF/webservices/web/complex/DocumentLiteralWrappedSample.java?rev=354746&r1=354745&r2=354746&view=diff
==============================================================================
--- beehive/trunk/system-controls/test/src/webservice/servers/webapp/WEB-INF/webservices/web/complex/DocumentLiteralWrappedSample.java (original)
+++ beehive/trunk/system-controls/test/src/webservice/servers/webapp/WEB-INF/webservices/web/complex/DocumentLiteralWrappedSample.java Tue Dec  6 23:24:25 2005
@@ -70,12 +70,11 @@
      */
     @WebMethod
     @WebResult(name="ReturnCreateAddressInBodyResult")
-    public int createAddressInBody(@WebParam(name="out_param_body", mode=WebParam.Mode.OUT) AddressHolder addressHolder) {
+    public Address createAddressInBody() {
         StateType state = new StateType("WA");
         Phone phoneNumber = new Phone(425, "555", "1234");
         Address address = new Address(10230, "NE Points Drive", "Kirkland", state, 98008, phoneNumber);
-        addressHolder.value = address;
-        return 22;
+        return address;
     }
 
     /**
@@ -100,10 +99,9 @@
      */
     @WebMethod
     @WebResult(name="ChangeAddressInBodyResult")
-    public int changeAddressInBody(@WebParam(name="inout_param_body", mode=WebParam.Mode.INOUT) AddressHolder addressHolder) {
-        Address address = addressHolder.value;
+    public Address changeAddressInBody(@WebParam(name="inout_param_body")Address address) {
         address.setZip(address.getZip() + 1);
-        return 6;
+        return address;
     }
 
     /**

Modified: beehive/trunk/system-controls/test/src/webservice/tests/org/apache/beehive/controls/system/webservice/units/dlwservice/DocLitWrapWebServiceTest.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/system-controls/test/src/webservice/tests/org/apache/beehive/controls/system/webservice/units/dlwservice/DocLitWrapWebServiceTest.java?rev=354746&r1=354745&r2=354746&view=diff
==============================================================================
--- beehive/trunk/system-controls/test/src/webservice/tests/org/apache/beehive/controls/system/webservice/units/dlwservice/DocLitWrapWebServiceTest.java (original)
+++ beehive/trunk/system-controls/test/src/webservice/tests/org/apache/beehive/controls/system/webservice/units/dlwservice/DocLitWrapWebServiceTest.java Tue Dec  6 23:24:25 2005
@@ -17,6 +17,8 @@
  */
 package org.apache.beehive.controls.system.webservice.units.dlwservice;
 
+import javax.xml.rpc.holders.IntHolder;
+
 import junit.framework.Test;
 import junit.framework.TestSuite;
 import org.apache.beehive.controls.api.bean.Control;
@@ -25,8 +27,6 @@
 import org.apache.log4j.Logger;
 import test.DocumentLiteralWrappedSampleService;
 
-import javax.xml.rpc.holders.IntHolder;
-
 public class DocLitWrapWebServiceTest extends ControlTestCase {
 
     private static Logger logger = Logger.getLogger(DocLitWrapWebServiceTest.class);
@@ -99,17 +99,8 @@
         assertTrue(phoneResult.isNilNumber());
     }
 
-
     public void testCreateAddressInBody() throws Exception {
-        web.complex.Address addr = web.complex.Address.Factory.newInstance();
-        GenericHolder gHolder = new GenericHolder(addr);
-        IntHolder iHolder = new IntHolder();
-
-        client.createAddressInBody(gHolder, iHolder);
-
-        assertEquals(22, iHolder.value);
-
-        addr = (web.complex.Address) gHolder.value;
+        web.complex.Address addr = client.createAddressInBody();
         assertEquals("WA", addr.getState().getState());
         assertEquals(425, addr.getPhoneNumber().getAreaCode());
         assertEquals("555", addr.getPhoneNumber().getExchange());
@@ -120,8 +111,6 @@
         assertEquals(98008, addr.getZip());
     }
 
-
-
     public void testCreateAddressInHeader() throws Exception {
         web.complex.Address addr = web.complex.Address.Factory.newInstance();
         GenericHolder gHolder = new GenericHolder(addr);
@@ -142,18 +131,12 @@
         assertEquals(98008, addr.getZip());
     }
 
-
-
     public void testChangeAddressInBody() throws Exception {
         web.complex.Address addr = web.complex.Address.Factory.newInstance();
         addr.setCity("Boulder");
         addr.setZip(66666);
 
-        GenericHolder gHolder = new GenericHolder(addr);
-        int result = client.changeAddressInBody(gHolder);
-
-        assertEquals(6, result);
-        web.complex.Address returnAddr = (web.complex.Address) gHolder.value;
+        web.complex.Address returnAddr = client.changeAddressInBody(addr);
         assertEquals(addr.getCity(), returnAddr.getCity());
         assertEquals(addr.getZip() + 1, returnAddr.getZip());
     }

Modified: beehive/trunk/wsm/src/axis/org/apache/beehive/wsm/axis/ServiceDescriptionFactory.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/wsm/src/axis/org/apache/beehive/wsm/axis/ServiceDescriptionFactory.java?rev=354746&r1=354745&r2=354746&view=diff
==============================================================================
--- beehive/trunk/wsm/src/axis/org/apache/beehive/wsm/axis/ServiceDescriptionFactory.java (original)
+++ beehive/trunk/wsm/src/axis/org/apache/beehive/wsm/axis/ServiceDescriptionFactory.java Tue Dec  6 23:24:25 2005
@@ -61,9 +61,9 @@
 import org.apache.beehive.wsm.model.BeehiveWsParameterMetadata;
 import org.apache.beehive.wsm.model.BeehiveWsSOAPBindingInfo;
 import org.apache.beehive.wsm.model.BeehiveWsTypeMetadata;
-import org.apache.beehive.wsm.registration.TypeRegistrar;
 import org.apache.beehive.wsm.exception.InvalidTypeMappingException;
 import org.apache.beehive.wsm.util.JavaClassUtils;
+import org.apache.beehive.wsm.util.TypeUtils;
 import org.apache.commons.logging.LogFactory;
 import org.apache.commons.logging.Log;
 import org.apache.xmlbeans.XmlBeans;
@@ -394,7 +394,7 @@
 
         /* todo: may need to register the holder type also? */
         if(Holder.class.isAssignableFrom(type))
-            type = TypeRegistrar.getHoldersValueClass(type);
+            type = TypeUtils.getHolderValueClass(type);
 
         /* the type needs to be registered */
         TypeMapping tm = desc.getTypeMapping();

Added: beehive/trunk/wsm/src/core/org/apache/beehive/wsm/processor/generator/jaxrpc/JaxRpcResourceGenerator.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/wsm/src/core/org/apache/beehive/wsm/processor/generator/jaxrpc/JaxRpcResourceGenerator.java?rev=354746&view=auto
==============================================================================
--- beehive/trunk/wsm/src/core/org/apache/beehive/wsm/processor/generator/jaxrpc/JaxRpcResourceGenerator.java (added)
+++ beehive/trunk/wsm/src/core/org/apache/beehive/wsm/processor/generator/jaxrpc/JaxRpcResourceGenerator.java Tue Dec  6 23:24:25 2005
@@ -0,0 +1,50 @@
+/**
+ Copyright 2004 The Apache Software Foundation.
+
+ Licensed 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.
+
+ $Header:$
+ */
+package org.apache.beehive.wsm.processor.generator.jaxrpc;
+
+import org.apache.beehive.wsm.processor.generator.WsmResourceGenerator;
+import org.apache.beehive.wsm.processor.generator.AxisGenerator;
+import com.sun.mirror.apt.AnnotationProcessorEnvironment;
+import com.sun.mirror.declaration.TypeDeclaration;
+
+/**
+ *
+ */
+public class JaxRpcResourceGenerator
+    extends WsmResourceGenerator {
+
+    public static WsmResourceGenerator getInstance() {
+        return new JaxRpcResourceGenerator();
+    }
+
+    private JaxRpcResourceGenerator() {
+    }
+
+    /*
+    serviceEndpoint interface generation should be performed in implementations of this base class
+    depending on the service's target execution environment
+    */
+    public void generate(AnnotationProcessorEnvironment env, TypeDeclaration typeDeclaration) {
+
+        /* generate Service Endpoint Interface */
+
+        /* generate webservices.xml */
+
+        /* generate <service>.wsdl file */
+    }
+}

Propchange: beehive/trunk/wsm/src/core/org/apache/beehive/wsm/processor/generator/jaxrpc/JaxRpcResourceGenerator.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: beehive/trunk/wsm/src/core/org/apache/beehive/wsm/util/TypeUtils.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/wsm/src/core/org/apache/beehive/wsm/util/TypeUtils.java?rev=354746&view=auto
==============================================================================
--- beehive/trunk/wsm/src/core/org/apache/beehive/wsm/util/TypeUtils.java (added)
+++ beehive/trunk/wsm/src/core/org/apache/beehive/wsm/util/TypeUtils.java Tue Dec  6 23:24:25 2005
@@ -0,0 +1,68 @@
+/**
+ Copyright 2004 The Apache Software Foundation.
+
+ Licensed 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.
+
+ $Header:$
+ */
+package org.apache.beehive.wsm.util;
+
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+import java.lang.reflect.GenericArrayType;
+import java.lang.reflect.Array;
+import java.lang.reflect.Field;
+
+import javax.xml.rpc.holders.Holder;
+
+import org.apache.beehive.wsm.databinding.GenericHolder;
+
+/**
+ *
+ */
+public final class TypeUtils {
+
+    private TypeUtils() {
+    }
+
+    public static Class getHolderValueClass(Type holderClass) {
+        Class res = null;
+
+        if(holderClass instanceof ParameterizedType) {
+            ParameterizedType pt = (ParameterizedType)holderClass;
+            Type raw = pt.getRawType();
+
+            if(GenericHolder.class.isAssignableFrom((Class)raw)) {
+                Type[] typeArgs = pt.getActualTypeArguments();
+                if(typeArgs[0] instanceof GenericArrayType) {
+                    Class arrayElementType = (Class)((GenericArrayType)typeArgs[0]).getGenericComponentType();
+                    res = Array.newInstance(arrayElementType, 0).getClass();
+                }
+                else res = (Class)typeArgs[0];
+            }
+            else throw new RuntimeException("Invalid parameterized type for holder: " + holderClass);
+        }
+        else if(holderClass instanceof Class) {
+            if(Holder.class.isAssignableFrom((Class)holderClass)) {
+                Field[] publicFields = ((Class)holderClass).getFields();
+                for(int i = 0; i < publicFields.length; i++) {
+                    if(publicFields[i].getName().equals("value"))
+                        return publicFields[i].getType();
+                }
+            }
+            else throw new RuntimeException("Invalid class.  Type: " + holderClass + " is not a holder.");
+        }
+
+        return res;
+    }
+}

Propchange: beehive/trunk/wsm/src/core/org/apache/beehive/wsm/util/TypeUtils.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: beehive/trunk/wsm/test/build.xml
URL: http://svn.apache.org/viewcvs/beehive/trunk/wsm/test/build.xml?rev=354746&r1=354745&r2=354746&view=diff
==============================================================================
--- beehive/trunk/wsm/test/build.xml (original)
+++ beehive/trunk/wsm/test/build.xml Tue Dec  6 23:24:25 2005
@@ -62,6 +62,7 @@
         <pathelement location="../build/jars/beehive-wsm.jar"/>
         <pathelement location="../build/jars/beehive-wsm-axis.jar"/>
         <fileset dir="${axis.lib.dir}" includes="*.jar"/>
+        <pathelement location="${webapp.dir}/WEB-INF/classes"/>
     </path>
 
     <target name="usage">

Modified: beehive/trunk/wsm/test/src/junit-server/org/apache/beehive/wsm/test/controls/SimpleControlsTest.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/wsm/test/src/junit-server/org/apache/beehive/wsm/test/controls/SimpleControlsTest.java?rev=354746&r1=354745&r2=354746&view=diff
==============================================================================
--- beehive/trunk/wsm/test/src/junit-server/org/apache/beehive/wsm/test/controls/SimpleControlsTest.java (original)
+++ beehive/trunk/wsm/test/src/junit-server/org/apache/beehive/wsm/test/controls/SimpleControlsTest.java Tue Dec  6 23:24:25 2005
@@ -46,11 +46,11 @@
         Service service = new Service();
         Call call = (Call)service.createCall();
         
-	call.setTargetEndpointAddress(new java.net.URL(endpoint));
-	call.setOperationName(new QName("http://soapinterop.org/", "sayHello"));
-
-	String ret = (String)call.invoke(new Object[] {"Homer"});
-	System.out.println("ret: " + ret);
-	assertEquals("Hello, Homer", ret);
+        call.setTargetEndpointAddress(new java.net.URL(endpoint));
+        call.setOperationName(new QName("http://soapinterop.org/", "sayHello"));
+        
+        String ret = (String)call.invoke(new Object[] {"Homer"});
+        System.out.println("ret: " + ret);
+        assertEquals("Hello, Homer", ret);
     }
 }

Added: beehive/trunk/wsm/test/src/junit-server/org/apache/beehive/wsm/test/misc/HeaderParamTest.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/wsm/test/src/junit-server/org/apache/beehive/wsm/test/misc/HeaderParamTest.java?rev=354746&view=auto
==============================================================================
--- beehive/trunk/wsm/test/src/junit-server/org/apache/beehive/wsm/test/misc/HeaderParamTest.java (added)
+++ beehive/trunk/wsm/test/src/junit-server/org/apache/beehive/wsm/test/misc/HeaderParamTest.java Tue Dec  6 23:24:25 2005
@@ -0,0 +1,159 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ *
+ * Licensed 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 org.apache.beehive.wsm.test.misc;
+
+import java.net.URL;
+import java.util.List;
+import java.util.ArrayList;
+import javax.xml.rpc.Call;
+import javax.xml.rpc.Service;
+import javax.xml.rpc.ServiceFactory;
+import javax.xml.rpc.ParameterMode;
+import javax.xml.rpc.handler.HandlerInfo;
+import javax.xml.namespace.QName;
+
+import junit.framework.TestCase;
+
+import org.apache.axis.encoding.ser.BeanSerializerFactory;
+import org.apache.axis.encoding.ser.BeanDeserializerFactory;
+
+import org.apache.beehive.wsm.test.headers.NameHeader;
+
+/**
+ *
+ */
+public class HeaderParamTest
+    extends TestCase {
+
+    private String echoServiceWsdl = "http://localhost:8080/wsmWeb/webservice/HeaderService.jws";
+    private String serviceName = "HeaderServiceService";
+    private String namespaceUri = "";
+
+    public void testSimpleInParam()
+        throws Exception {
+        Service axisService = new org.apache.axis.client.Service();
+        org.apache.axis.client.Call axisCall = (org.apache.axis.client.Call)axisService.createCall();
+        axisCall.setTargetEndpointAddress(new URL(echoServiceWsdl));
+        axisCall.setOperationName(new QName(namespaceUri, "simpleInParam"));
+        axisCall.addParameterAsHeader(new QName("http://webservice", "headerParam"),
+                                      new QName("http://www.w3.org/2001/XMLSchema", "int"),
+                                      ParameterMode.IN,
+                                      ParameterMode.IN);
+        Object axisRet = axisCall.invoke(new Object[] {new Integer(42)});
+        assertNull(axisRet);
+    }
+
+    public void testSimpleInOutParam()
+        throws Exception {
+        Service axisService = new org.apache.axis.client.Service();
+        org.apache.axis.client.Call axisCall = (org.apache.axis.client.Call)axisService.createCall();
+        axisCall.setTargetEndpointAddress(new URL(echoServiceWsdl));
+        axisCall.setOperationName(new QName(namespaceUri, "simpleInOutParam"));
+        axisCall.addParameterAsHeader(new QName("http://webservice", "headerParam"),
+                                      new QName("http://www.w3.org/2001/XMLSchema", "int"),
+                                      ParameterMode.INOUT,
+                                      ParameterMode.INOUT);
+        Object axisRet = axisCall.invoke(new Object[] {new Integer(42)});
+        assertEquals(43, ((Integer)axisRet).intValue());
+    }
+
+    public void testSimpleOutParam()
+        throws Exception {
+        Service axisService = new org.apache.axis.client.Service();
+        org.apache.axis.client.Call axisCall = (org.apache.axis.client.Call)axisService.createCall();
+        axisCall.setTargetEndpointAddress(new URL(echoServiceWsdl));
+        axisCall.setOperationName(new QName(namespaceUri, "simpleOutParam"));
+        axisCall.addParameterAsHeader(new QName("http://webservice", "headerParam"),
+                                      new QName("http://www.w3.org/2001/XMLSchema", "int"),
+                                      ParameterMode.OUT,
+                                      ParameterMode.OUT);
+        Object axisRet = axisCall.invoke(new Object[0]);
+        assertEquals(1234, ((Integer)axisRet).intValue());
+    }
+
+    public void testOnewayInParam()
+        throws Exception {
+        Service axisService = new org.apache.axis.client.Service();
+        org.apache.axis.client.Call axisCall = (org.apache.axis.client.Call)axisService.createCall();
+        axisCall.setTargetEndpointAddress(new URL(echoServiceWsdl));
+        axisCall.setOperationName(new QName(namespaceUri, "onewayInParam"));
+        axisCall.addParameterAsHeader(new QName("http://webservice", "headerParam"),
+                                      new QName("http://www.w3.org/2001/XMLSchema", "int"),
+                                      ParameterMode.IN,
+                                      ParameterMode.IN);
+        Object axisRet = axisCall.invoke(new Object[] {new Integer(42)});
+        assertNull(axisRet);
+    }
+
+    public void testComplexInParam()
+        throws Exception {
+        QName nameHeaderQName = new QName("http://webservice", "nameHeader");
+        Service axisService = new org.apache.axis.client.Service();
+        org.apache.axis.client.Call axisCall = (org.apache.axis.client.Call)axisService.createCall();
+        axisCall.setTargetEndpointAddress(new URL(echoServiceWsdl));
+        axisCall.setOperationName(new QName(namespaceUri, "complexInParam"));
+        axisCall.getTypeMapping().register(NameHeader.class,
+                                           nameHeaderQName,
+                                           new BeanSerializerFactory(NameHeader.class, nameHeaderQName),
+                                           new BeanDeserializerFactory(NameHeader.class, nameHeaderQName));
+        axisCall.addParameterAsHeader(new QName("http://webservice", "nameHeader"),
+                                      new QName("http://webservice", "nameHeader"),
+                                      ParameterMode.IN,
+                                      ParameterMode.IN);
+        Object axisRet = axisCall.invoke(new Object[] {new NameHeader("Homer")});
+        assertNull(axisRet);
+    }
+
+    public void testComplexInOutparam()
+        throws Exception {
+        QName nameHeaderQName = new QName("http://webservice", "nameHeader");
+        Service axisService = new org.apache.axis.client.Service();
+        org.apache.axis.client.Call axisCall = (org.apache.axis.client.Call)axisService.createCall();
+        axisCall.setTargetEndpointAddress(new URL(echoServiceWsdl));
+        axisCall.setOperationName(new QName(namespaceUri, "complexInOutParam"));
+        axisCall.getTypeMapping().register(NameHeader.class,
+                                           nameHeaderQName,
+                                           new BeanSerializerFactory(NameHeader.class, nameHeaderQName),
+                                           new BeanDeserializerFactory(NameHeader.class, nameHeaderQName));
+        axisCall.addParameterAsHeader(new QName("http://webservice", "nameHeader"),
+                                      new QName("http://webservice", "nameHeader"),
+                                      ParameterMode.INOUT,
+                                      ParameterMode.INOUT);
+        Object axisRet = axisCall.invoke(new Object[] {new NameHeader("Homer")});
+        assertTrue(axisRet instanceof NameHeader);
+        assertEquals("Homer--INOUT", ((NameHeader)axisRet).getName());
+    }
+    /*
+    public void testComplexOutparam()
+        throws Exception {
+        QName nameHeaderQName = new QName("http://webservice", "nameHeader");
+        Service axisService = new org.apache.axis.client.Service();
+        org.apache.axis.client.Call axisCall = (org.apache.axis.client.Call)axisService.createCall();
+        axisCall.setTargetEndpointAddress(new URL(echoServiceWsdl));
+        axisCall.setOperationName(new QName(namespaceUri, "complexOutParam"));
+        axisCall.getTypeMapping().register(NameHeader.class,
+                                           nameHeaderQName,
+                                           new BeanSerializerFactory(NameHeader.class, nameHeaderQName),
+                                           new BeanDeserializerFactory(NameHeader.class, nameHeaderQName));
+        axisCall.addParameterAsHeader(nameHeaderQName,
+                                      nameHeaderQName,
+                                      ParameterMode.OUT,
+                                      ParameterMode.OUT);
+        Object axisRet = axisCall.invoke(new Object[0]);
+        System.out.println("axisRet: " + axisRet);
+    }
+    */
+}

Propchange: beehive/trunk/wsm/test/src/junit-server/org/apache/beehive/wsm/test/misc/HeaderParamTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: beehive/trunk/wsm/test/webapp/src/org/apache/beehive/wsm/test/headers/NameHeader.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/wsm/test/webapp/src/org/apache/beehive/wsm/test/headers/NameHeader.java?rev=354746&view=auto
==============================================================================
--- beehive/trunk/wsm/test/webapp/src/org/apache/beehive/wsm/test/headers/NameHeader.java (added)
+++ beehive/trunk/wsm/test/webapp/src/org/apache/beehive/wsm/test/headers/NameHeader.java Tue Dec  6 23:24:25 2005
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ *
+ * Licensed 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 org.apache.beehive.wsm.test.headers;
+
+public class NameHeader {
+    
+    private String _name;
+
+    public NameHeader() {
+    }
+
+    public NameHeader(String name) {
+        _name = name;
+    }
+
+    public void setName(String name) {
+        _name = name;
+    }
+
+    public String getName() {
+        return _name;
+    }
+
+    public String toString() {
+        return "NameHeader: " + _name;
+    }
+}
\ No newline at end of file

Propchange: beehive/trunk/wsm/test/webapp/src/org/apache/beehive/wsm/test/headers/NameHeader.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: beehive/trunk/wsm/test/webapp/src/org/apache/beehive/wsm/test/holders/NameHeaderHolder.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/wsm/test/webapp/src/org/apache/beehive/wsm/test/holders/NameHeaderHolder.java?rev=354746&view=auto
==============================================================================
--- beehive/trunk/wsm/test/webapp/src/org/apache/beehive/wsm/test/holders/NameHeaderHolder.java (added)
+++ beehive/trunk/wsm/test/webapp/src/org/apache/beehive/wsm/test/holders/NameHeaderHolder.java Tue Dec  6 23:24:25 2005
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ *
+ * Licensed 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 org.apache.beehive.wsm.test.holders;
+
+import javax.xml.rpc.holders.Holder;
+
+import org.apache.beehive.wsm.test.headers.NameHeader;
+
+/**
+ *
+ */
+public class NameHeaderHolder
+    implements Holder {
+
+    public NameHeader value;
+}

Propchange: beehive/trunk/wsm/test/webapp/src/org/apache/beehive/wsm/test/holders/NameHeaderHolder.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: beehive/trunk/wsm/test/webapp/src/webservice/HeaderService.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/wsm/test/webapp/src/webservice/HeaderService.java?rev=354746&view=auto
==============================================================================
--- beehive/trunk/wsm/test/webapp/src/webservice/HeaderService.java (added)
+++ beehive/trunk/wsm/test/webapp/src/webservice/HeaderService.java Tue Dec  6 23:24:25 2005
@@ -0,0 +1,75 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ *
+ * Licensed 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 webservice;
+
+import javax.jws.Oneway;
+import javax.jws.WebMethod;
+import javax.jws.WebParam;
+import javax.jws.WebService;
+import javax.xml.rpc.holders.IntHolder;
+
+import org.apache.beehive.wsm.test.headers.NameHeader;
+import org.apache.beehive.wsm.test.holders.NameHeaderHolder;
+
+@WebService
+public class HeaderService {
+
+    @WebMethod
+    public void simpleInParam(@WebParam(header=true)int headerParam) {
+        if(headerParam != 42) 
+            throw new IllegalArgumentException("Received invalid header argument \"" + headerParam + "\" when expecting value 42");
+    }
+
+    @WebMethod
+    public void simpleInOutParam(@WebParam(mode=WebParam.Mode.INOUT, header=true)IntHolder headerParam) {
+        headerParam.value++;
+    }
+
+    @WebMethod
+    public void simpleOutParam(@WebParam(mode=WebParam.Mode.OUT, header=true)IntHolder headerParam) {
+        headerParam.value = 1234;
+    }
+
+    @Oneway
+    @WebMethod
+    public void onewayInParam(@WebParam(header=true)int headerParam) {
+        if(headerParam != 42) 
+            throw new IllegalArgumentException("Received invalid header argument \"" + headerParam + "\" when expecting value 42");
+    }
+
+    /*
+    note, @Oneway does not support either INOUT or OUT parameters
+    */ 
+
+    @WebMethod
+    public void complexInParam(@WebParam(header=true)NameHeader nameHeader) {
+        if(!nameHeader.getName().equals("Homer"))
+            throw new IllegalArgumentException("Received invald header argument \"" + nameHeader.getName() + "\" when expecting value \"Homer\"");
+    }
+
+    @WebMethod
+    public void complexInOutParam(@WebParam(mode=WebParam.Mode.INOUT, header=true)NameHeaderHolder nameHeader) {
+        if(!nameHeader.value.getName().equals("Homer"))
+            throw new IllegalArgumentException("Received invald header argument \"" + nameHeader.value.getName() + "\" when expecting value \"Homer\"");
+
+        nameHeader.value.setName(nameHeader.value.getName() + "--INOUT");
+    }
+
+    @WebMethod
+    public void complexOutParam(@WebParam(mode=WebParam.Mode.OUT, header=true)NameHeaderHolder nameHeaderHolder) {
+        nameHeaderHolder.value = new NameHeader("Homer--OUT");
+    }
+}

Propchange: beehive/trunk/wsm/test/webapp/src/webservice/HeaderService.java
------------------------------------------------------------------------------
    svn:eol-style = native