You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fx-dev@ws.apache.org by ml...@apache.org on 2007/05/16 15:05:15 UTC

svn commit: r538573 - in /webservices/sandesha/trunk/java/modules: core/src/main/java/org/apache/sandesha2/i18n/ core/src/main/java/org/apache/sandesha2/msgprocessors/ core/src/main/java/org/apache/sandesha2/util/ core/src/main/resources/org/apache/san...

Author: mlovett
Date: Wed May 16 06:05:14 2007
New Revision: 538573

URL: http://svn.apache.org/viewvc?view=rev&rev=538573
Log:
Return a fault if 2-way RM 1.1 is attempted without MakeConnection

Added:
    webservices/sandesha/trunk/java/modules/tests/src/test/java/org/apache/sandesha2/scenarios/UnsupportedScenariosTest.java   (with props)
Modified:
    webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/i18n/SandeshaMessageKeys.java
    webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java
    webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/CreateSeqResponseMsgProcessor.java
    webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/RMMsgCreator.java
    webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/SequenceManager.java
    webservices/sandesha/trunk/java/modules/core/src/main/resources/org/apache/sandesha2/i18n/resource.properties
    webservices/sandesha/trunk/java/modules/tests/src/test/java/org/apache/sandesha2/scenarios/RMScenariosTest.java

Modified: webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/i18n/SandeshaMessageKeys.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/i18n/SandeshaMessageKeys.java?view=diff&rev=538573&r1=538572&r2=538573
==============================================================================
--- webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/i18n/SandeshaMessageKeys.java (original)
+++ webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/i18n/SandeshaMessageKeys.java Wed May 16 06:05:14 2007
@@ -116,6 +116,7 @@
 	public static final String invalidSequenceID="invalidsequenceID";
 	public static final String cantSendMakeConnectionNoTransportOut="cantSendMakeConnectionNoTransportOut";
 	public static final String makeConnectionDisabled="makeConnectionDisabled";
+	public static final String makeConnectionWarning="makeConnectionWarning";
 	
 	public static final String noCreateSeqResponse="noCreateSeqResponse";
 	public static final String noTerminateSeqPart="noTerminateSeqPart";

Modified: webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java?view=diff&rev=538573&r1=538572&r2=538573
==============================================================================
--- webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java (original)
+++ webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java Wed May 16 06:05:14 2007
@@ -36,6 +36,7 @@
 import org.apache.sandesha2.client.SandeshaListener;
 import org.apache.sandesha2.i18n.SandeshaMessageHelper;
 import org.apache.sandesha2.i18n.SandeshaMessageKeys;
+import org.apache.sandesha2.policy.SandeshaPolicyBean;
 import org.apache.sandesha2.security.SecurityManager;
 import org.apache.sandesha2.security.SecurityToken;
 import org.apache.sandesha2.storage.StorageManager;
@@ -190,6 +191,32 @@
 		//see if the sequence is timed out
 		if(rmsBean != null && rmsBean.isTimedOut()){
 			throw new SandeshaException(SandeshaMessageHelper.getMessage(SandeshaMessageKeys.cannotSendMsgAsSequenceTimedout, internalSequenceId));
+		}
+		
+		// If the call application is a 2-way MEP, and uses a anonymous replyTo, and the
+		// RM 1.1 spec level, then we must have MakeConnection enabled. We check that here,
+		// before we start creating a new Sequence.
+		if(!serverSide) {
+			AxisOperation op = msgContext.getAxisOperation();
+			int mep = WSDLConstants.MEP_CONSTANT_INVALID;
+			if(op != null) {
+				mep = op.getAxisSpecifMEPConstant();
+			}
+			if(mep == WSDLConstants.MEP_CONSTANT_OUT_IN) {
+				String specVersion = null;
+				if(rmsBean == null) {
+					specVersion = SequenceManager.getSpecVersion(msgContext, storageManager);
+				} else {
+					specVersion = rmsBean.getRMVersion();
+				}
+				if(specVersion == Sandesha2Constants.SPEC_VERSIONS.v1_1) {
+					SandeshaPolicyBean policy = SandeshaUtil.getPropertyBean(configContext.getAxisConfiguration());
+					if(!policy.isEnableMakeConnection()) {
+						String message = SandeshaMessageHelper.getMessage(SandeshaMessageKeys.makeConnectionDisabled);
+						throw new SandeshaException(message);
+					}
+				}
+			}
 		}
 
 		//setting the reference msg store key.

