Author: barrettj Date: Fri Feb 11 01:46:35 2011 New Revision: 1069659 URL: http://svn.apache.org/viewvc?rev=1069659&view=rev Log: AXIS2-4938 Patch submitted by Katherine Sanders. BindingProvider.getEndpointReference should put reference parameters from WSDL in returned EPR.
Modified: axis/axis2/java/core/trunk/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingOutHandler.java axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/BindingProvider.java axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/spi/ServiceDelegate.java Modified: axis/axis2/java/core/trunk/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingOutHandler.java URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingOutHandler.java?rev=1069659&r1=1069658&r2=1069659&view=diff ============================================================================== --- axis/axis2/java/core/trunk/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingOutHandler.java (original) +++ axis/axis2/java/core/trunk/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingOutHandler.java Fri Feb 11 01:46:35 2011 @@ -526,18 +526,30 @@ public class AddressingOutHandler extend Iterator iterator = referenceparameters.iterator(); while (iterator.hasNext()) { OMElement omElement = (OMElement)iterator.next(); - SOAPHeaderBlock newElement = ElementHelper.toSOAPHeaderBlock(omElement, factory); - if (isFinalAddressingNamespace) { - newElement.addAttribute(Final.WSA_IS_REFERENCE_PARAMETER_ATTRIBUTE, - Final.WSA_TYPE_ATTRIBUTE_VALUE, - addressingNamespaceObject); - } - addRoleToHeader(newElement); - header.addChild(newElement); + // Only add the reference parameter from the WSDL if it does not already exist. + // This allows clients to override the values before invoking the service. + if (referenceInformation == null || !referenceInformation.containsKey(omElement.getQName())) { + SOAPHeaderBlock newElement = ElementHelper.toSOAPHeaderBlock(omElement, factory); + if (isFinalAddressingNamespace) { + newElement.addAttribute(Final.WSA_IS_REFERENCE_PARAMETER_ATTRIBUTE, + Final.WSA_TYPE_ATTRIBUTE_VALUE, + addressingNamespaceObject); + } + addRoleToHeader(newElement); + header.addChild(newElement); + } else { + if (LoggingControl.debugLoggingAllowed && log.isTraceEnabled()) { + log.trace("processToEPRReferenceInformation: Reference parameter already exists so ignoring value from WSDL: " + omElement); + } + } } } } } + + if (log.isTraceEnabled()) { + log.trace("processToEPRReferenceInformation: Header after adding reference parameters: "+header); + } } /** Modified: axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/BindingProvider.java URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/BindingProvider.java?rev=1069659&r1=1069658&r2=1069659&view=diff ============================================================================== --- axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/BindingProvider.java (original) +++ axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/BindingProvider.java Fri Feb 11 01:46:35 2011 @@ -19,8 +19,11 @@ package org.apache.axis2.jaxws; +import org.apache.axiom.om.OMElement; import org.apache.axis2.addressing.AddressingConstants; import org.apache.axis2.addressing.AddressingHelper; +import org.apache.axis2.description.AxisEndpoint; +import org.apache.axis2.description.AxisService; import org.apache.axis2.jaxws.addressing.util.EndpointReferenceUtils; import org.apache.axis2.jaxws.binding.BindingUtils; import org.apache.axis2.jaxws.binding.SOAPBinding; @@ -34,6 +37,7 @@ import org.apache.axis2.jaxws.handler.Ha import org.apache.axis2.jaxws.i18n.Messages; import org.apache.axis2.jaxws.spi.ServiceDelegate; import org.apache.axis2.transport.http.HTTPConstants; +import org.apache.axis2.util.LoggingControl; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -45,7 +49,11 @@ import javax.xml.ws.WebServiceFeature; import javax.xml.ws.handler.HandlerResolver; import javax.xml.ws.soap.AddressingFeature.Responses; import javax.xml.ws.wsaddressing.W3CEndpointReference; + +import java.util.ArrayList; +import java.util.HashMap; import java.util.Hashtable; +import java.util.Iterator; import java.util.Map; public class BindingProvider implements org.apache.axis2.jaxws.spi.BindingProvider { @@ -404,6 +412,28 @@ public class BindingProvider implements String wsdlLocation = ((ServiceDescriptionWSDL) endpointDesc.getServiceDescription()).getWSDLLocation(); epr = EndpointReferenceUtils.createAxis2EndpointReference(address, service, port, wsdlLocation, addressingNamespace); + + // Add reference parameters from WSDL to the EPR + AxisService axisService = endpointDesc.getAxisService(); + if (axisService != null) { + AxisEndpoint axisEndpoint = axisService.getEndpoint(axisService.getEndpointName()); + + if(axisEndpoint != null){ + ArrayList referenceParameters = (ArrayList) axisEndpoint.getParameterValue(AddressingConstants.REFERENCE_PARAMETER_PARAMETER); + if (LoggingControl.debugLoggingAllowed && log.isTraceEnabled()) { + log.trace("getEndpointReference: Adding reference parameters to EPR from WSDL: axisService = " + axisService + ", axisEndpoint = " + axisEndpoint.getName() + ", referenceParameters = " + referenceParameters); + } + if(referenceParameters!=null){ + Iterator iterator = referenceParameters.iterator(); + HashMap<QName, OMElement> refParamMap = new HashMap<QName, OMElement>(); + while (iterator.hasNext()) { + OMElement omElement = (OMElement)iterator.next(); + refParamMap.put(omElement.getQName(), omElement); + } + epr.setReferenceParameters(refParamMap); + } + } + } } else if (!addressingNamespace.equals(binding.getAddressingNamespace())) { throw ExceptionFactory. Modified: axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/spi/ServiceDelegate.java URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/spi/ServiceDelegate.java?rev=1069659&r1=1069658&r2=1069659&view=diff ============================================================================== --- axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/spi/ServiceDelegate.java (original) +++ axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/spi/ServiceDelegate.java Fri Feb 11 01:46:35 2011 @@ -43,7 +43,6 @@ import javax.xml.ws.Service.Mode; import javax.xml.ws.handler.HandlerResolver; import org.apache.axiom.om.OMElement; -import org.apache.axiom.soap.SOAPEnvelope; import org.apache.axis2.client.ServiceClient; import org.apache.axis2.context.ConfigurationContext; import org.apache.axis2.java.security.AccessController; @@ -526,7 +525,10 @@ public class ServiceDelegate extends jav * if both are not provided then throw exception. * (JLB): I'm not sure lack of WSDL should cause an exception */ - + + if (log.isTraceEnabled()) { + log.trace("getPort: jaxwsEPR = " + jaxwsEPR); + } if (!isValidWSDLLocation()) { //TODO: Should I throw Exception if no WSDL @@ -555,6 +557,10 @@ public class ServiceDelegate extends jav makeWebServiceException(Messages.getMessage("invalidEndpointReference", e.toString())); } + + if (log.isTraceEnabled()) { + log.trace("getPort: Converted jaxwsEPR to axis2EPR = " + axis2EPR); + } return getPort(axis2EPR, addressingNamespace, sei, features); }