Author: chamikara
Date: Sun Feb  4 09:47:18 2007
New Revision: 503447

URL: http://svn.apache.org/viewvc?view=rev&rev=503447
Log:
A new policy to enforce RM at the server side.
Corrected the policy handling logic to load service/operation level policies.
Removed some commented code.

Modified:
    webservices/sandesha/trunk/java/config/module.xml
    webservices/sandesha/trunk/java/samples/conf/userguide/services.xml
    
webservices/sandesha/trunk/java/src/org/apache/sandesha2/MessageValidator.java
    
webservices/sandesha/trunk/java/src/org/apache/sandesha2/Sandesha2Constants.java
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/SandeshaModule.java
    
webservices/sandesha/trunk/java/src/org/apache/sandesha2/i18n/SandeshaMessageKeys.java
    
webservices/sandesha/trunk/java/src/org/apache/sandesha2/i18n/resource.properties
    
webservices/sandesha/trunk/java/src/org/apache/sandesha2/policy/SandeshaPolicyBean.java
    
webservices/sandesha/trunk/java/src/org/apache/sandesha2/policy/builders/RMAssertionBuilder.java
    
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/MessageRetransmissionAdjuster.java
    
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/PropertyManager.java
    
webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/PropertyLoaderTest.java

Modified: webservices/sandesha/trunk/java/config/module.xml
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/config/module.xml?view=diff&rev=503447&r1=503446&r2=503447
==============================================================================
--- webservices/sandesha/trunk/java/config/module.xml (original)
+++ webservices/sandesha/trunk/java/config/module.xml Sun Feb  4 09:47:18 2007
@@ -117,6 +117,8 @@
                                </sandesha2:MakeConnection>
                                
                                <!-- 
<sandesha2:UseMessageSerialization>true</sandesha2:UseMessageSerialization> -->
+                               
+                               <sandesha2:EnforceRM>false</sandesha2:EnforceRM>
                        </wsp:Policy>
                </sandesha2:RMAssertion>
        </wsp:Policy>

Modified: webservices/sandesha/trunk/java/samples/conf/userguide/services.xml
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/samples/conf/userguide/services.xml?view=diff&rev=503447&r1=503446&r2=503447
==============================================================================
--- webservices/sandesha/trunk/java/samples/conf/userguide/services.xml 
(original)
+++ webservices/sandesha/trunk/java/samples/conf/userguide/services.xml Sun Feb 
 4 09:47:18 2007
@@ -23,17 +23,23 @@
         <actionMapping>urn:wsrm:EchoString</actionMapping>
         <outputActionMapping>urn:wsrm:EchoStringResponse</outputActionMapping>
     </operation>
-       
-<!--    <supported-policy-namespaces 
namespaces="http://ws.apache.org/sandesha2/policy"; />-->
-
-<!--   <wsp:Policy xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"; 
-               
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd";
-           xmlns:wsrm="http://ws.apache.org/sandesha2/policy"; 
wsu:Id="RMPolicy">
-               
-           <!-#- Following policy value has been overrided from the default 
values.-#->> 
-           <wsrm:AcknowledgementInterval>3500</wsrm:AcknowledgementInterval>
-          
-       </wsp:Policy>-->
+       
+   <!--     
+   <supported-policy-namespaces 
namespaces="http://ws.apache.org/sandesha2/policy"; />
+
+       <wsp:Policy xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy";
+                       
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd";
+                       xmlns:sandesha2="http://ws.apache.org/sandesha2/policy"; 
wsu:Id="RMPolicy">
+                       
+               <sandesha2:RMAssertion>
+                       <wsp:Policy>
+                               
<sandesha2:AcknowledgementInterval>4000</sandesha2:AcknowledgementInterval>
+                               <sandesha2:EnforceRM>true</sandesha2:EnforceRM>
+                       </wsp:Policy>
+               </sandesha2:RMAssertion>
+               
+       </wsp:Policy>
+        -->
     
     
 </service>

Modified: 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/MessageValidator.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/MessageValidator.java?view=diff&rev=503447&r1=503446&r2=503447
==============================================================================
--- 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/MessageValidator.java 
(original)
+++ 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/MessageValidator.java 
Sun Feb  4 09:47:18 2007
@@ -19,6 +19,7 @@
 
 import org.apache.sandesha2.i18n.SandeshaMessageHelper;
 import org.apache.sandesha2.i18n.SandeshaMessageKeys;
+import org.apache.sandesha2.policy.SandeshaPolicyBean;
 import org.apache.sandesha2.storage.StorageManager;
 import org.apache.sandesha2.storage.beans.RMDBean;
 import org.apache.sandesha2.storage.beans.RMSBean;
