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 ja...@apache.org on 2005/03/04 11:52:19 UTC

cvs commit: ws-fx/sandesha/src .project

jaliya      2005/03/04 02:52:19

  Modified:    sandesha/config server-config.wsdd
               sandesha/src/org/apache/sandesha Constants.java
               sandesha/src/org/apache/sandesha/server Sender.java
               sandesha/src/org/apache/sandesha/ws/rm/handlers
                        RMServerRequestHandler.java
               sandesha/src/org/apache/sandesha/ws/rm/providers
                        RMProvider.java
  Removed:     sandesha/src .project
  Log:
  Now the RMProvider can be configured to ignore wsa:actions, so if the user needs some actions not be considered by RM then they can add a list of actions to the server-config.wsdd as service properties
  
  Revision  Changes    Path
  1.3       +5 -1      ws-fx/sandesha/config/server-config.wsdd
  
  Index: server-config.wsdd
  ===================================================================
  RCS file: /home/cvs/ws-fx/sandesha/config/server-config.wsdd,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- server-config.wsdd	2 Mar 2005 03:16:30 -0000	1.2
  +++ server-config.wsdd	4 Mar 2005 10:52:19 -0000	1.3
  @@ -30,6 +30,7 @@
     <parameter name="allowedMethods" value="getVersion"/>
     <parameter name="className" value="org.apache.axis.Version"/>
    </service>
  +
    <service name="RMInteropService" provider="Handler">
     <requestFlow>
      <handler type="java:org.apache.sandesha.ws.rm.handlers.RMServerRequestHandler"/>
  @@ -39,7 +40,10 @@
     <parameter name="scope" value="request"/>
     <parameter name="className" value="org.apache.sandesha.samples.interop.RMInteropService"/>
     <parameter name="handlerClass" value="org.apache.sandesha.ws.rm.providers.RMProvider"/>
  - </service>
  +  <parameter name="ignoreAction1" value="http://schemas.xmlsoap.org/ws/2005/02/trust/RST/SCT"/>
  +  </service>
  +
  +
    <transport name="http">
     <requestFlow>
      <handler type="URLMapper"/>
  
  
  
  1.33      +3 -0      ws-fx/sandesha/src/org/apache/sandesha/Constants.java
  
  Index: Constants.java
  ===================================================================
  RCS file: /home/cvs/ws-fx/sandesha/src/org/apache/sandesha/Constants.java,v
  retrieving revision 1.32
  retrieving revision 1.33
  diff -u -r1.32 -r1.33
  --- Constants.java	28 Feb 2005 13:25:53 -0000	1.32
  +++ Constants.java	4 Mar 2005 10:52:19 -0000	1.33
  @@ -167,6 +167,9 @@
        */
       public static final String RM_SEQUENCE_ACKNOWLEDMENT_ACTION = "http://schemas.xmlsoap.org/ws/2004/03/rm/SequenceAcknowledgement";
   
  +    public static final String IGNORE_ACTION="ignoreAction";
  +       
  +
       public int SERVER_QUEUE_ACCESSOR = 1;
   
       public int SERVER_DATABASE_ACCESSOR = 2;
  
  
  
  1.29      +21 -1     ws-fx/sandesha/src/org/apache/sandesha/server/Sender.java
  
  Index: Sender.java
  ===================================================================
  RCS file: /home/cvs/ws-fx/sandesha/src/org/apache/sandesha/server/Sender.java,v
  retrieving revision 1.28
  retrieving revision 1.29
  diff -u -r1.28 -r1.29
  --- Sender.java	4 Mar 2005 07:56:56 -0000	1.28
  +++ Sender.java	4 Mar 2005 10:52:19 -0000	1.29
  @@ -48,6 +48,26 @@
       public boolean running = true;
       private IStorageManager storageManager;
   
  +    private static  SimpleChain requestChain=null;
  +
  +    public static SimpleChain getRequestChain() {
  +        return requestChain;
  +    }
  +
  +    public static void setRequestChain(SimpleChain requestChain) {
  +        Sender.requestChain = requestChain;
  +    }
  +
  +    public static SimpleChain getResponseChanin() {
  +        return responseChanin;
  +    }
  +
  +    public static void setResponseChanin(SimpleChain responseChanin) {
  +        Sender.responseChanin = responseChanin;
  +    }
  +
  +    private static  SimpleChain responseChanin=null;
  +
       public Sender() {
           storageManager = new ServerStorageManager();
       }
  @@ -206,7 +226,7 @@
          // sc.addHandler(addressingHandler);
           //sc.addHandler(serverRequestHandler);
   
  -        //call.setClientHandlers(null, sc);
  +        call.setClientHandlers(requestChain,responseChanin);
   
           if (rmMessageContext.getMsgContext().getRequestMessage() != null) {
               String soapMsg = rmMessageContext.getMsgContext().getRequestMessage().getSOAPPartAsString();
  
  
  
  1.16      +1 -1      ws-fx/sandesha/src/org/apache/sandesha/ws/rm/handlers/RMServerRequestHandler.java
  
  Index: RMServerRequestHandler.java
  ===================================================================
  RCS file: /home/cvs/ws-fx/sandesha/src/org/apache/sandesha/ws/rm/handlers/RMServerRequestHandler.java,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- RMServerRequestHandler.java	4 Mar 2005 07:56:57 -0000	1.15
  +++ RMServerRequestHandler.java	4 Mar 2005 10:52:19 -0000	1.16
  @@ -48,7 +48,7 @@
           try {
               RMHeaders rmHeaders = new RMHeaders();
               rmHeaders.fromSOAPEnvelope(msgContext.getRequestMessage().getSOAPEnvelope());
  -
  +           
           } catch (SOAPException e) {
               throw AxisFault.makeFault(e);
           } catch (Exception e) {
  
  
  
  1.38      +89 -45    ws-fx/sandesha/src/org/apache/sandesha/ws/rm/providers/RMProvider.java
  
  Index: RMProvider.java
  ===================================================================
  RCS file: /home/cvs/ws-fx/sandesha/src/org/apache/sandesha/ws/rm/providers/RMProvider.java,v
  retrieving revision 1.37
  retrieving revision 1.38
  diff -u -r1.37 -r1.38
  --- RMProvider.java	28 Feb 2005 13:26:09 -0000	1.37
  +++ RMProvider.java	4 Mar 2005 10:52:19 -0000	1.38
  @@ -19,10 +19,12 @@
   import org.apache.axis.AxisFault;
   import org.apache.axis.MessageContext;
   import org.apache.axis.components.logger.LogFactory;
  +import org.apache.axis.handlers.soap.SOAPService;
   import org.apache.axis.message.SOAPEnvelope;
   import org.apache.axis.message.addressing.AddressingHeaders;
   import org.apache.axis.providers.java.RPCProvider;
   import org.apache.commons.logging.Log;
  +import org.apache.sandesha.Constants;
   import org.apache.sandesha.IStorageManager;
   import org.apache.sandesha.RMInitiator;
   import org.apache.sandesha.RMMessageContext;
  @@ -33,6 +35,11 @@
   import org.apache.sandesha.storage.dao.SandeshaQueueDAO;
   import org.apache.sandesha.ws.rm.RMHeaders;
   
  +import java.util.ArrayList;
  +import java.util.Hashtable;
  +import java.util.Iterator;
  +import java.util.List;
  +
   /**
    * class RMProvider
    *
  @@ -51,61 +58,67 @@
               throws Exception {
   
           RMProvider.log.info("RMProvider Received a SOAP REQUEST");
  -
  -
  -        IStorageManager storageManager = RMInitiator.init(client);
  -        storageManager.init();
  -
  -        RMMessageContext rmMessageContext = new RMMessageContext();
  -        rmMessageContext.setMsgContext(msgContext);
  -        try {
  -            MessageValidator.validate(rmMessageContext, client);
  -        } catch (AxisFault af) {
  -            FaultProcessor faultProcessor = new FaultProcessor(storageManager, af);
  -
  -            if (!faultProcessor.processMessage(rmMessageContext)) {
  -                msgContext.setResponseMessage(null);
  +        //Some actions may need to be ignored. e.g.  http://schemas.xmlsoap.org/ws/2005/02/trust/RST/SCT
  +        //user can specify them in the server-config.wsdd as parameters to the service
  +        //parameter names should be in  ignoreAction1, ignoreAction2 format.
  +
  +        if (isIgnorableMessage(msgContext)) {
  +            RPCProvider rpcProvider = new RPCProvider();
  +            rpcProvider.invoke(msgContext);
  +
  +        } else {
  +
  +            IStorageManager storageManager = RMInitiator.init(client);
  +            storageManager.init();
  +
  +            RMMessageContext rmMessageContext = new RMMessageContext();
  +            rmMessageContext.setMsgContext(msgContext);
  +            try {
  +                MessageValidator.validate(rmMessageContext, client);
  +            } catch (AxisFault af) {
  +                FaultProcessor faultProcessor = new FaultProcessor(storageManager, af);
  +
  +                if (!faultProcessor.processMessage(rmMessageContext)) {
  +                    msgContext.setResponseMessage(null);
  +                    return;
  +                }
                   return;
               }
  -            return;
  -        }
   
  -        RMHeaders rmHeaders = rmMessageContext.getRMHeaders();
  -        AddressingHeaders addrHeaders = rmMessageContext.getAddressingHeaders();
  +            RMHeaders rmHeaders = rmMessageContext.getRMHeaders();
  +            AddressingHeaders addrHeaders = rmMessageContext.getAddressingHeaders();
   
  -        if (null != rmHeaders.getSequence()) {
  -            rmMessageContext.setSequenceID(rmHeaders.getSequence().getIdentifier().toString());
  -            if (null != rmHeaders.getSequence().getLastMessage()) {
  -                rmMessageContext.setLastMessage(true);
  +            if (null != rmHeaders.getSequence()) {
  +                rmMessageContext.setSequenceID(rmHeaders.getSequence().getIdentifier().toString());
  +                if (null != rmHeaders.getSequence().getLastMessage()) {
  +                    rmMessageContext.setLastMessage(true);
  +                }
               }
  -        }
  -
  -        rmMessageContext.setMessageID(addrHeaders.getMessageID().toString());
  -        IRMMessageProcessor rmMessageProcessor = RMMessageProcessorIdentifier.getMessageProcessor(rmMessageContext, storageManager);
   
  -        try {
  -            if (!rmMessageProcessor.processMessage(rmMessageContext)) {
  -                msgContext.setResponseMessage(null);
  -            } else {
  -                // TODO Get the from envecreator
  -                
  -                // SOAPEnvelope resEn=EnvelopeCreator.createAcknowledgementEnvelope()
  -            }
  -        } catch (AxisFault af) {
  -            RMProvider.log.error(af);
  +            rmMessageContext.setMessageID(addrHeaders.getMessageID().toString());
  +            IRMMessageProcessor rmMessageProcessor = RMMessageProcessorIdentifier.getMessageProcessor(rmMessageContext, storageManager);
   
  -            FaultProcessor faultProcessor = new FaultProcessor(storageManager, af);
  -
  -            if (!faultProcessor.processMessage(rmMessageContext)) {
  -                msgContext.setResponseMessage(null);
  +            try {
  +                if (!rmMessageProcessor.processMessage(rmMessageContext)) {
  +                    msgContext.setResponseMessage(null);
  +                } else {
  +                    // TODO Get the from envecreator
  +
  +                    // SOAPEnvelope resEn=EnvelopeCreator.createAcknowledgementEnvelope()
  +                }
  +            } catch (AxisFault af) {
  +                RMProvider.log.error(af);
  +
  +                FaultProcessor faultProcessor = new FaultProcessor(storageManager, af);
  +
  +                if (!faultProcessor.processMessage(rmMessageContext)) {
  +                    msgContext.setResponseMessage(null);
  +                    return;
  +                }
                   return;
               }
  -            return;
  +
           }
  -        
  -//        SandeshaQueue sq = SandeshaQueue.getInstance();
  -//        sq.displayIncomingMap();
  -//        sq.displayOutgoingMap();
       }
   
       //This is used by the Client to set the
  @@ -114,4 +127,35 @@
           this.client = client;
       }
   
  +    private boolean isIgnorableMessage(MessageContext msgContext) throws Exception {
  +        boolean result = false;
  +        AddressingHeaders addrH = new AddressingHeaders(msgContext.getRequestMessage().getSOAPEnvelope());
  +        List lst = getIgnorableActions(msgContext);
  +        if (lst != null && addrH.getAction() != null) {
  +            Iterator ite = lst.iterator();
  +            while (ite.hasNext()) {
  +                String str = (String) ite.next();
  +                if (str.equals(addrH.getAction().toString()))
  +                    result = true;
  +            }
  +        }
  +
  +        return result;
  +    }
  +
  +    private List getIgnorableActions(MessageContext msgContext) {
  +        SOAPService soapService = msgContext.getService();
  +        Hashtable options = soapService.getOptions();
  +        Iterator ite = options.keySet().iterator();
  +        List actionList = new ArrayList();
  +        while (ite.hasNext()) {
  +            String key = (String) ite.next();
  +
  +            if (key.regionMatches(0,Constants.IGNORE_ACTION,0,Constants.IGNORE_ACTION.length()))
  +                actionList.add(options.get(key));
  +        }
  +
  +        return actionList;
  +    }
  +
   }
  \ No newline at end of file