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