You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by gd...@apache.org on 2001/02/08 23:09:15 UTC

cvs commit: xml-axis/java/src/org/apache/axis/server SimpleAxisEngine.java

gdaniels    01/02/08 14:09:15

  Modified:    java/src/org/apache/axis/server SimpleAxisEngine.java
  Log:
  Use MC_TARGET to dispatch, not MC_HTTP_SOAPACTION.
  
  Revision  Changes    Path
  1.12      +75 -101   xml-axis/java/src/org/apache/axis/server/SimpleAxisEngine.java
  
  Index: SimpleAxisEngine.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/server/SimpleAxisEngine.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- SimpleAxisEngine.java	2001/02/07 13:52:06	1.11
  +++ SimpleAxisEngine.java	2001/02/08 22:09:11	1.12
  @@ -66,108 +66,82 @@
   /**
    *
    * @author Doug Davis (dug@us.ibm.com)
  + * @author Glen Daniels (gdaniels@allaire.com)
    */
  -public class SimpleAxisEngine implements Handler {
  -  /**
  -   * This entry point into the SOAP server 
  -   */
  -  protected Hashtable options ;
  -
  -  /**
  -   * Find/load the registries and save them so we don't need to do this
  -   * each time we're called.
  -   */
  -  public void init() {
  -    // Load the simple handler registry and init it
  -    Debug.Print( 1, "Enter: SimpleAxisEngine::init" );
  -    HandlerRegistry  hr = new SimpleHandlerRegistry();
  -    hr.init();
  -    addOption( Constants.HANDLER_REGISTRY, hr );
  -
  -    // Load the simple deployed services registry and init it
  -    HandlerRegistry  sr = new SimpleServiceRegistry();
  -    sr.init();
  -    addOption( Constants.SERVICE_REGISTRY, sr );
  -    Debug.Print( 1, "Exit: SimpleAxisEngine::init" );
  -  }
  -
  -  public void cleanup() {
  -  };
  -
  -  /**
  -   * Main routine of the AXIS server.  In short we locate the appropriate
  -   * handler for the desired service and invoke() it.
  -   */
  -  public void invoke(MessageContext msgContext) throws AxisFault {
  -    Debug.Print( 1, "Enter: SimpleAxisEngine::invoke" );
  -    HandlerRegistry hr = (HandlerRegistry)getOption(Constants.HANDLER_REGISTRY);
  -    HandlerRegistry sr = (HandlerRegistry)getOption(Constants.SERVICE_REGISTRY);
  -
  -    /* The target web-server should be place in the MC_HTTP_SOAPACTION     */
  -    /* entry in the bag of the msgContext object.  If it's not there we    */
  -    /* need to scan the incoming message to find it.                       */
  -    /***********************************************************************/
  -    String action = (String) msgContext.getProperty( Constants.MC_HTTP_SOAPACTION );
  -    if ( action == null ) action = "EchoService" ; // Temporary - need 2 scan
  -
  -    Handler h = sr.find( action );
  -
  -    if ( h == null ) {
  -      Debug.Print( 1, "No service found by name: " + action );
  -      throw new AxisFault( "Server.NoSuchService",
  -                           "Service '" + action + "' was not found",
  -                           null, null );
  +public class SimpleAxisEngine extends BasicHandler {
  +    /**
  +     * Find/load the registries and save them so we don't need to do this
  +     * each time we're called.
  +     */
  +    public void init() {
  +        // Load the simple handler registry and init it
  +        Debug.Print( 1, "Enter: SimpleAxisEngine::init" );
  +        HandlerRegistry  hr = new SimpleHandlerRegistry();
  +        hr.init();
  +        addOption( Constants.HANDLER_REGISTRY, hr );
  +
  +        // Load the simple deployed services registry and init it
  +        HandlerRegistry  sr = new SimpleServiceRegistry();
  +        sr.init();
  +        addOption( Constants.SERVICE_REGISTRY, sr );
  +        Debug.Print( 1, "Exit: SimpleAxisEngine::init" );
       }
   
  -    /* Place in the bag so that handlers down the line can have access to */
  -    /* it - ie. can look thru it's list of options                        */
  -    /**********************************************************************/
  -    msgContext.setProperty( Constants.MC_SVC_HANDLER, h );
  -
  -    h.init();   // ???
  -    try {
  -      h.invoke( msgContext );
  -    }
  -    catch( Exception e ) {
  -      // Should we even bother catching it ?
  -      if ( !(e instanceof AxisFault) ) e = new AxisFault( e );
  -      throw (AxisFault) e ;
  -    }
  -    h.cleanup();   // ???
  -    Debug.Print( 1, "Exit: SimpleAxisEngine::invoke" );
  -  };
  -
  -  public void undo(MessageContext msgContext) {
  -  };
  -
  -  public boolean canHandleBlock(QName qname) {
  -    return( false );
  -  };
  - 
  -  /**
  -   * Add the given option (name/value) to this handler's bag of options
  -   */
  -  public void addOption(String name, Object value) {
  -    if ( options == null ) options = new Hashtable();
  -    options.put( name, value );
  -  }
  -
  -  /**
  -   * Returns the option corresponding to the 'name' given
  -   */
  -  public Object getOption(String name) {
  -    if ( options == null ) return( null );
  -    return( options.get(name) );
  -  }
  -
  -  /**
  -   * Return the entire list of options
  -   */
  -  public Hashtable getOptions() {
  -    return( options );
  -  }
  -  
  -  public void setOptions(Hashtable opts) {
  -    options = opts ;
  -  }
  +    /**
  +     * Main routine of the AXIS server.  In short we locate the appropriate
  +     * handler for the desired service and invoke() it.
  +     */
  +    public void invoke(MessageContext msgContext) throws AxisFault {
  +        Debug.Print( 1, "Enter: SimpleAxisEngine::invoke" );
  +        HandlerRegistry hr = (HandlerRegistry)getOption(Constants.HANDLER_REGISTRY);
  +        HandlerRegistry sr = (HandlerRegistry)getOption(Constants.SERVICE_REGISTRY);
  +        
  +        /** Make sure later Handlers can get this directly.
  +        */
  +        msgContext.setProperty(Constants.SERVICE_REGISTRY, sr);
  +
  +        /** We must have a TARGET to continue.  This tells us which Handler to
  +        * pull from the registry and call.  The Transport Listener is responsible
  +        * for making sure this gets set, and if it isn't, we FAIL.
  +        */
  +        String target = (String) msgContext.getProperty( Constants.MC_TARGET );
  +        if ( target == null )
  +            throw new AxisFault("Server.NoTargetConfigured",
  +                "AxisEngine: Couldn't find a target property in the MessageContext!",
  +                null, null );
  +
  +        Handler h = sr.find( target );
  +
  +        if ( h == null ) {
  +            Debug.Print( 1, "No service found by name: " + target );
  +            throw new AxisFault( "Server.NoSuchService",
  +                "Service '" + target + "' was not found",
  +                null, null );
  +        }
  +
  +        /* Place in the bag so that handlers down the line can have access to */
  +        /* it - ie. can look thru it's list of options                        */
  +        /**********************************************************************/
  +        /** !!! I'm not sure this is appropriate here, since we don't
  +         * necessarily know whether this is the "real" service handler or
  +         * not... --Glen
  +         */
  +        msgContext.setProperty( Constants.MC_SVC_HANDLER, h );
  +        
  +        // Clear this for the next round of dispatch, if any.
  +        msgContext.clearProperty( Constants.MC_TARGET );
  +
  +        h.init();   // ???
  +        try {
  +            h.invoke( msgContext );
  +        }
  +        catch( Exception e ) {
  +            // Should we even bother catching it ?
  +            if ( !(e instanceof AxisFault) ) e = new AxisFault( e );
  +            throw (AxisFault) e ;
  +        }
  +        h.cleanup();   // ???
  +        Debug.Print( 1, "Exit: SimpleAxisEngine::invoke" );
  +    };
  +
   };