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]