001    /**
002     * Licensed to the Apache Software Foundation (ASF) under one or more
003     * contributor license agreements.  See the NOTICE file distributed with
004     * this work for additional information regarding copyright ownership.
005     * The ASF licenses this file to You under the Apache License, Version 2.0
006     * (the "License"); you may not use this file except in compliance with
007     * the License.  You may obtain a copy of the License at
008     *
009     *      http://www.apache.org/licenses/LICENSE-2.0
010     *
011     * Unless required by applicable law or agreed to in writing, software
012     * distributed under the License is distributed on an "AS IS" BASIS,
013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014     * See the License for the specific language governing permissions and
015     * limitations under the License.
016     */
017    package org.apache.xbean.kernel;
018    
019    /**
020     * Indicates that the service factory returned an object from the createService method that is not an instance of every
021     * declared type.
022     *
023     * @author Dain Sundstrom
024     * @version $Id$
025     * @since 2.0
026     */
027    public class InvalidServiceTypeException extends Exception {
028        private final ServiceName serviceName;
029        private final Class expectedType;
030        private final Class serviceType;
031    
032        /**
033         * Creates an InvalidServiceType caused by the service with the specified name, which returned an object from the
034         * createService method of the specified type that is not an instance of the expected type.
035         * @param serviceName the name of the service that returned an object of the wrong type
036         * @param expectedType the type that was expected
037         * @param serviceType the actual type of the service returned from the factory
038         */
039        // todo add servicefacotory to the parameters
040        public InvalidServiceTypeException(ServiceName serviceName, Class expectedType, Class serviceType) {
041            super("Expected service type " + expectedType.getName() + ", but service factory created a " +
042                    serviceType.getName() + " for service " + serviceName);
043            if (serviceName == null) throw new NullPointerException("serviceName is null");
044            if (expectedType == null) throw new NullPointerException("expectedType is null");
045            if (serviceType == null) throw new NullPointerException("serviceType is null");
046            this.serviceName = serviceName;
047            this.expectedType = expectedType;
048            this.serviceType = serviceType;
049        }
050    
051        /**
052         * Gets the name of the service that returned an object of the wrong type.
053         * @return the name of the service that returned an object of the wrong type
054         */
055        public ServiceName getServiceName() {
056            return serviceName;
057        }
058    
059        /**
060         * Gets the type that was expected.
061         * @return the type that was expected
062         */
063        public Class getExpectedType() {
064            return expectedType;
065        }
066    
067        /**
068         * Gets the actual type of the service returned from the factory.
069         * @return  the actual type of the service returned from the factory
070         */
071        public Class getServiceType() {
072            return serviceType;
073        }
074    }