@@ -31,21 +32,24 @@
  */
 public class MessageValidator {
 
-       public static void validateMessage(RMMsgContext rmMsg, StorageManager 
storageManager) throws SandeshaException {
+       public static void validateMessage(RMMsgContext rmMsg,
+                       StorageManager storageManager) throws SandeshaException 
{
 
-               if (rmMsg.getMessageType() != 
Sandesha2Constants.MessageTypes.CREATE_SEQ
-                               && rmMsg.getMessageType() != 
Sandesha2Constants.MessageTypes.UNKNOWN) {
+               int type = rmMsg.getMessageType();
+               if (type != Sandesha2Constants.MessageTypes.CREATE_SEQ  && type 
!= Sandesha2Constants.MessageTypes.UNKNOWN) {
 
                        String sequenceID = 
SandeshaUtil.getSequenceIDFromRMMessage(rmMsg);
 
                        if (sequenceID != null) {
                                String rmVersionOfSequence = null;
-                               
-                               RMSBean rmsBean = 
SandeshaUtil.getRMSBeanFromSequenceId(storageManager, sequenceID);
+
+                               RMSBean rmsBean = 
SandeshaUtil.getRMSBeanFromSequenceId(
+                                               storageManager, sequenceID);
                                if (rmsBean != null)
                                        rmVersionOfSequence = 
rmsBean.getRMVersion();
                                else {
-                                       RMDBean rmdBean = 
SandeshaUtil.getRMDBeanFromSequenceId(storageManager, sequenceID);
+                                       RMDBean rmdBean = 
SandeshaUtil.getRMDBeanFromSequenceId(
+                                                       storageManager, 
sequenceID);
                                        if (rmdBean != null)
                                                rmVersionOfSequence = 
rmdBean.getRMVersion();
                                }
@@ -53,16 +57,38 @@
                                String rmNamespaceOfMsg = 
rmMsg.getRMNamespaceValue();
                                String rmNamespaceOfSequence = null;
                                if (rmVersionOfSequence != null)
-                                       rmNamespaceOfSequence = 
SpecSpecificConstants.getRMNamespaceValue(rmVersionOfSequence);
+                                       rmNamespaceOfSequence = 
SpecSpecificConstants
+                                                       
.getRMNamespaceValue(rmVersionOfSequence);
 
-                               if (rmNamespaceOfSequence != null && 
!rmNamespaceOfSequence.equals(rmNamespaceOfMsg)) {
-                                       String message = 
SandeshaMessageHelper.getMessage(SandeshaMessageKeys.rmNamespaceNotMatchSequence,
-                                                       rmNamespaceOfMsg, 
rmNamespaceOfSequence, sequenceID);
+                               if (rmNamespaceOfSequence != null
+                                               && 
!rmNamespaceOfSequence.equals(rmNamespaceOfMsg)) {
+                                       String message = SandeshaMessageHelper
+                                                       .getMessage(
+                                                                       
SandeshaMessageKeys.rmNamespaceNotMatchSequence,
+                                                                       
rmNamespaceOfMsg, rmNamespaceOfSequence,
+                                                                       
sequenceID);
                                        throw new SandeshaException(message);
                                }
 
-                               // TODO do validation based on states
+                       }
+               } else if (type == Sandesha2Constants.MessageTypes.UNKNOWN) {
+
+                       // checking if policies hv been set to enforceRM.
+                       // If this is set and this message is not an RM 
message, validation
+                       // will fail here.
+
+                       SandeshaPolicyBean propertyBean = SandeshaUtil
+                                       
.getPropertyBean(rmMsg.getMessageContext()
+                                                       .getAxisOperation());
+                       if (propertyBean.isEnforceRM()) {
+                               String message = 
SandeshaMessageHelper.getMessage(
+                                               
SandeshaMessageKeys.rmEnforceFailure, rmMsg
+                                                               
.getMessageId());
+                               throw new SandeshaException(message);
                        }
                }
+
+               // TODO do validation based on states
+               
        }
 }

Modified: 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/Sandesha2Constants.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/Sandesha2Constants.java?view=diff&rev=503447&r1=503446&r2=503447
==============================================================================
--- 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/Sandesha2Constants.java
 (original)
+++ 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/Sandesha2Constants.java
 Sun Feb  4 09:47:18 2007
@@ -390,6 +390,8 @@
                        boolean EnableRMAnonURI = true;
                        
                        boolean UseMessageSerialization = false;
+                       
+                       boolean enforceRM = false;
                }
        }
        
@@ -533,6 +535,7 @@
         public static final String ELEM_ENABLED = "Enabled";
         public static final String ELEM_USE_RM_ANON_URI = "UseRMAnonURI";
         public static final String ELEM_USE_SERIALIZATION = 
"UseMessageSerialization";
+        public static final String ELEM_ENFORCE_RM = "EnforceRM";
         
         public static final QName Q_ELEM_POLICY = new QName(URI_POLICY_NS, 
ELEM_POLICY, ATTR_WSP);
         public static final QName Q_ELEM_RMASSERTION = new 
QName(URI_RM_POLICY_NS, ELEM_RMASSERTION, ATTR_WSRM);
@@ -553,5 +556,7 @@
         public static final QName Q_ELEM_ENABLED = new QName(URI_RM_POLICY_NS, 
ELEM_ENABLED, ATTR_WSRM);
         public static final QName Q_ELEM_USE_RM_ANON_URI = new 
QName(URI_RM_POLICY_NS, ELEM_USE_RM_ANON_URI, ATTR_WSRM);
         public static final QName Q_ELEM_USE_SERIALIZATION = new 
QName(URI_RM_POLICY_NS, ELEM_USE_SERIALIZATION, ATTR_WSRM);
+        public static final QName Q_ELEM_ENFORCE_RM = new 
QName(URI_RM_POLICY_NS, ELEM_ENFORCE_RM, ATTR_WSRM);
+        
     }
 }

Modified: 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/SandeshaModule.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/SandeshaModule.java?view=diff&rev=503447&r1=503446&r2=503447
==============================================================================
--- 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/SandeshaModule.java 
(original)
+++ 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/SandeshaModule.java 
Sun Feb  4 09:47:18 2007
@@ -135,7 +135,7 @@
        public void engageNotify(AxisDescription axisDescription) throws 