Modified: webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/CreateSeqResponseMsgProcessor.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/CreateSeqResponseMsgProcessor.java?view=diff&rev=538573&r1=538572&r2=538573
==============================================================================
--- webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/CreateSeqResponseMsgProcessor.java (original)
+++ webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/CreateSeqResponseMsgProcessor.java Wed May 16 06:05:14 2007
@@ -34,6 +34,7 @@
 import org.apache.sandesha2.SandeshaException;
 import org.apache.sandesha2.i18n.SandeshaMessageHelper;
 import org.apache.sandesha2.i18n.SandeshaMessageKeys;
+import org.apache.sandesha2.policy.SandeshaPolicyBean;
 import org.apache.sandesha2.security.SecurityManager;
 import org.apache.sandesha2.security.SecurityToken;
 import org.apache.sandesha2.storage.StorageManager;
@@ -129,14 +130,16 @@
 		
 		rmsBean.setSequenceID(newOutSequenceId);
 
-		// We must poll for any reply-to that uses the anonymous URI. If it is a ws-a reply to then
-		// the create must include an offer (or this client cannot be identified). If the reply-to
-		// is the RM anon URI template then the offer is not required.
+		// We should poll for any reply-to that uses the anonymous URI, when MakeConnection
+		// is enabled.
 		if (Sandesha2Constants.SPEC_VERSIONS.v1_1.equals(createSeqResponseRMMsgCtx.getRMSpecVersion())) {
-			String acksTo = rmsBean.getAcksToEPR();
-			EndpointReference reference = new EndpointReference(acksTo);
-			if(acksTo == null || reference.hasAnonymousAddress()) {
-				rmsBean.setPollingMode(true);
+			SandeshaPolicyBean policy = SandeshaUtil.getPropertyBean(configCtx.getAxisConfiguration());
+			if(policy.isEnableMakeConnection()) {
+				String acksTo = rmsBean.getAcksToEPR();
+				EndpointReference reference = new EndpointReference(acksTo);
+				if(acksTo == null || reference.hasAnonymousAddress()) {
+					rmsBean.setPollingMode(true);
+				}
 			}
 		}
 

Modified: webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/RMMsgCreator.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/RMMsgCreator.java?view=diff&rev=538573&r1=538572&r2=538573
==============================================================================
--- webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/RMMsgCreator.java (original)
+++ webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/RMMsgCreator.java Wed May 16 06:05:14 2007
@@ -40,6 +40,7 @@
 import org.apache.sandesha2.client.SandeshaClientConstants;
 import org.apache.sandesha2.i18n.SandeshaMessageHelper;
 import org.apache.sandesha2.i18n.SandeshaMessageKeys;
+import org.apache.sandesha2.policy.SandeshaPolicyBean;
 import org.apache.sandesha2.security.SecurityManager;
 import org.apache.sandesha2.security.SecurityToken;
 import org.apache.sandesha2.storage.StorageManager;
@@ -134,20 +135,32 @@
 		
 		CreateSequence createSequencePart = new CreateSequence(rmNamespaceValue);
 
+		// Check if this service includes 2-way operations
+		boolean twoWayService = false;
+		AxisService service = applicationMsgContext.getAxisService();
+		if(service != null) {
+			Parameter p = service.getParameter(Sandesha2Constants.SERVICE_CONTAINS_OUT_IN_MEPS);
+			if(p != null && p.getValue() != null) {
+				twoWayService = ((Boolean) p.getValue()).booleanValue();
+			}
+		}
+		
 		// Adding sequence offer - if present. We send an offer if the client has assigned an
 		// id, or if we are using WS-RM 1.0 and the service contains out-in MEPs
 		boolean autoOffer = false;
 		if(Sandesha2Constants.SPEC_2005_02.NS_URI.equals(rmNamespaceValue)) {
-			AxisService service = applicationMsgContext.getAxisService();
-			if(service != null) {
-				Parameter p = service.getParameter(Sandesha2Constants.SERVICE_CONTAINS_OUT_IN_MEPS);
-				if(p != null && p.getValue() != null) {
-					autoOffer = ((Boolean) p.getValue()).booleanValue();
-				}
+			autoOffer = twoWayService;
+		} else {
+			// We also do some checking at this point to see if MakeConection is required to
+			// enable WS-RM 1.1, and write a warning to the log if it has been disabled.
+			SandeshaPolicyBean policy = SandeshaUtil.getPropertyBean(context.getAxisConfiguration());
+			if(twoWayService && !policy.isEnableMakeConnection()) {
+				String message = SandeshaMessageHelper.getMessage(SandeshaMessageKeys.makeConnectionWarning);
+				log.warn(message);
 			}
 		}
+
 		String offeredSequenceId = (String) applicationMsgContext.getProperty(SandeshaClientConstants.OFFERED_SEQUENCE_ID);
-			
 		if(autoOffer ||
 		   (offeredSequenceId != null && offeredSequenceId.length() > 0))  {
 			

Modified: webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/SequenceManager.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/SequenceManager.java?view=diff&rev=538573&r1=538572&r2=538573
==============================================================================
--- webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/SequenceManager.java (original)
+++ webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/SequenceManager.java Wed May 16 06:05:14 2007
@@ -179,32 +179,7 @@
 		}
 		
 		// Finding the spec version
-		String specVersion = null;
-		if (firstAplicationMsgCtx.isServerSide()) {
-			// in the server side, get the RM version from the request sequence.
-			if(inboundBean == null || inboundBean.getRMVersion() == null) {
-				String beanInfo = (inboundBean == null) ? "null" : inboundBean.toString();
-				String message = SandeshaMessageHelper.getMessage(
-						SandeshaMessageKeys.cannotChooseSpecLevel, inboundSequence, beanInfo );
-				SandeshaException e = new SandeshaException(message);
-				if(log.isDebugEnabled()) log.debug("Throwing", e);
-				throw e;
-			}
-
-			specVersion = inboundBean.getRMVersion();
-		} else {
-			// in the client side, user will set the RM version.
-			specVersion = (String) firstAplicationMsgCtx.getProperty(SandeshaClientConstants.RM_SPEC_VERSION);
-			
-			// If the spec version is null, look in the axis operation to see value has been set
-			Parameter opLevel = firstAplicationMsgCtx.getAxisOperation().getParameter(SandeshaClientConstants.RM_SPEC_VERSION);
-			if (specVersion == null && opLevel != null)	specVersion = (String) opLevel.getValue();						
-		}
-
-		if (specVersion == null)
-			// TODO change the default to v1_1
-			specVersion = SpecSpecificConstants.getDefaultSpecVersion(); 
-		
+		String specVersion = getSpecVersion(firstAplicationMsgCtx, storageManager);
 		rmsBean.setRMVersion(specVersion);
 
 		// Set up the To EPR
@@ -341,4 +316,44 @@
 		}
 	}
 
