You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by sa...@apache.org on 2008/06/20 11:17:11 UTC

svn commit: r669834 - in /webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2: deployment/util/ description/ engine/

Author: sanka
Date: Fri Jun 20 02:17:11 2008
New Revision: 669834

URL: http://svn.apache.org/viewvc?rev=669834&view=rev
Log:
Fixed: 
1) The calculation of effective policy for a AxisMessage or AxisBindingMessage did not happen properly when some policy in description hierarchy or binding hierarchy was updated. 
2)The port addresses were not updated properly the user provided WSDL 1.1 docs when  modifyPortAddress parameter was set. 

Added utility methods to determine whether a binding is soap11, soap12 or http type.

Modified:
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/util/Utils.java
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/AxisBindingMessage.java
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/AxisMessage.java
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/AxisService.java
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/PolicySubject.java
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/engine/AbstractDispatcher.java

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/util/Utils.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/util/Utils.java?rev=669834&r1=669833&r2=669834&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/util/Utils.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/util/Utils.java Fri Jun 20 02:17:11 2008
@@ -1490,4 +1490,99 @@
 			}
 		}
 	}
+	
+	public static boolean isSoap11Binding(AxisBinding binding) {
+		String type = binding.getType();
+		if (Java2WSDLConstants.TRANSPORT_URI.equals(type)
+				|| WSDL2Constants.URI_WSDL2_SOAP.equals(type)) {
+			String v = (String) binding
+					.getProperty(WSDL2Constants.ATTR_WSOAP_VERSION);
+			if (SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI.equals(v)) {
+				return true;
+			}
+		}
+		return false;
+	}
+	
+	public static boolean isSoap12Binding(AxisBinding binding) {
+		String type = binding.getType();
+		if (Java2WSDLConstants.TRANSPORT_URI.equals(type)
+				|| WSDL2Constants.URI_WSDL2_SOAP.equals(type)) {
+			String v = (String) binding
+					.getProperty(WSDL2Constants.ATTR_WSOAP_VERSION);
+			if (SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI.equals(v)) {
+				return true;
+			}
+		}
+		return false;
+	}
+	
+	public static boolean isHttpBinding(AxisBinding binding) {
+		String type = binding.getType();
+		if (WSDL2Constants.URI_WSDL2_HTTP.equals(type)) {
+			return true;
+		}
+		return false;
+	}
+	
+	public static AxisBinding getSoap11Binding(AxisService service) {
+		for (Iterator iterator = service.getEndpoints().values().iterator(); iterator
+				.hasNext();) {
+			AxisEndpoint endpoint = (AxisEndpoint) iterator.next();
+			AxisBinding binding = endpoint.getBinding();
+
+			if (isSoap11Binding(binding)) {
+				return binding;
+			}
+		}
+		return null;
+	}
+
+	public static AxisBinding getSoap12Binding(AxisService service) {
+		for (Iterator iterator = service.getEndpoints().values().iterator(); iterator
+				.hasNext();) {
+			AxisEndpoint endpoint = (AxisEndpoint) iterator.next();
+			AxisBinding binding = endpoint.getBinding();
+
+			if (isSoap12Binding(binding)) {
+				return binding;
+			}
+		}
+		return null;
+	}
+
+	public static AxisBinding getHttpBinding(AxisService service) {
+		for (Iterator iterator = service.getEndpoints().values().iterator(); iterator
+				.hasNext();) {
+			AxisEndpoint endpoint = (AxisEndpoint) iterator.next();
+			AxisBinding binding = endpoint.getBinding();
+
+			if (isHttpBinding(binding)) {
+				return binding;
+			}
+		}
+		return null;
+	}
+	
+	public static AxisBindingOperation getBindingOperation(AxisBinding binding, AxisOperation operation) {
+		QName opName = operation.getName();
+		for (Iterator bindingOps = binding.getChildren(); bindingOps.hasNext();) {
+			AxisBindingOperation bindingOp = (AxisBindingOperation) bindingOps.next();
+			if (opName.equals(bindingOp.getName())) {
+				return bindingOp;
+			}
+		}
+		return null;
+	}
+	
+	public static AxisBindingMessage getBindingMessage(AxisBindingOperation bindingOperation, AxisMessage message) {
+		String msgName = message.getName();
+		for (Iterator bindingMessages = bindingOperation.getChildren();  bindingMessages.hasNext();) {
+			AxisBindingMessage bindingMessage = (AxisBindingMessage) bindingMessages.next();
+			if (msgName.equals(bindingMessage.getName())) {
+				return bindingMessage;
+			}
+		}
+		return null;
+	}
 }

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/AxisBindingMessage.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/AxisBindingMessage.java?rev=669834&r1=669833&r2=669834&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/AxisBindingMessage.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/AxisBindingMessage.java Fri Jun 20 02:17:11 2008
@@ -20,6 +20,7 @@
 package org.apache.axis2.description;
 
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -50,8 +51,7 @@
 	private boolean fault = false;
 
 	private Policy effectivePolicy = null;