AxisFault {
                if(log.isDebugEnabled()) log.debug("Entry: 
SandeshaModule::engageNotify, " + axisDescription);
                
-               SandeshaPolicyBean parentPropertyBean = 
SandeshaUtil.getPropertyBean(axisDescription);
+               SandeshaPolicyBean parentPropertyBean = 
SandeshaUtil.getPropertyBean(axisDescription.getParent());
                if (parentPropertyBean==null) 
                        throw new AxisFault (SandeshaMessageHelper.getMessage(
                                        
SandeshaMessageKeys.defaultPropertyBeanNotSet));

Modified: 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/i18n/SandeshaMessageKeys.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/i18n/SandeshaMessageKeys.java?view=diff&rev=503447&r1=503446&r2=503447
==============================================================================
--- 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/i18n/SandeshaMessageKeys.java
 (original)
+++ 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/i18n/SandeshaMessageKeys.java
 Sun Feb  4 09:47:18 2007
@@ -298,5 +298,6 @@
        public final static String cloneDoesNotMatchToOriginal = 
"cloneDoesNotMatchToOriginal";
        public final static String exceptionInFlowCompletion = 
"exceptionInFlowCompletion";
        public final static String rmdBeanNotFound = "rmdBeanNotFound";
-
+       public final static String rmEnforceFailure = "rmEnforceFailure";
+       public final static String policyHasNotBeenSet = "policyHasNotBeenSet";
 }

Modified: 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/i18n/resource.properties
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/i18n/resource.properties?view=diff&rev=503447&r1=503446&r2=503447
==============================================================================
--- 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/i18n/resource.properties
 (original)
+++ 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/i18n/resource.properties
 Sun Feb  4 09:47:18 2007
@@ -100,6 +100,9 @@
 cloneDoesNotMatchToOriginal=The elements of the original and cloned SOAP 
Envelopes do not match
 exceptionInFlowCompletion=Got exception in flowCompletion of SandeshaInHandler
 rmdBeanNotFound=RMDBean not available for the sequence:{0}
+policyHasNotBeenSet="WSRM Policy ''{0}'' has not been set for this endpoint
+rmEnforceFailure=The message with MessageID ''{0}'' is not WSRM enabled but 
the service enforces WSRM
+
 #-------------------------------------
 #
 #      Protocol Oriented Messages
@@ -305,4 +308,4 @@
 
 createSequenceRefused=The Create Sequence request has been refused by the RM 
Destination
 referencedMessageNotFound = Reference message is not present for the sequence 
with property key {0}
-messageNumberRollover=The maximum value for wsrm:MessageNumber has been 
exceeded.
+messageNumberRollover=The maximum value for wsrm:MessageNumber has been 
exceeded.
\ No newline at end of file

Modified: 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/policy/SandeshaPolicyBean.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/policy/SandeshaPolicyBean.java?view=diff&rev=503447&r1=503446&r2=503447
==============================================================================
--- 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/policy/SandeshaPolicyBean.java
 (original)
+++ 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/policy/SandeshaPolicyBean.java
 Sun Feb  4 09:47:18 2007
@@ -27,6 +27,9 @@
 import org.apache.neethi.Constants;
 import org.apache.neethi.PolicyComponent;
 import org.apache.sandesha2.Sandesha2Constants;
+import org.apache.sandesha2.SandeshaException;
+import org.apache.sandesha2.i18n.SandeshaMessageHelper;
+import org.apache.sandesha2.i18n.SandeshaMessageKeys;
 
 /**
  * Used to hold peoperties loaded from sandesha2.properties file or
@@ -35,9 +38,12 @@
 
 public class SandeshaPolicyBean implements Assertion {
 
+       private SandeshaPolicyBean parent = null;
+       
     // String storageManagerClass = null;
     boolean inOrder = true;
-
+    private boolean inOrderSet = false;
+    
     ArrayList msgTypesToDrop = null;
 
     private String inMemoryStorageManagerClass = null;
@@ -47,26 +53,38 @@
     private String securityManagerClass = null;
 
     private long inactiveTimeoutValue;
-
+    private boolean inactiveTimeoutValueSet = false;
+    
     private String inactivityTimeoutMeasure;
 
     private long inactivityTimeoutInterval = -1;
-
+    private boolean inactivityTimeoutIntervalSet = false;
+    
     private long acknowledgementInterval;
-
+    private boolean acknowledgementIntervalSet = false;
+    
     private long retransmissionInterval;
-
+    private boolean retransmissionIntervalSet = false;
+    
     private boolean exponentialBackoff;
-
+    private boolean exponentialBackoffSet = false;
+    
     private int maximumRetransmissionCount;
+    private boolean maximumRetransmissionCountSet = false;
     
     private boolean enableMakeConnection;
+    private boolean enableMakeConnectionSet = false;
     
     private boolean enableRMAnonURI;
+    private boolean enableRMAnonURISet = false;
     
     private boolean useMessageSerialization;
-
-    public void setInactiveTimeoutInterval(long value, String measure) {
+    private boolean useMessageSerializationSet = false;
+    
+    private boolean enforceRM;
+    private boolean enforceRMSet = false;
+    
+       public void setInactiveTimeoutInterval(long value, String measure) {
         long timeOut = -1;
 
         if (measure == null) {
@@ -87,6 +105,7 @@
 
     public void setAcknowledgementInterval(long acknowledgementInterval) {
         this.acknowledgementInterval = acknowledgementInterval;
+        setAcknowledgementIntervalSet(true);
     }
 
     public String getInMemoryStorageManagerClass() {
@@ -113,6 +132,7 @@
 
     public void setInOrder(boolean inOrder) {
         this.inOrder = inOrder;
+        setInOrderSet(true);
     }
 
     public ArrayList getMsgTypesToDrop() {
@@ -133,12 +153,22 @@
         }
     }
 
-    public int getMaximumRetransmissionCount() {
-        return maximumRetransmissionCount;
+    public int getMaximumRetransmissionCount() throws SandeshaException {
+       
+       if (isMaximumRetransmissionCountSet()) {
+               return maximumRetransmissionCount;
+       } else if (parent!=null) {
+               return parent.getMaximumRetransmissionCount();
+       } else {
+               String message = 
SandeshaMessageHelper.getMessage(SandeshaMessageKeys.policyHasNotBeenSet, 
Sandesha2Constants.Assertions.ELEM_MAX_RETRANS_COUNT);
+               throw new SandeshaException (message);
+       }
+       
     }
 
     public void setMaximumRetransmissionCount(int maximumRetransmissionCount) {
         this.maximumRetransmissionCount = maximumRetransmissionCount;
+        setMaximumRetransmissionCountSet(true);
     }
 
     public String getSecurityManagerClass() {
@@ -162,126 +192,133 @@
     }
 
     public void serialize(XMLStreamWriter writer) throws XMLStreamException {
-        String localName = Sandesha2Constants.Assertions.Q_ELEM_RMASSERTION
-                .getLocalPart();
-        String namespaceURI = Sandesha2Constants.Assertions.Q_ELEM_RMASSERTION
-                .getNamespaceURI();
-
-        String prefix = writer.getPrefix(namespaceURI);
-        if (prefix == null) {
-            prefix = Sandesha2Constants.Assertions.Q_ELEM_RMASSERTION
-                    .getPrefix();
-            writer.setPrefix(prefix, namespaceURI);
-        }
-
-        // <wsrm:RMAssertion>
-        writer.writeStartElement(prefix, localName, namespaceURI);
-        // xmlns:wsrm=".."
-        writer.writeNamespace(prefix, namespaceURI);
-
-        String policyLocalName = Sandesha2Constants.Assertions.Q_ELEM_POLICY
-                .getLocalPart();
-        String policyNamespaceURI = Sandesha2Constants.Assertions.Q_ELEM_POLICY
-                .getNamespaceURI();
-        String wspPrefix = writer.getPrefix(policyNamespaceURI);
-
-        if (wspPrefix == null) {
-            wspPrefix = 
Sandesha2Constants.Assertions.Q_ELEM_POLICY.getPrefix();
-            writer.writeNamespace(wspPrefix, policyNamespaceURI);
-        }
-
-        // <wsp:Policy>
-        writer
-                .writeStartElement(wspPrefix, policyLocalName,
-                        policyNamespaceURI);
-
-        // <wsrm:AcknowledgementInterval />
-        writer.writeStartElement(prefix, 
Sandesha2Constants.Assertions.Q_ELEM_ACK_INTERVAL.getLocalPart(), namespaceURI);
-        writer.writeCharacters(Long.toString(getAcknowledgementInterval()));
-        writer.writeEndElement();
-        
-        // <wsrm:RetransmissionInterval />
-        writer.writeStartElement(prefix, 
Sandesha2Constants.Assertions.Q_ELEM_RETRANS_INTERVAL.getLocalPart(), 
namespaceURI);
-        writer.writeCharacters(Long.toString(getRetransmissionInterval()));
-        writer.writeEndElement();
-
-        // <wsrm:MaximumRetransmissionCount />
-        writer.writeStartElement(prefix, 
Sandesha2Constants.Assertions.Q_ELEM_MAX_RETRANS_COUNT.getLocalPart(), 
namespaceURI);
-        writer.writeCharacters(Long.toString(getMaximumRetransmissionCount()));
-        writer.writeEndElement();
-        
-        // <wsrm:ExponentialBackoff />
-        writer.writeStartElement(prefix, 
Sandesha2Constants.Assertions.Q_ELEM_EXP_BACKOFF.getLocalPart(), namespaceURI);
-        writer.writeCharacters(Boolean.toString(isExponentialBackoff()));
-        writer.writeEndElement();
-        
-        // <wsrm:InactivityTimeout />
-        writer.writeStartElement(prefix, 
Sandesha2Constants.Assertions.Q_ELEM_INACTIVITY_TIMEOUT.getLocalPart(), 
namespaceURI);
-        writer.writeCharacters(Long.toString(getInactivityTimeoutInterval()));
-        writer.writeEndElement();
-        
-        // <wsrm:InactivityTimeoutMeasure />
-        writer.writeStartElement(prefix, 
Sandesha2Constants.Assertions.Q_ELEM_INACTIVITY_TIMEOUT_MEASURES.getLocalPart(),
 namespaceURI);
-        writer.writeCharacters(inactivityTimeoutMeasure);
-        writer.writeEndElement();
-        
-        // <wsrm:InvokeInOrder />
-        writer.writeStartElement(prefix, 
Sandesha2Constants.Assertions.Q_ELEM_INVOKE_INORDER.getLocalPart(), 
namespaceURI);
-        writer.writeCharacters(Boolean.toString(isInOrder()));
-        writer.writeEndElement();
-        
-        // <wsrm:MessageTypesToDrop />
-        writer.writeStartElement(prefix, 
Sandesha2Constants.Assertions.Q_ELEM_MSG_TYPES_TO_DROP.getLocalPart(), 
namespaceURI);
-        writer.writeCharacters("none"); // FIXME
-        writer.writeEndElement();
-        
-        // <wsrm:StorageManagers>
-        writer.writeStartElement(prefix, 
Sandesha2Constants.Assertions.Q_ELEM_STORAGE_MGR.getLocalPart(), namespaceURI);
-        
-        // <wsrm:InMemoryStorageManager />
-        writer.writeStartElement(prefix, 
Sandesha2Constants.Assertions.Q_ELEM_INMEMORY_STORAGE_MGR.getLocalPart(), 
namespaceURI);
-        writer.writeCharacters(getInMemoryStorageManagerClass());
-        writer.writeEndElement();
-        
-        // <wsrm:PermanentStorageManager />
-        writer.writeStartElement(prefix, 
Sandesha2Constants.Assertions.Q_ELEM_PERMANENT_STORAGE_MGR.getLocalPart(), 
namespaceURI);
-        writer.writeCharacters(getPermanentStorageManagerClass());
-        writer.writeEndElement();        
-        
-        // </wsrm:StorageManager>
-        writer.writeEndElement();
-        
-        // <wsrm:SecurityManager />
-        writer.writeStartElement(prefix, 
Sandesha2Constants.Assertions.Q_ELEM_SEC_MGR.getLocalPart(), namespaceURI);
-        writer.writeCharacters(getSecurityManagerClass());
-        writer.writeEndElement();
-        
-        // <wsrm:MakeConnection>
-        writer.writeStartElement(prefix, 
Sandesha2Constants.Assertions.Q_ELEM_MAKE_CONNECTION.getLocalPart(), 
namespaceURI);
-        
-        // <wsrm:Enabled />
-        writer.writeStartElement(prefix, 
Sandesha2Constants.Assertions.Q_ELEM_ENABLED.getLocalPart(), namespaceURI);
-        writer.writeCharacters(Boolean.toString(isEnableMakeConnection()));
-        writer.writeEndElement();
-        
-        // <wsrm:UseRMAnonURI />
-        writer.writeStartElement(prefix, 
Sandesha2Constants.Assertions.Q_ELEM_USE_RM_ANON_URI.getLocalPart(), 
namespaceURI);
-        writer.writeCharacters(Boolean.toString(isEnableRMAnonURI()));
-        writer.writeEndElement();
-        
-        // </wsrm:MakeConnection>
-        writer.writeEndElement();
-        
-        // <wsrm:UseMessageSerialization />
-        writer.writeStartElement(prefix, 
Sandesha2Constants.Assertions.Q_ELEM_USE_SERIALIZATION.getLocalPart(), 
namespaceURI);
-        writer.writeCharacters(Boolean.toString(isUseMessageSerialization()));
-        writer.writeEndElement();
-
-        // </wsp:Policy>
-        writer.writeEndElement();
-
-        // </wsrm:RMAssertion>
-        writer.writeEndElement();
+        try {
+                       String localName = 
Sandesha2Constants.Assertions.Q_ELEM_RMASSERTION
+                               .getLocalPart();
+                       String namespaceURI = 
Sandesha2Constants.Assertions.Q_ELEM_RMASSERTION
+                               .getNamespaceURI();
+
+                       String prefix = writer.getPrefix(namespaceURI);
+                       if (prefix == null) {
+                           prefix = 
Sandesha2Constants.Assertions.Q_ELEM_RMASSERTION
+                                   .getPrefix();
+                           writer.setPrefix(prefix, namespaceURI);
+                       }
+
+                       // <wsrm:RMAssertion>
+                       writer.writeStartElement(prefix, localName, 
namespaceURI);
+                       // xmlns:wsrm=".."
+                       writer.writeNamespace(prefix, namespaceURI);
+
+                       String policyLocalName = 
Sandesha2Constants.Assertions.Q_ELEM_POLICY
+                               .getLocalPart();
+                       String policyNamespaceURI = 
Sandesha2Constants.Assertions.Q_ELEM_POLICY
+                               .getNamespaceURI();
+                       String wspPrefix = writer.getPrefix(policyNamespaceURI);
+
+                       if (wspPrefix == null) {
+                           wspPrefix = 
Sandesha2Constants.Assertions.Q_ELEM_POLICY.getPrefix();
+                           writer.writeNamespace(wspPrefix, 
policyNamespaceURI);
+                       }
+
+                       // <wsp:Policy>
+                       writer.writeStartElement(wspPrefix, policyLocalName, 
policyNamespaceURI);
+
+                       // <wsrm:AcknowledgementInterval />
+                       writer.writeStartElement(prefix, 
Sandesha2Constants.Assertions.Q_ELEM_ACK_INTERVAL.getLocalPart(), namespaceURI);
+                       
writer.writeCharacters(Long.toString(getAcknowledgementInterval()));
+                       writer.writeEndElement();
+                       
+                       // <wsrm:RetransmissionInterval />
+                       writer.writeStartElement(prefix, 
Sandesha2Constants.Assertions.Q_ELEM_RETRANS_INTERVAL.getLocalPart(), 
namespaceURI);
+                       
writer.writeCharacters(Long.toString(getRetransmissionInterval()));
+                       writer.writeEndElement();
+
+                       // <wsrm:MaximumRetransmissionCount />
+                       writer.writeStartElement(prefix, 
Sandesha2Constants.Assertions.Q_ELEM_MAX_RETRANS_COUNT.getLocalPart(), 
namespaceURI);
+                       
writer.writeCharacters(Long.toString(getMaximumRetransmissionCount()));
+                       writer.writeEndElement();
+                       
+                       // <wsrm:ExponentialBackoff />
+                       writer.writeStartElement(prefix, 
Sandesha2Constants.Assertions.Q_ELEM_EXP_BACKOFF.getLocalPart(), namespaceURI);
+                       
writer.writeCharacters(Boolean.toString(isExponentialBackoff()));
+                       writer.writeEndElement();
+                       
+                       // <wsrm:InactivityTimeout />
+                       writer.writeStartElement(prefix, 
Sandesha2Constants.Assertions.Q_ELEM_INACTIVITY_TIMEOUT.getLocalPart(), 
namespaceURI);
+                       
writer.writeCharacters(Long.toString(getInactivityTimeoutInterval()));
+                       writer.writeEndElement();
+                       
+                       // <wsrm:InactivityTimeoutMeasure />
+                       writer.writeStartElement(prefix, 
Sandesha2Constants.Assertions.Q_ELEM_INACTIVITY_TIMEOUT_MEASURES.getLocalPart(),
 namespaceURI);
+                       writer.writeCharacters(inactivityTimeoutMeasure);
+                       writer.writeEndElement();
+                       
+                       // <wsrm:InvokeInOrder />
+                       writer.writeStartElement(prefix, 
Sandesha2Constants.Assertions.Q_ELEM_INVOKE_INORDER.getLocalPart(), 
namespaceURI);
+                       writer.writeCharacters(Boolean.toString(isInOrder()));
+                       writer.writeEndElement();
+                       
+                       // <wsrm:MessageTypesToDrop />
+                       writer.writeStartElement(prefix, 
Sandesha2Constants.Assertions.Q_ELEM_MSG_TYPES_TO_DROP.getLocalPart(), 
namespaceURI);
+                       writer.writeCharacters("none"); // FIXME
+                       writer.writeEndElement();
+                       
+                       // <wsrm:StorageManagers>
+                       writer.writeStartElement(prefix, 
Sandesha2Constants.Assertions.Q_ELEM_STORAGE_MGR.getLocalPart(), namespaceURI);
+                       
+                       // <wsrm:InMemoryStorageManager />
+                       writer.writeStartElement(prefix, 
Sandesha2Constants.Assertions.Q_ELEM_INMEMORY_STORAGE_MGR.getLocalPart(), 
namespaceURI);
+                       
writer.writeCharacters(getInMemoryStorageManagerClass());
+                       writer.writeEndElement();
+                       
+                       // <wsrm:PermanentStorageManager />
+                       writer.writeStartElement(prefix, 
Sandesha2Constants.Assertions.Q_ELEM_PERMANENT_STORAGE_MGR.getLocalPart(), 
namespaceURI);
+                       
writer.writeCharacters(getPermanentStorageManagerClass());
+                       writer.writeEndElement();        
+                       
+                       // </wsrm:StorageManager>
+                       writer.writeEndElement();
+                       
+                       // <wsrm:SecurityManager />
+                       writer.writeStartElement(prefix, 
Sandesha2Constants.Assertions.Q_ELEM_SEC_MGR.getLocalPart(), namespaceURI);
+                       writer.writeCharacters(getSecurityManagerClass());
+                       writer.writeEndElement();
+                       
+                       // <wsrm:MakeConnection>
+                       writer.writeStartElement(prefix, 
Sandesha2Constants.Assertions.Q_ELEM_MAKE_CONNECTION.getLocalPart(), 
namespaceURI);
+                       
+                       // <wsrm:Enabled />
+                       writer.writeStartElement(prefix, 
Sandesha2Constants.Assertions.Q_ELEM_ENABLED.getLocalPart(), namespaceURI);
+                       
writer.writeCharacters(Boolean.toString(isEnableMakeConnection()));
+                       writer.writeEndElement();
+                       
+                       // <wsrm:UseRMAnonURI />
+                       writer.writeStartElement(prefix, 
Sandesha2Constants.Assertions.Q_ELEM_USE_RM_ANON_URI.getLocalPart(), 
namespaceURI);
+                       
writer.writeCharacters(Boolean.toString(isEnableRMAnonURI()));
+                       writer.writeEndElement();
+                       
+                       // </wsrm:MakeConnection>
+                       writer.writeEndElement();
+                       
+                       // <wsrm:UseMessageSerialization />
+                       writer.writeStartElement(prefix, 
Sandesha2Constants.Assertions.Q_ELEM_USE_SERIALIZATION.getLocalPart(), 
namespaceURI);
+                       
writer.writeCharacters(Boolean.toString(isUseMessageSerialization()));
+                       writer.writeEndElement();
+
+                       // <wsrm:EnforceRM />
+                       writer.writeStartElement(prefix, 
Sandesha2Constants.Assertions.Q_ELEM_ENFORCE_RM.getLocalPart(), namespaceURI);
+                       writer.writeCharacters(Boolean.toString(isEnforceRM()));
+                       writer.writeEndElement();
+                       
+                       // </wsp:Policy>
+                       writer.writeEndElement();
+
+                       // </wsrm:RMAssertion>
+                       writer.writeEndElement();
+               } catch (SandeshaException e) {
+                       throw new XMLStreamException (e);
+               }
 
     }
 
@@ -289,24 +326,47 @@
         return Constants.TYPE_ASSERTION;
     }
 
-    public boolean isExponentialBackoff() {
-        return exponentialBackoff;
+    public boolean isExponentialBackoff() throws SandeshaException {
+       if (isExponentialBackoffSet()) {
+               return exponentialBackoff;
+       } else if (parent!=null) {
+               return parent.isExponentialBackoff ();
+       } else {
+               String message = 
SandeshaMessageHelper.getMessage(SandeshaMessageKeys.policyHasNotBeenSet, 
Sandesha2Constants.Assertions.ELEM_EXP_BACKOFF);
+               throw new SandeshaException (message);
+       }
     }
 
     public void setExponentialBackoff(boolean exponentialBackoff) {
         this.exponentialBackoff = exponentialBackoff;
+        setExponentialBackoffSet(true);
     }
 
-    public long getRetransmissionInterval() {
-        return retransmissionInterval;
+    public long getRetransmissionInterval() throws SandeshaException {
+       if (isRetransmissionIntervalSet()) {
+               return retransmissionInterval;
+       } else if (parent!=null) {
+               return parent.getRetransmissionInterval();
+       } else {
+               String message = 
SandeshaMessageHelper.getMessage(SandeshaMessageKeys.policyHasNotBeenSet, 
Sandesha2Constants.Assertions.ELEM_RETRANS_INTERVAL);
+               throw new SandeshaException (message);
+       }
     }
 
     public void setRetransmissionInterval(long retransmissionInterval) {
         this.retransmissionInterval = retransmissionInterval;
+        setRetransmissionIntervalSet(true);
     }
 
-    public long getAcknowledgementInterval() {
-        return acknowledgementInterval;
+    public long getAcknowledgementInterval() throws SandeshaException {
+       if (isAcknowledgementIntervalSet()) {
+               return acknowledgementInterval;
+       } else if (parent!=null) {
+               return parent.getAcknowledgementInterval();
+       } else {
+               String message = 
SandeshaMessageHelper.getMessage(SandeshaMessageKeys.policyHasNotBeenSet, 
Sandesha2Constants.Assertions.ELEM_ACK_INTERVAL);
+               throw new SandeshaException (message);
+       }
     }
 
     public long getInactivityTimeoutInterval() {
@@ -319,6 +379,7 @@
 
     public void setInactiveTimeoutValue(long inactiveTimeoutValue) {
         this.inactiveTimeoutValue = inactiveTimeoutValue;
+        setInactiveTimeoutValueSet(true);
     }
 
     public void setInactivityTimeoutMeasure(String inactivityTimeoutMeasure) {
@@ -331,6 +392,7 @@
 
        public void setEnableMakeConnection(boolean enableMakeConnection) {
                this.enableMakeConnection = enableMakeConnection;
+               setEnableMakeConnectionSet(true);
        }
 
        public boolean isEnableRMAnonURI() {
@@ -339,14 +401,23 @@
 
        public void setEnableRMAnonURI(boolean enableRMAnonURI) {
                this.enableRMAnonURI = enableRMAnonURI;
+               setEnableRMAnonURISet(true);
        }
 
-       public boolean isUseMessageSerialization() {
-               return useMessageSerialization;
+       public boolean isUseMessageSerialization() throws SandeshaException {
+       if (isUseMessageSerializationSet ()) {
+               return useMessageSerialization;
+       } else if (parent!=null) {
+               return parent.isUseMessageSerialization();
+       } else {
+               String message = 
SandeshaMessageHelper.getMessage(SandeshaMessageKeys.policyHasNotBeenSet, 
Sandesha2Constants.Assertions.ELEM_USE_SERIALIZATION);
+               throw new SandeshaException (message);
+       }
        }
 
        public void setUseMessageSerialization(boolean useMessageSerialization) 
{
                this.useMessageSerialization = useMessageSerialization;
+               setUseMessageSerializationSet(true);
        }    
 
        public boolean equal(PolicyComponent policyComponent) {
@@ -354,4 +425,118 @@
         return false;
     }
 
+    public boolean isEnforceRM() throws SandeshaException {
+       if (isEnforceRMSet ()) {
+               return enforceRM;
+       } else if (parent!=null) {
+               return parent.isEnforceRM();
+       } else {
+               String message = 
SandeshaMessageHelper.getMessage(SandeshaMessageKeys.policyHasNotBeenSet, 
Sandesha2Constants.Assertions.ELEM_ENFORCE_RM);
+               throw new SandeshaException (message);
+       }
+       }
+
+       public void setEnforceRM(boolean enforceRM) {
+               this.enforceRM = enforceRM;
+               setEnforceRMSet(true);
+       }
+
+       protected boolean isAcknowledgementIntervalSet() {
+               return acknowledgementIntervalSet;
+       }
+
+       protected void setAcknowledgementIntervalSet(boolean 
acknowledgementIntervalSet) {
+               this.acknowledgementIntervalSet = acknowledgementIntervalSet;
+       }
+
+       protected boolean isEnableMakeConnectionSet() {
+               return enableMakeConnectionSet;
+       }
+
+       protected void setEnableMakeConnectionSet(boolean 
enableMakeConnectionSet) {
+               this.enableMakeConnectionSet = enableMakeConnectionSet;
+       }
+
+       protected boolean isEnableRMAnonURISet() {
+               return enableRMAnonURISet;
+       }
+
+       protected void setEnableRMAnonURISet(boolean enableRMAnonURISet) {
+               this.enableRMAnonURISet = enableRMAnonURISet;
+       }
+
+       protected boolean isEnforceRMSet() {
+               return enforceRMSet;
+       }
+
+       protected void setEnforceRMSet(boolean enforceRMSet) {
+               this.enforceRMSet = enforceRMSet;
+       }
+
+       protected boolean isExponentialBackoffSet() {
+               return exponentialBackoffSet;
+       }
+
+       protected void setExponentialBackoffSet(boolean exponentialBackoffSet) {
+               this.exponentialBackoffSet = exponentialBackoffSet;
+       }
+
+       protected boolean isInactiveTimeoutValueSet() {
+               return inactiveTimeoutValueSet;
+       }
+
+       protected void setInactiveTimeoutValueSet(boolean 
inactiveTimeoutValueSet) {
+               this.inactiveTimeoutValueSet = inactiveTimeoutValueSet;
+       }
+
+       protected boolean isInactivityTimeoutIntervalSet() {
+               return inactivityTimeoutIntervalSet;
+       }
+
+       protected void setInactivityTimeoutIntervalSet(
+                       boolean inactivityTimeoutIntervalSet) {
+               this.inactivityTimeoutIntervalSet = 
inactivityTimeoutIntervalSet;
+       }
+
+       protected boolean isInOrderSet() {
+               return inOrderSet;
+       }
+
+       protected void setInOrderSet(boolean inOrderSet) {
+               this.inOrderSet = inOrderSet;
+       }
+
+       protected boolean isMaximumRetransmissionCountSet() {
+               return maximumRetransmissionCountSet;
+       }
+
+       protected void setMaximumRetransmissionCountSet(
+                       boolean maximumRetransmissionCountSet) {
+               this.maximumRetransmissionCountSet = 
maximumRetransmissionCountSet;
+       }
+
+       protected boolean isRetransmissionIntervalSet() {
+               return retransmissionIntervalSet;
+       }
+
+       protected void setRetransmissionIntervalSet(boolean 
retransmissionIntervalSet) {
+               this.retransmissionIntervalSet = retransmissionIntervalSet;
+       }
+
+       protected boolean isUseMessageSerializationSet() {
+               return useMessageSerializationSet;
+       }
+
+       protected void setUseMessageSerializationSet(boolean 
useMessageSerializationSet) {
+               this.useMessageSerializationSet = useMessageSerializationSet;
+       }
+
+       public SandeshaPolicyBean getParent() {
+               return parent;
+       }
+
+       public void setParent(SandeshaPolicyBean parent) {
+               this.parent = parent;
+       }
+       
 }

Modified: 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/policy/builders/RMAssertionBuilder.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/policy/builders/RMAssertionBuilder.java?view=diff&rev=503447&r1=503446&r2=503447
==============================================================================
--- 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/policy/builders/RMAssertionBuilder.java
 (original)
+++ 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/policy/builders/RMAssertionBuilder.java
 Sun Feb  4 09:47:18 2007
@@ -151,6 +151,9 @@
             } else if 
(Sandesha2Constants.Assertions.ELEM_USE_SERIALIZATION.equals(name)) {
                String value = element.getText().trim();
                
propertyBean.setUseMessageSerialization(Boolean.valueOf(value).booleanValue());
+            } else if 
(Sandesha2Constants.Assertions.ELEM_ENFORCE_RM.equals(name)) {
+               String value = element.getText().trim();
+               propertyBean.setEnforceRM 
(Boolean.valueOf(value).booleanValue());
             }
         }
     }

Modified: 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/MessageRetransmissionAdjuster.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/MessageRetransmissionAdjuster.java?view=diff&rev=503447&r1=503446&r2=503447
==============================================================================
--- 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/MessageRetransmissionAdjuster.java
 (original)
+++ 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/MessageRetransmissionAdjuster.java
 Sun Feb  4 09:47:18 2007
@@ -104,7 +104,7 @@
         * @param policyBean
         * @return
         */
-       private static SenderBean adjustNextRetransmissionTime(SenderBean 
retransmitterBean, SandeshaPolicyBean propertyBean) {
+       private static SenderBean adjustNextRetransmissionTime(SenderBean 
retransmitterBean, SandeshaPolicyBean propertyBean) throws SandeshaException {
 
                // long lastSentTime = retransmitterBean.getTimeToSend();
 

Modified: 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/PropertyManager.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/PropertyManager.java?view=diff&rev=503447&r1=503446&r2=503447
==============================================================================
--- 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/PropertyManager.java
 (original)
+++ 
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/PropertyManager.java
 Sun Feb  4 09:47:18 2007
@@ -67,6 +67,8 @@
                
propertyBean.setEnableMakeConnection(Sandesha2Constants.Properties.DefaultValues.EnableMakeConnection);
                
propertyBean.setEnableRMAnonURI(Sandesha2Constants.Properties.DefaultValues.EnableRMAnonURI);
                
propertyBean.setUseMessageSerialization(Sandesha2Constants.Properties.DefaultValues.UseMessageSerialization);
+               
propertyBean.setEnforceRM(Sandesha2Constants.Properties.DefaultValues.enforceRM);
+               
                return propertyBean;
        }
 
@@ -227,69 +229,7 @@
         }
         
         propertyBean = (SandeshaPolicyBean) assertion;
-        
-//             RMPolicyProcessor processor = new RMPolicyProcessor();
-//
-//             try {
-//                     processor.setup();
-//             } catch (NoSuchMethodException e) {
-//                     throw new SandeshaException(e);
-//             }
-//
-//             processor.processPolicy(policy);
-//
-//             RMProcessorContext ctx = processor.getContext();
-//             PolicyEngineData data = ctx.readCurrentPolicyEngineData();
-//
-//             if (data.isAcknowledgementIntervalSet())
-//                     
propertyBean.setAcknowledgementInterval(data.getAcknowledgementInterval());
-//             else
-//                     
propertyBean.setAcknowledgementInterval(parentPropertyBean.getAcknowledgementInterval());
-//
-//             if (data.isExponentialBackoffSet())
-//                     
propertyBean.setExponentialBackoff(data.isExponentialBackoff());
-//             else
-//                     
propertyBean.setExponentialBackoff(parentPropertyBean.isExponentialBackoff());
-//
-//             // Inactivity timeout given in the policy will affect only if 
it gives
-//             // both the measure and the value.
-//             // Otherwise value will be taken from the parent.
-//             if (data.isInactivityTimeoutSet() && 
data.isInactivityTimeoutMeassureSet())
-//                     
propertyBean.setInactiveTimeoutInterval(data.getInactivityTimeout(), 
data.getInactivityTimeoutMeassure());
-//             else
-//                     
propertyBean.setInactiveTimeoutInterval(parentPropertyBean.getInactiveTimeoutInterval());
-//
-//             if (data.isInvokeInOrderSet())
-//                     propertyBean.setInOrder(data.isInvokeInOrder());
-//             else
-//                     propertyBean.setInOrder(parentPropertyBean.isInOrder());
-//
-//             if (data.isMaximumRetransmissionCountSet())
-//                     
propertyBean.setMaximumRetransmissionCount(data.getMaximumRetransmissionCount());
-//             else
-//                     
propertyBean.setMaximumRetransmissionCount(parentPropertyBean.getMaximumRetransmissionCount());
-//
-//             if (data.isRetransmissionIntervalSet())
-//                     
propertyBean.setRetransmissionInterval(data.getRetransmissionInterval());
-//             else
-//                     
propertyBean.setRetransmissionInterval(parentPropertyBean.getRetransmissionInterval());
-//
-//             if (data.isInMemoryStorageManagerSet())
-//                     
propertyBean.setInMemoryStorageManagerClass(data.getInMemoryStorageManager());
-//             else
-//                     
propertyBean.setInMemoryStorageManagerClass(data.getInMemoryStorageManager());
-//
-//             if (data.isPermanentStorageManagerSet())
-//                     
propertyBean.setPermanentStorageManagerClass(data.getPermanentStorageManager());
-//             else
-//                     
propertyBean.setPermanentStorageManagerClass(data.getPermanentStorageManager());
-//
-//             if (data.isMessageTypesToDropSet())
-//                     loadMessageTypesToDrop(data.getMessageTypesToDrop(), 
propertyBean);
-//             else
-//                     
propertyBean.setMsgTypesToDrop(parentPropertyBean.getMsgTypesToDrop());
-//
-//             propertyBean.setSecurityManagerClass(data.getSecurityManager());
+        propertyBean.setParent(parentPropertyBean);
 
                return propertyBean;
        }
