You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@synapse.apache.org by hi...@apache.org on 2008/06/25 12:37:41 UTC

svn commit: r671500 - in /synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/fix: FIXConstants.java FIXTransportSender.java

Author: hiranya
Date: Wed Jun 25 03:37:41 2008
New Revision: 671500

URL: http://svn.apache.org/viewvc?rev=671500&view=rev
Log:
Changes made;
	* Introduced a new service parameter for FIX transport (transport.fix.BeginStringValidation)
	* Disabled BeginString validation


Modified:
    synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/fix/FIXConstants.java
    synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/fix/FIXTransportSender.java

Modified: synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/fix/FIXConstants.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/fix/FIXConstants.java?rev=671500&r1=671499&r2=671500&view=diff
==============================================================================
--- synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/fix/FIXConstants.java (original)
+++ synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/fix/FIXConstants.java Wed Jun 25 03:37:41 2008
@@ -96,4 +96,6 @@
 
     public static final String FIX_RESPONSE_HANDLER_APPROACH = "transport.fix.SendAllToInSequence";
 
+    public static final String FIX_BEGIN_STRING_VALIDATION = "transport.fix.BeginStringValidation";
+
 }
\ No newline at end of file

Modified: synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/fix/FIXTransportSender.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/fix/FIXTransportSender.java?rev=671500&r1=671499&r2=671500&view=diff
==============================================================================
--- synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/fix/FIXTransportSender.java (original)
+++ synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/fix/FIXTransportSender.java Wed Jun 25 03:37:41 2008
@@ -127,13 +127,15 @@
         }
     }
 
-    private boolean isTargetVald(Map<String, String> fieldValues, SessionID targetSession) {
+    private boolean isTargetVald(Map<String, String> fieldValues, SessionID targetSession,
+                                 boolean beginStrValidation) {
+        
         String beginString = fieldValues.get(FIXConstants.BEGIN_STRING);
         String deliverToCompID = fieldValues.get(FIXConstants.DELIVER_TO_COMP_ID);
         String deliverToSubID = fieldValues.get(FIXConstants.DELIVER_TO_SUB_ID);
         String deliverToLocationID = fieldValues.get(FIXConstants.DELIVER_TO_LOCATION_ID);
 
-        if (!targetSession.getBeginString().equals(beginString)) {
+        if (beginStrValidation && !targetSession.getBeginString().equals(beginString)) {
             return false;
         } else if (!targetSession.getTargetCompID().equals(deliverToCompID)) {
             return false;
@@ -267,10 +269,13 @@
         String beginString = fieldValues.get(FIXConstants.BEGIN_STRING);
         String deliverToCompID = fieldValues.get(FIXConstants.DELIVER_TO_COMP_ID);
 
+        AxisService service = cfgCtx.getAxisConfiguration().getService(serviceName);
+
         //match BeginString values
-        if (beginString != null && !beginString.equals(sessionID.getBeginString())) {
-            handleException("Cannot forward messages to a session with a different BeginString");
-        }
+        if (isValidationOn(service) && beginString != null && !beginString.equals(sessionID.getBeginString())) {
+            handleException("BeginString validation is on. Cannot forward messages to a session" +
+                    " with a different BeginString");
+         }
 
         if (deliverToCompID != null) {
             //message needs to be delivered
@@ -284,7 +289,6 @@
 
         if (!Session.doesSessionExist(sessionID)) {
             //try to create initiator to send the message
-            AxisService service = cfgCtx.getAxisConfiguration().getService(serviceName);
             sessionFactory.createFIXInitiator(targetEPR, service, sessionID);
         }
 
@@ -318,10 +322,13 @@
         String beginString = fieldValues.get(FIXConstants.BEGIN_STRING);
         String deliverToCompID = fieldValues.get(FIXConstants.DELIVER_TO_COMP_ID);
 
+        AxisService service = cfgCtx.getAxisConfiguration().getService(serviceName);
+
         //match BeginString values
-        if (beginString != null && !beginString.equals(sessionID.getBeginString())) {
-            handleException("Cannot forward messages to a session with a different BeginString");
-        }
+        if (isValidationOn(service) && beginString != null && !beginString.equals(sessionID.getBeginString())) {
+            handleException("BeginString validation is on. Cannot forward messages to a session" +
+                    " with a different BeginString");
+         }
 
         if (deliverToCompID != null) {
             //message needs to be delivered to some other party
@@ -329,7 +336,6 @@
                 handleException("Cannot forward messages that do not have a valid DeliverToCompID field");
             } else {
                 prepareToForwardMessage(fixMessage, fieldValues);
-                AxisService service = cfgCtx.getAxisConfiguration().getService(serviceName);
                 setDeliverToXFields(fixMessage, service);
             }
         } else {
@@ -365,18 +371,20 @@
         Acceptor acceptor = sessionFactory.getAccepter(serviceName);
         SessionID sessionID = null;
 
+        AxisService service = cfgCtx.getAxisConfiguration().getService(serviceName);
+
         if (acceptor != null) {
             ArrayList<SessionID> sessions = acceptor.getSessions();
             if (sessions.size() == 1) {
                 sessionID = sessions.get(0);
-                if (deliverToCompID != null && !isTargetVald(fieldValues, sessionID)) {
+                if (deliverToCompID != null && !isTargetVald(fieldValues, sessionID, isValidationOn(service))) {
                     sessionID = null;
                 }
 
             } else if (sessions.size() > 1 && deliverToCompID != null) {
                 for (int i = 0; i < sessions.size(); i++) {
                     sessionID = sessions.get(i);
-                    if (isTargetVald(fieldValues, sessionID)) {
+                    if (isTargetVald(fieldValues, sessionID, isValidationOn(service))) {
                         break;
                     }
                 }
@@ -391,6 +399,23 @@
         return false;
     }
 
+    /**
+     * Checks whether BeginString validation is on for the specified
+     * service.
+     *
+     * @param service the AxisService of the message
+     * @return a boolean value indicating the validation state
+     */
+    private boolean isValidationOn(AxisService service) {
+        Parameter validationParam = service.getParameter(FIXConstants.FIX_BEGIN_STRING_VALIDATION);
+        if (validationParam != null) {
+            if ("true".equals(validationParam.getValue().toString())) {
+                return true;
+            }
+        }
+        return false;
+    }
+
     public void logOutIncomingSession(SessionID sessionID) {
         messageSender.cleanUpMessages(sessionID.toString());
     }