-
-	private boolean policyCalculated = false;
+	private Date lastPolicyCalcuatedTime = null;
 
 	public boolean isFault() {
 		return fault;
@@ -219,9 +219,8 @@
 	}
 
 	public Policy getEffectivePolicy() {
-		if (effectivePolicy == null && !policyCalculated) {
+	       if (lastPolicyCalcuatedTime == null || isPolicyUpdated()) {
 			effectivePolicy = calculateEffectivePolicy();
-			policyCalculated = true;
 		}
 		return effectivePolicy;
 	}
@@ -287,6 +286,68 @@
 					.getAttachedPolicyComponents());
 		}
 
+		lastPolicyCalcuatedTime = new Date();
 		return PolicyUtil.getMergedPolicy(policyList, axisService);
 	}
+	
+	private boolean isPolicyUpdated() {
+		if (getPolicySubject().getLastUpdatedTime().after(
+				lastPolicyCalcuatedTime)) {
+			return true;
+		}
+		// AxisBindingOperation
+		AxisBindingOperation axisBindingOperation = getAxisBindingOperation();
+		if (axisBindingOperation != null
+				&& axisBindingOperation.getPolicySubject().getLastUpdatedTime()
+						.after(lastPolicyCalcuatedTime)) {
+			return true;
+		}
+		// AxisBinding
+		AxisBinding axisBinding = (axisBindingOperation == null) ? null
+				: axisBindingOperation.getAxisBinding();
+		if (axisBinding != null
+				&& axisBinding.getPolicySubject().getLastUpdatedTime().after(
+						lastPolicyCalcuatedTime)) {
+			return true;
+		}
+		// AxisEndpoint
+		AxisEndpoint axisEndpoint = (axisBinding == null) ? null : axisBinding
+				.getAxisEndpoint();
+		if (axisEndpoint != null
+				&& axisEndpoint.getPolicySubject().getLastUpdatedTime().after(
+						lastPolicyCalcuatedTime)) {
+			return true;
+		}
+		// AxisMessage
+		if (axisMessage != null
+				&& axisMessage.getPolicySubject().getLastUpdatedTime().after(
+						lastPolicyCalcuatedTime)) {
+			return true;
+		}
+		// AxisOperation
+		AxisOperation axisOperation = (axisMessage == null) ? null
+				: axisMessage.getAxisOperation();
+		if (axisOperation != null
+				&& axisOperation.getPolicySubject().getLastUpdatedTime().after(
+						lastPolicyCalcuatedTime)) {
+			return true;
+		}
+		// AxisService
+		AxisService axisService = (axisOperation == null) ? null
+				: axisOperation.getAxisService();
+		if (axisService != null
+				&& axisService.getPolicySubject().getLastUpdatedTime().after(
+						lastPolicyCalcuatedTime)) {
+			return true;
+		}
+		// AxisConfiguration
+		AxisConfiguration axisConfiguration = (axisService == null) ? null
+				: axisService.getAxisConfiguration();
+		if (axisConfiguration != null
+				&& axisConfiguration.getPolicySubject().getLastUpdatedTime()
+						.after(lastPolicyCalcuatedTime)) {
+			return true;
+		}
+		return false;
+	}
 }

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/AxisMessage.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/AxisMessage.java?rev=669834&r1=669833&r2=669834&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/AxisMessage.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/AxisMessage.java Fri Jun 20 02:17:11 2008
@@ -34,6 +34,7 @@
 
 import javax.xml.namespace.QName;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.Iterator;
 import java.util.List;
 
@@ -64,9 +65,8 @@
     private boolean wrapped = true;
     
     private Policy effectivePolicy = null;
+    private Date lastPolicyCalcuatedTime = null;
     
-	private boolean policyCalculated = false;
-
     public String getMessagePartName() {
 		return messagePartName;
 	}
@@ -239,13 +239,9 @@
         this.wrapped = wrapped;
     }
     
-	public Policy getEffectivePolicy() {
-		if (getPolicySubject().isUpdated()) {
+    public Policy getEffectivePolicy() {
+		if (lastPolicyCalcuatedTime == null || isPolicyUpdated()) {
 			effectivePolicy = calculateEffectivePolicy();
-		} else {
-			if (effectivePolicy == null && !policyCalculated) {
-				effectivePolicy = calculateEffectivePolicy();
-			}
 		}
 		return effectivePolicy;
 	}
@@ -282,36 +278,37 @@
 		}
 
 		Policy result = PolicyUtil.getMergedPolicy(policyList, axisService);
-		policyCalculated = true;
+		lastPolicyCalcuatedTime = new Date();
 		return result;
 	}