@@ -315,7 +255,7 @@
         
         boolean found = false;
         
-        for (Iterator assertions = assertionList.iterator(); 
iterator.hasNext();) {
+        for (Iterator assertions = assertionList.iterator(); 
assertions.hasNext();) {
             assertion = (Assertion) assertions.next();
             
             if (assertion instanceof SandeshaPolicyBean) {
@@ -330,76 +270,16 @@
         }
         
         propertyBean = (SandeshaPolicyBean) assertion;
-//
-//             RMPolicyProcessor processor = new RMPolicyProcessor();
-//
-//             try {
-//                     processor.setup();
-//             } catch (NoSuchMethodException e) {
-//                     throw new SandeshaException(e.getMessage());
-//             }
-//
-//             processor.processPolicy(policy);
-//
-//             RMProcessorContext ctx = processor.getContext();
-//             PolicyEngineData data = ctx.readCurrentPolicyEngineData();
-//
-//             if (data.isAcknowledgementIntervalSet())
-//                     
propertyBean.setAcknowledgementInterval(data.getAcknowledgementInterval());
-//             else
-//                     
propertyBean.setAcknowledgementInterval(parentPropertyBean.getAcknowledgementInterval());
-//
-//             if (data.isExponentialBackoffSet())
-//                     
propertyBean.setExponentialBackoff(data.isExponentialBackoff());
-//             else
-//                     
propertyBean.setExponentialBackoff(parentPropertyBean.isExponentialBackoff());
-//
-//             // Inactivity timeout given in the policy will affect only if 
it gives
-//             // both the measure and the value.
-//             // Otherwise value will be taken from the parent.
-//             if (data.isInactivityTimeoutSet() && 
data.isInactivityTimeoutMeassureSet())
-//                     
propertyBean.setInactiveTimeoutInterval(data.getInactivityTimeout(), 
data.getInactivityTimeoutMeassure());
-//             else
-//                     
propertyBean.setInactiveTimeoutInterval(parentPropertyBean.getInactiveTimeoutInterval());
-//
-//             if (data.isInvokeInOrderSet())
-//                     propertyBean.setInOrder(data.isInvokeInOrder());
-//             else
-//                     propertyBean.setInOrder(parentPropertyBean.isInOrder());
-//
-//             if (data.isMaximumRetransmissionCountSet())
-//                     
propertyBean.setMaximumRetransmissionCount(data.getMaximumRetransmissionCount());
-//             else
-//                     
propertyBean.setMaximumRetransmissionCount(parentPropertyBean.getMaximumRetransmissionCount());
-//
-//             if (data.isRetransmissionIntervalSet())
-//                     
propertyBean.setRetransmissionInterval(data.getRetransmissionInterval());
-//             else
-//                     
propertyBean.setRetransmissionInterval(parentPropertyBean.getRetransmissionInterval());
-//
-//             // if (data.isStorageManagerSet())
-//             // 
propertyBean.setStorageManagerClass(data.getStorageManager());
-//             // else
-//             // 
propertyBean.setStorageManagerClass(data.getStorageManager());
-//
-//             if (data.isInMemoryStorageManagerSet())
-//                     
propertyBean.setInMemoryStorageManagerClass(data.getInMemoryStorageManager());
-//             else
-//                     
propertyBean.setInMemoryStorageManagerClass(data.getInMemoryStorageManager());
-//
-//             if (data.isPermanentStorageManagerSet())
-//                     
propertyBean.setPermanentStorageManagerClass(data.getPermanentStorageManager());
-//             else
-//                     
propertyBean.setPermanentStorageManagerClass(data.getPermanentStorageManager());
-//
-//             if (data.isMessageTypesToDropSet())
-//                     loadMessageTypesToDrop(data.getMessageTypesToDrop(), 
propertyBean);
-//             else
-//                     
propertyBean.setMsgTypesToDrop(parentPropertyBean.getMsgTypesToDrop());
-//
-//             propertyBean.setSecurityManagerClass(data.getSecurityManager());
-               
-               return propertyBean;
+        
+        if (propertyBean!=parentPropertyBean) {
+               propertyBean.setParent(parentPropertyBean);
+               return propertyBean;
+        } else {
+               //propertyBean and parent being the same object means that 
there is no policy in this level, this is simply the reflection of 
+               //the parent.
+               return null;
+        }
+        
        }
 
        public static void reloadFromPropertyFile(InputStream stream) throws 
