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; } } +