Author: scheu
Date: Sat Jul  3 11:45:45 2010
New Revision: 960205

URL: http://svn.apache.org/viewvc?rev=960205&view=rev
Log:
AXIS2-4761
Contributor:Lori VanGulick
Ensure that output header parameters are "understood" by the header "must 
understand" checking.
A validation test is also added.

Modified:
    
axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/impl/OperationDescriptionImpl.java
    
axis/axis2/java/core/trunk/modules/metadata/test/org/apache/axis2/jaxws/description/MustUnderstandTests.java

Modified: 
axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/impl/OperationDescriptionImpl.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/impl/OperationDescriptionImpl.java?rev=960205&r1=960204&r2=960205&view=diff
==============================================================================
--- 
axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/impl/OperationDescriptionImpl.java
 (original)
+++ 
axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/impl/OperationDescriptionImpl.java
 Sat Jul  3 11:45:45 2010
@@ -2265,11 +2265,27 @@ class OperationDescriptionImpl
                                                paramDesc.getParameterName());
                     understoodQNames.add(headerQN);
                     if (log.isDebugEnabled()) {
-                        log.debug("OpDesc: understoodQName added to 
AxisOperation (if not null) " + headerQN);
+                        log.debug("OpDesc: understoodQName added to 
AxisOperation (if not null) as IN or INOUT param " + headerQN);
+                    }
+                } else if (paramDesc.isHeader() 
+                        && (paramDesc.getMode() == WebParam.Mode.OUT)) {
+                    QName headerQN = new QName(paramDesc.getTargetNamespace(), 
+                            paramDesc.getParameterName());
+                    understoodQNames.add(headerQN);
+                    if (log.isDebugEnabled()) {
+                        log.debug("OpDesc: understoodQName added to 
AxisOperation (if not null) as OUT param " + headerQN);
                     }
                 }
             }
         }
+        // Also check for result in header
+        if (isResultHeader() && (getResultName() != null)) {
+            QName headerQN = new QName(getResultTargetNamespace(), 
getResultName());
+            understoodQNames.add(headerQN);
+            if (log.isDebugEnabled()) {
+                log.debug("OpDesc: understoodQName added to AxisOperation (if 
not null) as result param " + headerQN);
+            }            
+        }
 
         if (!understoodQNames.isEmpty()) {
             Parameter headerQNParameter = new 
Parameter(OperationDescription.HEADER_PARAMETER_QNAMES,

Modified: 
axis/axis2/java/core/trunk/modules/metadata/test/org/apache/axis2/jaxws/description/MustUnderstandTests.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/metadata/test/org/apache/axis2/jaxws/description/MustUnderstandTests.java?rev=960205&r1=960204&r2=960205&view=diff
==============================================================================
--- 
axis/axis2/java/core/trunk/modules/metadata/test/org/apache/axis2/jaxws/description/MustUnderstandTests.java
 (original)
+++ 
axis/axis2/java/core/trunk/modules/metadata/test/org/apache/axis2/jaxws/description/MustUnderstandTests.java
 Sat Jul  3 11:45:45 2010
@@ -23,7 +23,9 @@ import junit.framework.TestCase;
 import org.apache.axis2.description.AxisOperation;
 import org.apache.axis2.description.Parameter;
 
+import javax.jws.WebMethod;
 import javax.jws.WebParam;
+import javax.jws.WebResult;
 import javax.jws.WebService;
 import javax.xml.namespace.QName;
 import javax.xml.ws.Holder;
@@ -55,23 +57,26 @@ public class MustUnderstandTests extends
         Parameter understoodQNamesParameter = 
axisOperation.getParameter(OperationDescription.HEADER_PARAMETER_QNAMES);
         assertNotNull(understoodQNamesParameter);
         ArrayList understoodQNames = (ArrayList) 
understoodQNamesParameter.getValue();
-        assertEquals(4, understoodQNames.size());
+        assertEquals(6, understoodQNames.size());
         
         assertTrue(understoodQNames.contains(new QName("webservice.namespace", 
"renamedParam1")));
         assertTrue(understoodQNames.contains(new QName("webservice.namespace", 
"arg1")));
         assertTrue(understoodQNames.contains(new QName("webparam.namespace", 
"arg2")));
         assertFalse(understoodQNames.contains(new 
QName("webservice.namespace", "outOnly")));
-        assertFalse(understoodQNames.contains(new 
QName("webservice.namespace", "arg3")));
+        assertTrue(understoodQNames.contains(new QName("webservice.namespace", 
"arg3")));
         assertTrue(understoodQNames.contains(new QName("webservice.namespace", 
"inOut")));
         assertFalse(understoodQNames.contains(new 
QName("webservice.namespace", "arg4")));
         assertFalse(understoodQNames.contains(new 
QName("webservice.namespace", "notInHeader")));
         assertFalse(understoodQNames.contains(new 
QName("webservice.namespace", "arg5")));
+        assertTrue(understoodQNames.contains(new QName("webservice.namespace", 
"headerReturn")));
         
     }
 }
 
 @WebService(targetNamespace="webservice.namespace")
 class HeaderParameters {
+    @WebMethod
+    @WebResult(name = "headerReturn", header=true)
     public String echoString(
             @WebParam(name="renamedParam1", header=true) String param1,
             @WebParam(header=true) String param2,
@@ -79,6 +84,8 @@ class HeaderParameters {
             @WebParam(mode=WebParam.Mode.OUT, header=true) Holder<String> 
outOnly,
             @WebParam(name="inOut", mode=WebParam.Mode.INOUT, header=true) 
Holder<String> inOut,
             String notInHeader) {
-                return null;
+                String headerReturn = param2; 
+                return headerReturn;
             }
 }
+


Reply via email to