SandeshaException {
@@ -492,19 +372,6 @@
                }
        }
 
-       // /**
-       // * Loads the StorageManager class name.
-       // *
-       // * @param properties
-       // */
-       // private static void loadStoragemanagerClass(String 
storageMgrClassStr,
-       // SandeshaPropertyBean propertyBean) throws SandeshaException {
-       // if (storageMgrClassStr != null) {
-       // storageMgrClassStr = storageMgrClassStr.trim();
-       // propertyBean.setStorageManagerClass(storageMgrClassStr);
-       // }
-       // }
-
        /**
         * Loads the InMemoryStorageManager class name.
         * 
@@ -604,5 +471,5 @@
                        
propertyBean.setSecurityManagerClass(securityManagerClassStr);
                }
        }
-
+       
 }

Modified: 
webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/PropertyLoaderTest.java
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/PropertyLoaderTest.java?view=diff&rev=503447&r1=503446&r2=503447
==============================================================================
--- 
webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/PropertyLoaderTest.java
 (original)
+++ 
webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/PropertyLoaderTest.java
 Sun Feb  4 09:47:18 2007
@@ -46,17 +46,17 @@
                
        }
        
-       public void testRetransmissionInterval () {
+       public void testRetransmissionInterval () throws SandeshaException {
                long value = propertyBean.getRetransmissionInterval();
                assertEquals(value,20000);
        }
        
-       public void testExponentialBackOff () {
+       public void testExponentialBackOff () throws SandeshaException {
                boolean value = propertyBean.isExponentialBackoff();
                assertEquals(value,false);
        }
        
-       public void testAcknowledgementInterval () {
+       public void testAcknowledgementInterval () throws SandeshaException {
                long value = propertyBean.getAcknowledgementInterval();
                assertEquals(value,8000);
        }



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to