Package org.apache.axis2.jaxws.spi.handler

Source Code of org.apache.axis2.jaxws.spi.handler.HandlerResolverImpl

/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/

package org.apache.axis2.jaxws.spi.handler;

import org.apache.axis2.jaxws.ExceptionFactory;
import org.apache.axis2.jaxws.description.xml.handler.HandlerChainType;
import org.apache.axis2.jaxws.description.xml.handler.HandlerType;
import org.apache.axis2.jaxws.i18n.Messages;
import org.apache.axis2.jaxws.lifecycle.LifecycleException;
import org.apache.axis2.util.LoggingControl;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import javax.xml.ws.handler.Handler;
import javax.xml.ws.handler.HandlerResolver;
import javax.xml.ws.handler.LogicalHandler;
import javax.xml.ws.handler.PortInfo;
import javax.xml.ws.handler.soap.SOAPHandler;
import java.io.File;
import java.net.URI;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
* This is an implementation of {@link HandlerResolver} that can be used with a JAX-WS client
* to set the handler list.
*
* @see javax.xml.ws.Service#setHandlerResolver(HandlerResolver)
*/
public class HandlerResolverImpl extends BaseHandlerResolver {

    private static Log log = LogFactory.getLog(HandlerResolverImpl.class);

    /**
     * Constructor
     *
     * @param filePath the path to the handler configuration file in URI format
     */
    public HandlerResolverImpl(String filePath) {
        super(filePath);
    }
   
    /**
     * Constructor
     *
     * @param fileURI the <code>URI</code> of the handler configuration file
     */
    public HandlerResolverImpl(URI fileURI) {
        this(fileURI.toString());
    }
   
    /**
     * Constructor
     *
     * @param file the handler configuration file
     */
    public HandlerResolverImpl(File file) {
        this(file.toURI());
    }
   
    /*
     *  (non-Javadoc)
     * @see javax.xml.ws.handler.HandlerResolver#getHandlerChain(javax.xml.ws.handler.PortInfo)
     */
    public List<Handler> getHandlerChain(PortInfo portinfo) {
        ArrayList<Handler> handlers = new ArrayList<Handler>();
        Iterator it = handlerChainsType == null ? null : handlerChainsType.getHandlerChain().iterator();

        while ((it != null) && (it.hasNext())) {
            HandlerChainType handlerChainType = ((HandlerChainType)it.next());
           
            // if !match, continue (to next chain)
            if (!(chainResolvesToPort(handlerChainType, portinfo)))
                continue;
           
            List<HandlerType> handlerTypeList = handlerChainType.getHandler();
            Iterator ht = handlerTypeList.iterator();
            while (ht.hasNext()) {
               
                HandlerType handlerType = (HandlerType)ht.next();
               
                // TODO must do better job comparing the handlerType with the PortInfo param
                // to see if the current iterator handler is intended for this service.

                // TODO review: need to check for null getHandlerClass() return?
                // or will schema not allow it?
                String portHandler = handlerType.getHandlerClass().getValue();
                Handler handler = null;
                   
                //  instantiate portHandler class
                try {
                    handler = createHandlerInstance(loadClass(portHandler));
                } catch (Exception e) {
                    // TODO: should we just ignore this problem?
                    throw ExceptionFactory.makeWebServiceException(e);
                }
               
                if (LoggingControl.debugLoggingAllowed && log.isDebugEnabled()) {
                    log.debug("Successfully instantiated the class: " + handler.getClass());
                }
               
                // 9.2.1.2 sort them by Logical, then SOAP
                if (LogicalHandler.class.isAssignableFrom(handler.getClass()))
                    handlers.add((LogicalHandler) handler);
                else if (SOAPHandler.class.isAssignableFrom(handler.getClass()))
                    // instanceof ProtocolHandler
                    handlers.add((SOAPHandler) handler);
                else if (Handler.class.isAssignableFrom(handler.getClass())) {
                    throw ExceptionFactory.makeWebServiceException(Messages
                            .getMessage("handlerChainErr1", handler
                                    .getClass().getName()));
                } else {
                    throw ExceptionFactory.makeWebServiceException(Messages
                            .getMessage("handlerChainErr2", handler
                                    .getClass().getName()));
                }
            }
        }

        return handlers;
    }
   
    //Create an instance of the handler class and perform appropriate lifecycle activities
    //to it.
    private Handler createHandlerInstance(Class handlerClass) throws LifecycleException {
        if (handlerClass == null) {
            throw ExceptionFactory.
              makeWebServiceException(Messages.getMessage("createHandlerInstanceErr"));
        }
       
        //Resource injection not supported.
       
        Object object = null;
       
        try {
            object = handlerClass.newInstance();
        } catch (InstantiationException e) {
            throw ExceptionFactory.makeWebServiceException(e);
        } catch (IllegalAccessException e) {
            throw ExceptionFactory.makeWebServiceException(e);
        }
               
        //Invoke PostConstruct
        LifecycleManager manager = new LifecycleManager(object);
        manager.invokePostConstruct();
       
        return (Handler) object;
    }
}
TOP

Related Classes of org.apache.axis2.jaxws.spi.handler.HandlerResolverImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.