+	public static String getSpecVersion(MessageContext applicationMessage, StorageManager storageManager)
+	throws SandeshaException
+	{
+		String specVersion = null;
+		if (applicationMessage.isServerSide()) {
+			String inboundSequence = null;
+			RMDBean inboundBean = null;
+			if(applicationMessage.isServerSide()) {
+				inboundSequence = (String) applicationMessage.getProperty(Sandesha2Constants.MessageContextProperties.INBOUND_SEQUENCE_ID);
+				if(inboundSequence != null) {
+					inboundBean = SandeshaUtil.getRMDBeanFromSequenceId(storageManager, inboundSequence);
+				}
+			}
+
+			// in the server side, get the RM version from the request sequence.
+			if(inboundBean == null || inboundBean.getRMVersion() == null) {
+				String beanInfo = (inboundBean == null) ? "null" : inboundBean.toString();
+				String message = SandeshaMessageHelper.getMessage(
+						SandeshaMessageKeys.cannotChooseSpecLevel, inboundSequence, beanInfo );
+				SandeshaException e = new SandeshaException(message);
+				if(log.isDebugEnabled()) log.debug("Throwing", e);
+				throw e;
+			}
+
+			specVersion = inboundBean.getRMVersion();
+		} else {
+			// in the client side, user will set the RM version.
+			specVersion = (String) applicationMessage.getProperty(SandeshaClientConstants.RM_SPEC_VERSION);
+			
+			// If the spec version is null, look in the axis operation to see value has been set
+			Parameter opLevel = applicationMessage.getAxisOperation().getParameter(SandeshaClientConstants.RM_SPEC_VERSION);
+			if (specVersion == null && opLevel != null)	specVersion = (String) opLevel.getValue();						
+		}
+
+		if (specVersion == null)
+			// TODO change the default to v1_1
+			specVersion = SpecSpecificConstants.getDefaultSpecVersion(); 
+
+		return specVersion;
+	}
 }

Modified: webservices/sandesha/trunk/java/modules/core/src/main/resources/org/apache/sandesha2/i18n/resource.properties
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/resources/org/apache/sandesha2/i18n/resource.properties?view=diff&rev=538573&r1=538572&r2=538573
==============================================================================
--- webservices/sandesha/trunk/java/modules/core/src/main/resources/org/apache/sandesha2/i18n/resource.properties (original)
+++ webservices/sandesha/trunk/java/modules/core/src/main/resources/org/apache/sandesha2/i18n/resource.properties Wed May 16 06:05:14 2007
@@ -131,6 +131,7 @@
 invalidSequenceID=invalid sequence ID: {0}.
 cantSendMakeConnectionNoTransportOut=Can''t send the MakeConnection reply since the message does not has a TransportOutDescription.
 makeConnectionDisabled=Cannot handle synchronous 2-way connections because MakeConnection is not enabled. Either enable MakeConnection or reconfigure your application to use asynchronous connections.