-	
+
 	public boolean isPolicyUpdated() {
 		// AxisMessage
-		PolicySubject policySubject = getPolicySubject();
-		if (policySubject.isUpdated()) {
+		if (getPolicySubject().getLastUpdatedTime().after(
+				lastPolicyCalcuatedTime)) {
 			return true;
 		}
-
 		// AxisOperation
-		AxisOperation axisOperation = getAxisOperation();
+		AxisOperation axisOperation = (AxisOperation) parent;
 		if (axisOperation != null
-				&& axisOperation.getPolicySubject().isUpdated()) {
+				&& axisOperation.getPolicySubject().getLastUpdatedTime().after(
+						lastPolicyCalcuatedTime)) {
 			return true;
 		}
-
 		// AxisService
 		AxisService axisService = (axisOperation == null) ? null
 				: axisOperation.getAxisService();
-		if (axisService != null && axisService.getPolicySubject().isUpdated()) {
+		if (axisService != null
+				&& axisService.getPolicySubject().getLastUpdatedTime().after(
+						lastPolicyCalcuatedTime)) {
 			return true;
 		}
-
 		// AxisConfiguration
 		AxisConfiguration axisConfiguration = (axisService == null) ? null
 				: axisService.getAxisConfiguration();
 		if (axisConfiguration != null
-				&& axisConfiguration.getPolicySubject().isUpdated()) {
+				&& axisConfiguration.getPolicySubject().getLastUpdatedTime()
+						.after(lastPolicyCalcuatedTime)) {
 			return true;
 		}
 		return false;

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/AxisService.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/AxisService.java?rev=669834&r1=669833&r2=669834&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/AxisService.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/AxisService.java Fri Jun 20 02:17:11 2008
@@ -1324,6 +1324,8 @@
 			Iterator portItr = serviceElement.getPorts().values().iterator();
 			while (portItr.hasNext()) {
 				Port port = (Port) portItr.next();
+				AxisEndpoint endpoint = (AxisEndpoint) endpointMap.get(port
+						.getName());
 				List list = port.getExtensibilityElements();
 				for (int i = 0; i < list.size(); i++) {
 					Object extensibilityEle = list.get(i);
@@ -1333,45 +1335,89 @@
 						if (existingAddress == null
 								|| existingAddress
 										.equals("REPLACE_WITH_ACTUAL_URL")) {
-							((SOAPAddress) extensibilityEle)
-									.setLocationURI(getEPRs()[0]);
-						} else {
-							if (requestIP == null) {
+							if (endpoint != null) {
 								((SOAPAddress) extensibilityEle)
-										.setLocationURI(getLocationURI(
-												getEPRs(), existingAddress));
+										.setLocationURI(endpoint
+												.calculateEndpointURL());
 							} else {
 								((SOAPAddress) extensibilityEle)
-										.setLocationURI(getLocationURI(
-												calculateEPRs(requestIP),
-												existingAddress));
+										.setLocationURI(getEPRs()[0]);
+							}
+						} else {
+							if (requestIP == null) {
+								if (endpoint != null) {
+									((SOAPAddress) extensibilityEle)
+											.setLocationURI(endpoint
+													.calculateEndpointURL());
+								} else {
+									((SOAPAddress) extensibilityEle)
+											.setLocationURI(getLocationURI(
+													getEPRs(), existingAddress));
+								}
+							} else {
+								if (endpoint != null) {
+									((SOAPAddress) extensibilityEle)
+											.setLocationURI(endpoint
+													.calculateEndpointURL());
+								} else {
+									((SOAPAddress) extensibilityEle)
+											.setLocationURI(getLocationURI(
+													calculateEPRs(requestIP),
+													existingAddress));
+								}
 							}
 						}
 					} else if (extensibilityEle instanceof SOAP12Address) {
 						SOAP12Address soapAddress = (SOAP12Address) extensibilityEle;
 						String exsistingAddress = soapAddress.getLocationURI();
 						if (requestIP == null) {
-							((SOAP12Address) extensibilityEle)
-									.setLocationURI(getLocationURI(getEPRs(),
-											exsistingAddress));
+							if (endpoint != null) {
+								((SOAP12Address) extensibilityEle)
+										.setLocationURI(endpoint
+												.calculateEndpointURL());
+
+							} else {
+								((SOAP12Address) extensibilityEle)
+										.setLocationURI(getLocationURI(
+												getEPRs(), exsistingAddress));
+							}
 						} else {
-							((SOAP12Address) extensibilityEle)
-									.setLocationURI(getLocationURI(
-											calculateEPRs(requestIP),
-											exsistingAddress));
+							if (endpoint != null) {
+								((SOAP12Address) extensibilityEle)
+										.setLocationURI(endpoint
+												.calculateEndpointURL());
+							} else {
+								((SOAP12Address) extensibilityEle)
+										.setLocationURI(getLocationURI(
+												calculateEPRs(requestIP),
+												exsistingAddress));
+
+							}
 						}
 					} else if (extensibilityEle instanceof HTTPAddress) {
 						HTTPAddress httpAddress = (HTTPAddress) extensibilityEle;
 						String exsistingAddress = httpAddress.getLocationURI();
 						if (requestIP == null) {
-							((HTTPAddress) extensibilityEle)
-									.setLocationURI(getLocationURI(getEPRs(),
-											exsistingAddress));
+							if (endpoint != null) {
+								((HTTPAddress) extensibilityEle)
+										.setLocationURI(endpoint
+												.calculateEndpointURL());
+							} else {
+								((HTTPAddress) extensibilityEle)
+										.setLocationURI(getLocationURI(
+												getEPRs(), exsistingAddress));
+							}
 						} else {
-							((HTTPAddress) extensibilityEle)
-									.setLocationURI(getLocationURI(
-											calculateEPRs(requestIP),
-											exsistingAddress));
+							if (endpoint != null) {
+								((HTTPAddress) extensibilityEle)
+										.setLocationURI(endpoint
+												.calculateEndpointURL());
+							} else {
+								((HTTPAddress) extensibilityEle)
+										.setLocationURI(getLocationURI(
+												calculateEPRs(requestIP),
+												exsistingAddress));
+							}
 						}
 					}
 					// TODO : change the Endpoint refrence addess as well.

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/PolicySubject.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/PolicySubject.java?rev=669834&r1=669833&r2=669834&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/PolicySubject.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/PolicySubject.java Fri Jun 20 02:17:11 2008
@@ -20,6 +20,7 @@
 package org.apache.axis2.description;
 
 import java.util.Collection;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
@@ -32,7 +33,8 @@
 public class PolicySubject {
 
 	private boolean updated = false;
-
+	private Date lastUpdatedTime = new Date();
+	
 	private HashMap attachedPolicyComponents = new HashMap();
 
 	public void attachPolicy(Policy policy) {
@@ -49,6 +51,7 @@
 
 	public void attachPolicyReference(PolicyReference reference) {
 		attachedPolicyComponents.put(reference.getURI(), reference);
+		setLastUpdatedTime(new Date()); 
 	}
 
 	public void attachPolicyComponents(List policyComponents) {
@@ -73,6 +76,8 @@
 	public void attachPolicyComponent(String key,
 			PolicyComponent policyComponent) {
 		attachedPolicyComponents.put(key, policyComponent);
+		setLastUpdatedTime(new Date());
+		
 		if (!isUpdated()) {
 			setUpdated(true);
 		}
@@ -103,6 +108,8 @@
 					"policy doesn't have a name or an id ");
 		}
 		attachedPolicyComponents.put(key, policy);
+		setLastUpdatedTime(new Date());
+		
 		if (!isUpdated()) {
 			setUpdated(true);
 		}
@@ -110,6 +117,7 @@
 
 	public void detachPolicyComponent(String key) {
 		attachedPolicyComponents.remove(key);
+		setLastUpdatedTime(new Date());
 		if (!isUpdated()) {
 			setUpdated(true);
 		}
@@ -117,8 +125,17 @@
 
 	public void clear() {
 		attachedPolicyComponents.clear();
+		setLastUpdatedTime(new Date());
 		if (!isUpdated()) {
 			setUpdated(true);
 		}
 	}
+
+	public Date getLastUpdatedTime() {
+		return lastUpdatedTime;
+	}
+
+	public void setLastUpdatedTime(Date lastUpdatedTime) {
+		this.lastUpdatedTime = lastUpdatedTime;
+	}
 }

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/engine/AbstractDispatcher.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/engine/AbstractDispatcher.java?rev=669834&r1=669833&r2=669834&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/engine/AbstractDispatcher.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/engine/AbstractDispatcher.java Fri Jun 20 02:17:11 2008
@@ -136,15 +136,16 @@
 							}
 						}
 					}
-                    msgctx
-					.setProperty(
-							Constants.AXIS_BINDING_MESSAGE,
-							axisBindingOperation
-									.getChild(WSDLConstants.MESSAGE_LABEL_IN_VALUE));
-                    msgctx.setProperty(Constants.AXIS_BINDING_OPERATION, axisBindingOperation);
+					 if (axisBindingOperation != null) {
+						msgctx
+								.setProperty(
+										Constants.AXIS_BINDING_MESSAGE,
+										axisBindingOperation
+												.getChild(WSDLConstants.MESSAGE_LABEL_IN_VALUE));
+						msgctx.setProperty(Constants.AXIS_BINDING_OPERATION,
+								axisBindingOperation);
+					}
                 }
-
-
             }
         }
         return InvocationResponse.CONTINUE;