You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-commits@axis.apache.org by ba...@apache.org on 2011/02/11 02:46:35 UTC

svn commit: r1069659 - in /axis/axis2/java/core/trunk/modules: addressing/src/org/apache/axis2/handlers/addressing/AddressingOutHandler.java jaxws/src/org/apache/axis2/jaxws/BindingProvider.java jaxws/src/org/apache/axis2/jaxws/spi/ServiceDelegate.java

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