User: juha    
  Date: 01/01/14 07:23:12

  Modified:    src/java/org/spydermq/selectors Selector.java
  Log:
  Missing feature impl:  selectors ignored message header
  fields as identifiers. With this fix selectors like
  "JMSType='foobar'" should work correctly.
  
  Revision  Changes    Path
  1.4       +32 -5     spyderMQ/src/java/org/spydermq/selectors/Selector.java
  
  Index: Selector.java
  ===================================================================
  RCS file: 
/products/cvs/ejboss/spyderMQ/src/java/org/spydermq/selectors/Selector.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- Selector.java     2000/12/29 22:24:42     1.3
  +++ Selector.java     2001/01/14 15:23:12     1.4
  @@ -16,8 +16,9 @@
    * This class implements a Message Selector. 
    *      
    *   @author Norbert Lataille ([EMAIL PROTECTED])
  - * 
  - *   @version $Revision: 1.3 $
  + *  @author Juha Lindfors ([EMAIL PROTECTED])
  + *
  + *   @version $Revision: 1.4 $
    */
   public class Selector
   {
  @@ -43,6 +44,7 @@
   
        public boolean test(SpyMessage mes) throws JMSException 
        {
  +        
                try {
                
                        //Set the identifiers values
  @@ -51,8 +53,12 @@
                        while (i.hasNext())
                        {
                                Identifier id=(Identifier)i.next();
  -                                                     
  +                     
                                Object find=mes.getObjectProperty(id.name);
  +                
  +                if (find == null) 
  +                    find = getHeaderFieldReferences(mes, id.name);
  +
                                if (find==null) {
                                        Log.log("Warning : missing property "+id.name);
                                        id.value=null;
  @@ -67,7 +73,7 @@
                                        //Log.notice("SEL:"+id.name+" =>"+id.value);
                                }
                        }
  -                             
  +
                        //Compute the result of this operator
                        Object res;
                
  @@ -76,7 +82,7 @@
                        } else if (result.getClass().equals(Operator.class)) {
                                res=((Operator)result).apply();
                        } else res=result;
  -             
  +
                        if (res==null) return false;
                        if (!(res.getClass().equals(Boolean.class))) 
                            throw new Exception("Bad object type");
  @@ -90,4 +96,25 @@
                }
        }
        
  +    // [JPL]
  +    private Object getHeaderFieldReferences(SpyMessage msg, String idName) throws 
JMSException {
  +        
  +        // JMS 3.8.1.1 -- Message header field references are restricted to:
  +        //                JMSDeliveryMode, JMSPriority, JMSMessageID,
  +        //                JMSTimeStamp, JMSCorrelationID and JMSType
  +        if (idName.equals("JMSDeliveryMode"))
  +            return new Integer(msg.getJMSDeliveryMode());
  +        else if (idName.equals("JMSPriority"))
  +            return new Integer(msg.getJMSPriority());
  +        else if (idName.equals("JMSMessageID"))
  +            return msg.getJMSMessageID();
  +        else if (idName.equals("JMSTimestamp"))
  +            return new Long(msg.getJMSTimestamp());
  +        else if (idName.equals("JMSCorrelationID"))
  +            return new Integer(msg.getJMSCorrelationID());
  +        else if (idName.equals("JMSType"))
  +            return msg.getJMSType();
  +        else 
  +            return null;    
  +    }
   }
  
  
  

Reply via email to