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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to