+makeConnectionWarning=Warning: Synchronous 2-way connections with WS-RM 1.1 require MakeConnection, and it is not enabled. If your application invokes synchronous 2-way operations then it will fail.
 
 noCreateSeqResponse=''CreateSequenceResponse'' part is not available.
 noTerminateSeqPart=''Terminate Sequence'' part is not available.

Modified: webservices/sandesha/trunk/java/modules/tests/src/test/java/org/apache/sandesha2/scenarios/RMScenariosTest.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/tests/src/test/java/org/apache/sandesha2/scenarios/RMScenariosTest.java?view=diff&rev=538573&r1=538572&r2=538573
==============================================================================
--- webservices/sandesha/trunk/java/modules/tests/src/test/java/org/apache/sandesha2/scenarios/RMScenariosTest.java (original)
+++ webservices/sandesha/trunk/java/modules/tests/src/test/java/org/apache/sandesha2/scenarios/RMScenariosTest.java Wed May 16 06:05:14 2007
@@ -36,12 +36,11 @@
 import org.apache.sandesha2.client.SandeshaClientConstants;
 import org.apache.sandesha2.client.SequenceReport;
 import org.apache.sandesha2.util.SandeshaUtil;
-import org.apache.sandesha2.versions.RMVersionTest;
 
 public class RMScenariosTest extends SandeshaTestCase {
 
 	private boolean serverStarted = false; 
-	private ConfigurationContext configContext = null;
+	protected ConfigurationContext configContext = null;
 
 	protected String to = "http://127.0.0.1:" + serverPort + "/axis2/services/RMSampleService";
 	

Added: webservices/sandesha/trunk/java/modules/tests/src/test/java/org/apache/sandesha2/scenarios/UnsupportedScenariosTest.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/tests/src/test/java/org/apache/sandesha2/scenarios/UnsupportedScenariosTest.java?view=auto&rev=538573
==============================================================================
--- webservices/sandesha/trunk/java/modules/tests/src/test/java/org/apache/sandesha2/scenarios/UnsupportedScenariosTest.java (added)
+++ webservices/sandesha/trunk/java/modules/tests/src/test/java/org/apache/sandesha2/scenarios/UnsupportedScenariosTest.java Wed May 16 06:05:14 2007
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2007 The Apache Software Foundation.
+ * Copyright 2007 International Business Machines Corp.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sandesha2.scenarios;
+
+import org.apache.axis2.AxisFault;
+import org.apache.axis2.client.Options;
+import org.apache.sandesha2.Sandesha2Constants;
+import org.apache.sandesha2.client.SandeshaClientConstants;
+import org.apache.sandesha2.policy.SandeshaPolicyBean;
+import org.apache.sandesha2.util.SandeshaUtil;
+
+public class UnsupportedScenariosTest extends RMScenariosTest {
+
+	public UnsupportedScenariosTest () {
+		super ("RMScenariosTest");
+	}
+	
+	public void setUp () throws Exception {
+		super.setUp();
+		
+		// Override the config to disable make connection
+		SandeshaPolicyBean config = SandeshaUtil.getDefaultPropertyBean(configContext.getAxisConfiguration());
+		config.setEnableMakeConnection(false);
+	}
+	
+	public void test2WayWithoutMakeConnectionFails() throws Exception  {
+		// Run a ping test with sync acks - this should work even though MakeConnection is disabled
+		runPing(false, false);
+		
+		// Run an echo test with sync acks - this should fail as MakeConnection is disabled
+		AxisFault fault = null;
+		Options clientOptions = new Options();
+		clientOptions.setProperty(SandeshaClientConstants.RM_SPEC_VERSION,Sandesha2Constants.SPEC_VERSIONS.v1_1);
+		try {
+			runEcho(clientOptions, false, false, false, false, true);
+		} catch (AxisFault e) {
+			fault = e;
+			System.out.println("Caught expected fault: " + e);
+		}
+		assertNotNull("Expected fault", fault);
+	}
+
+	//
+	// Dummy test methods to stop us invoking the parent methods
+	//
+	public void testAsyncEcho() throws Exception {
+		// Do nothing
+	}
+	public void testPing() throws Exception {
+		// Do nothing
+	}
+	public void testSyncEcho() throws Exception {
+		// Do nothing
+	}
+
+}

Propchange: webservices/sandesha/trunk/java/modules/tests/src/test/java/org/apache/sandesha2/scenarios/UnsupportedScenariosTest.java
------------------------------------------------------------------------------
    svn:eol-style = native



---------------------------------------------------------------------
To unsubscribe, e-mail: sandesha-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: sandesha-dev-help@ws.apache.org