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


Reply via email to