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 di...@apache.org on 2005/02/04 19:11:24 UTC

cvs commit: ws-axis/java/src/org/apache/axis/handlers HandlerChainImpl.java JAXRPCHandler.java

dims        2005/02/04 10:11:24

  Modified:    java/src/org/apache/axis/handlers HandlerChainImpl.java
                        JAXRPCHandler.java
  Log:
  move code to HandlerChainImpl from JAXRPCHandler since HandlerInfoChainFactory is the one that instantiates stuff from wsdd entries.
  
  Revision  Changes    Path
  1.16      +125 -45   ws-axis/java/src/org/apache/axis/handlers/HandlerChainImpl.java
  
  Index: HandlerChainImpl.java
  ===================================================================
  RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/handlers/HandlerChainImpl.java,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- HandlerChainImpl.java	9 Dec 2004 14:36:14 -0000	1.15
  +++ HandlerChainImpl.java	4 Feb 2005 18:11:24 -0000	1.16
  @@ -13,11 +13,12 @@
    * See the License for the specific language governing permissions and
    * limitations under the License.
    */
  -
   package org.apache.axis.handlers;
   
  +import org.apache.axis.components.logger.LogFactory;
   import org.apache.axis.utils.ClassUtils;
   import org.apache.axis.utils.Messages;
  +import org.apache.commons.logging.Log;
   
   import javax.xml.rpc.JAXRPCException;
   import javax.xml.rpc.handler.Handler;
  @@ -25,14 +26,26 @@
   import javax.xml.rpc.handler.MessageContext;
   import javax.xml.rpc.handler.soap.SOAPMessageContext;
   import javax.xml.rpc.soap.SOAPFaultException;
  +import javax.xml.soap.SOAPBody;
  +import javax.xml.soap.SOAPElement;
  +import javax.xml.soap.SOAPEnvelope;
  +import javax.xml.soap.SOAPException;
  +import javax.xml.soap.SOAPMessage;
   import java.util.ArrayList;
  +import java.util.Arrays;
  +import java.util.Iterator;
   import java.util.List;
   import java.util.Map;
   
   /**
    * Implementation of HandlerChain
    */
  -public class HandlerChainImpl extends ArrayList implements javax.xml.rpc.handler.HandlerChain {
  +public class HandlerChainImpl extends ArrayList implements javax.xml.rpc.handler
  +        .HandlerChain {
  +    protected static Log log =
  +            LogFactory.getLog(HandlerChainImpl.class.getName());
  +
  +    private static final String JAXRPC_METHOD_INFO = "jaxrpc.method.info";
   
       private String[] _roles;
   
  @@ -43,8 +56,8 @@
       }
   
       public void setRoles(String[] roles) {
  -        if(roles != null) {
  -            // use clone for cheap array copy 
  +        if (roles != null) {
  +            // use clone for cheap array copy
               _roles = (String[])roles.clone();
           }
       }
  @@ -67,64 +80,130 @@
   
       public void addNewHandler(String className, Map config) {
           try {
  -            HandlerInfo handlerInfo = new HandlerInfo(ClassUtils.forName(className),
  -                    config,
  -                    null);
  +            HandlerInfo handlerInfo =
  +            new HandlerInfo(ClassUtils.forName(className), config, null);
               handlerInfos.add(handlerInfo);
               add(newHandler(handlerInfo));
           } catch (Exception ex) {
  -            String messageText = Messages.getMessage("NoJAXRPCHandler00", className);
  +            String messageText =
  +                    Messages.getMessage("NoJAXRPCHandler00", className);
               throw new JAXRPCException(messageText, ex);
           }
       }
   
       public boolean handleFault(MessageContext _context) {
  -        SOAPMessageContext context = (SOAPMessageContext) _context;
  -
  -        int endIdx = size() - 1;
  -        if (falseIndex != -1) {
  -            endIdx = falseIndex;
  +        SOAPMessageContext context = (SOAPMessageContext)_context;
  +        preInvoke(context);
  +        try {
  +            int endIdx = size() - 1;
  +            if (falseIndex != -1) {
  +                endIdx = falseIndex;
  +            }
  +            for (int i = endIdx; i >= 0; i--) {
  +                if (getHandlerInstance(i).handleFault(context) == false) {
  +                    return false;
  +                }
  +            }
  +            return true;
  +        } finally {
  +            postInvoke(context);
           }
  -        for (int i = endIdx; i >= 0; i--) {
  -            if (getHandlerInstance(i).handleFault(context) == false) {
  -                return false;
  +    }
  +
  +    public ArrayList getMessageInfo(SOAPMessage message) {
  +        ArrayList list = new ArrayList();
  +        try {
  +            SOAPEnvelope env = message.getSOAPPart().getEnvelope();
  +            SOAPBody body = env.getBody();
  +            Iterator it = body.getChildElements();
  +            SOAPElement operation = (SOAPElement)it.next();
  +            list.add(operation.getElementName().toString());
  +            for (Iterator i = operation.getChildElements(); i.hasNext();) {
  +                SOAPElement elt = (SOAPElement)i.next();
  +                list.add(elt.getElementName().toString());
               }
  +        } catch (Exception e) {
  +            log.debug("Exception in getMessageInfo : ", e);
           }
  -        return true;
  +        return list;
       }
   
       public boolean handleRequest(MessageContext _context) {
  -        
  -        ((org.apache.axis.MessageContext)_context).setRoles(getRoles());
  -        
  -        SOAPMessageContext context = (SOAPMessageContext) _context;
  -
  -        for (int i = 0; i < size(); i++) {
  -            Handler currentHandler = getHandlerInstance(i);
  -            try {
  -                if (currentHandler.handleRequest(context) == false) {
  +        org.apache.axis.MessageContext actx =
  +                (org.apache.axis.MessageContext)_context;
  +        actx.setRoles(getRoles());
  +        SOAPMessageContext context = (SOAPMessageContext)_context;
  +        preInvoke(context);
  +        try {
  +            for (int i = 0; i < size(); i++) {
  +                Handler currentHandler = getHandlerInstance(i);
  +                try {
  +                    if (currentHandler.handleRequest(context) == false) {
  +                        falseIndex = i;
  +                        return false;
  +                    }
  +                } catch (SOAPFaultException sfe) {
                       falseIndex = i;
  -                    return false;
  +                    throw sfe;
                   }
  -            } catch (SOAPFaultException sfe) {
  -                falseIndex = i;
  -                throw sfe;
               }
  +            return true;
  +        } finally {
  +            postInvoke(context);
           }
  -        return true;
       }
   
       public boolean handleResponse(MessageContext context) {
  -        int endIdx = size() - 1;
  -        if (falseIndex != -1) {
  -            endIdx = falseIndex;
  +        SOAPMessageContext scontext = (SOAPMessageContext)context;
  +        preInvoke(scontext);
  +        try {
  +            int endIdx = size() - 1;
  +            if (falseIndex != -1) {
  +                endIdx = falseIndex;
  +            }
  +            for (int i = endIdx; i >= 0; i--) {
  +                if (getHandlerInstance(i).handleResponse(context) == false) {
  +                    return false;
  +                }
  +            }
  +            return true;
  +        } finally {
  +            postInvoke(scontext);
           }
  -        for (int i = endIdx; i >= 0; i--) {
  -            if (getHandlerInstance(i).handleResponse(context) == false) {
  -                return false;
  +    }
  +
  +    private void preInvoke(SOAPMessageContext msgContext) {
  +        try {
  +            SOAPMessage message = msgContext.getMessage();
  +            // Ensure that message is already in the form we want 
  +            message.getSOAPPart().getEnvelope();
  +            msgContext.setProperty(org.apache.axis.SOAPPart.ALLOW_FORM_OPTIMIZATION,
  +                    Boolean.FALSE);
  +            msgContext.setProperty(JAXRPC_METHOD_INFO, getMessageInfo(message));
  +        } catch (Exception e) {
  +            log.debug("Exception in preInvoke : ", e);
  +            throw new RuntimeException("Exception in preInvoke : ", e);
  +        }
  +    }
  +
  +    private void postInvoke(SOAPMessageContext msgContext) {
  +        msgContext.setProperty(org.apache.axis.SOAPPart.ALLOW_FORM_OPTIMIZATION,
  +                Boolean.TRUE);
  +        SOAPMessage message = msgContext.getMessage();
  +        ArrayList oldList =
  +                (ArrayList)msgContext.getProperty(JAXRPC_METHOD_INFO);
  +        if (oldList != null) {
  +            if (!Arrays.equals(oldList.toArray(), getMessageInfo(message)
  +                            .toArray())) {
  +                throw new RuntimeException(Messages.getMessage("invocationArgumentsModified00"));
               }
           }
  -        return true;
  +        try {
  +            msgContext.getMessage().saveChanges();
  +        } catch (SOAPException e) {
  +            log.debug("Exception in postInvoke : ", e);
  +            throw new RuntimeException("Exception in postInvoke : ", e);
  +        }
       }
   
       public void destroy() {
  @@ -140,23 +219,24 @@
       }
   
       private Handler getHandlerInstance(int index) {
  -        return (Handler) get(index);
  +        return (Handler)get(index);
       }
   
       private HandlerInfo getHandlerInfo(int index) {
  -        return (HandlerInfo) handlerInfos.get(index);
  +        return (HandlerInfo)handlerInfos.get(index);
       }
   
       private Handler newHandler(HandlerInfo handlerInfo) {
           try {
  -            Handler handler =
  -                    (Handler) handlerInfo.getHandlerClass().newInstance();
  +            Handler handler = (Handler)handlerInfo.getHandlerClass()
  +                            .newInstance();
               handler.init(handlerInfo);
               return handler;
           } catch (Exception ex) {
  -            String messageText = Messages.getMessage("NoJAXRPCHandler00", handlerInfo.getHandlerClass().toString());
  +            String messageText =
  +                    Messages.getMessage("NoJAXRPCHandler00",
  +                    handlerInfo.getHandlerClass().toString());
               throw new JAXRPCException(messageText, ex);
           }
       }
  -}
  -
  +}
  \ No newline at end of file
  
  
  
  1.16      +8 -78     ws-axis/java/src/org/apache/axis/handlers/JAXRPCHandler.java
  
  Index: JAXRPCHandler.java
  ===================================================================
  RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/handlers/JAXRPCHandler.java,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- JAXRPCHandler.java	3 Feb 2005 21:57:33 -0000	1.15
  +++ JAXRPCHandler.java	4 Feb 2005 18:11:24 -0000	1.16
  @@ -13,28 +13,18 @@
    * See the License for the specific language governing permissions and
    * limitations under the License.
    */
  -
   package org.apache.axis.handlers;
   
   import org.apache.axis.AxisFault;
   import org.apache.axis.MessageContext;
  -import org.apache.axis.i18n.Messages;
   import org.apache.axis.components.logger.LogFactory;
   import org.apache.commons.logging.Log;
   
  -import javax.xml.soap.SOAPException;
  -import javax.xml.soap.SOAPMessage;
  -import javax.xml.soap.SOAPEnvelope;
  -import javax.xml.soap.SOAPBody;
  -import javax.xml.soap.SOAPElement;
   import java.util.Map;
  -import java.util.ArrayList;
  -import java.util.Iterator;
  -import java.util.Arrays;
  -
   
   /**
    * Handles JAXRPC style handlers.
  + *
    * @author Davanum Srinivas (dims@yahoo.com)
    */
   public class JAXRPCHandler extends BasicHandler {
  @@ -42,14 +32,12 @@
               LogFactory.getLog(JAXRPCHandler.class.getName());
   
       protected HandlerChainImpl impl = new HandlerChainImpl();
  -    
  -    private static final String JAXRPC_METHOD_INFO = "jaxrpc.method.info";
   
       public void init() {
           super.init();
  -        String className = (String) getOption("className");
  -        if(className != null) {
  -            addNewHandler(className,  getOptions());
  +        String className = (String)getOption("className");
  +        if (className != null) {
  +            addNewHandler(className, getOptions());
           }
       }
   
  @@ -57,74 +45,16 @@
           impl.addNewHandler(className, options);
       }
   
  -    private void preInvoke(MessageContext msgContext) throws AxisFault {
  -        try {
  -            SOAPMessage message = msgContext.getMessage();
  -            // Ensure that message is already in the form we want 
  -            message.getSOAPPart().getEnvelope();
  -            msgContext.setProperty(org.apache.axis.SOAPPart.ALLOW_FORM_OPTIMIZATION,
  -                    Boolean.FALSE);
  -            msgContext.setProperty(JAXRPC_METHOD_INFO, getMessageInfo(message));
  -        } catch (Exception e) {
  -            log.debug("Exception in preInvoke : ", e);
  -            throw AxisFault.makeFault(e);
  -        }
  -    }
  -
       public void invoke(MessageContext msgContext) throws AxisFault {
           log.debug("Enter: JAXRPCHandler::enter invoke");
  -        preInvoke(msgContext);
  -        try {
  -            if (!msgContext.getPastPivot()) {
  -                impl.handleRequest(msgContext);
  -            } else {
  -                impl.handleResponse(msgContext);
  -            }
  -        } finally {
  -            postInvoke(msgContext);
  +        if (!msgContext.getPastPivot()) {
  +            impl.handleRequest(msgContext);
  +        } else {
  +            impl.handleResponse(msgContext);
           }
           log.debug("Enter: JAXRPCHandler::exit invoke");
       }
   
  -    private void postInvoke(MessageContext msgContext) throws AxisFault {
  -        msgContext.setProperty(org.apache.axis.SOAPPart.ALLOW_FORM_OPTIMIZATION,
  -                Boolean.TRUE);
  -        SOAPMessage message = msgContext.getMessage();
  -        ArrayList oldList = (ArrayList)msgContext.getProperty(JAXRPC_METHOD_INFO);
  -        if (oldList != null) {
  -            if (!Arrays.equals(oldList.toArray(), getMessageInfo(message)
  -                            .toArray())) {
  -                throw new AxisFault(Messages.getMessage("invocationArgumentsModified00"));
  -            }
  -        }
  -        if (message.saveRequired()) {
  -            try {
  -                msgContext.getMessage().saveChanges();
  -            } catch (SOAPException e) {
  -                log.debug("Exception in postInvoke : ", e);
  -                throw AxisFault.makeFault(e);
  -            }
  -        }
  -    }
  -    
  -    public ArrayList getMessageInfo(SOAPMessage message){
  -        ArrayList list = new ArrayList();
  -        try {
  -            SOAPEnvelope env = message.getSOAPPart().getEnvelope();
  -            SOAPBody body = env.getBody();
  -            Iterator it = body.getChildElements();
  -            SOAPElement operation = (SOAPElement)it.next();
  -            list.add(operation.getElementName().toString());
  -            for (Iterator i = operation.getChildElements(); i.hasNext();) {
  -                SOAPElement elt = (SOAPElement)i.next();
  -                list.add(elt.getElementName().toString());
  -            }
  -        } catch (Exception e) {
  -            log.debug("Exception in getMessageInfo : ", e);
  -        }
  -        return list;
  -    }
  -
       public void onFault(MessageContext msgContext) {
           impl.handleFault(msgContext);
       }