/**
 *
 * Copyright 2004 The Apache Software Foundation
 *
 *  Licensed 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.ws.scout.registry;

import javax.xml.registry.CapabilityProfile;
import javax.xml.registry.JAXRException;

/**
 * Implements CapabilityProfile of JAXR API
 *
 * @author Jeremy Boynes <jboynes@apache.org>
 * @author Anil Saldhana  <anil@apache.org>
 */
public class CapabilityProfileImpl implements CapabilityProfile
{
    public int getCapabilityLevel() throws JAXRException
    {
        return 0;
    }

    public String getVersion() throws JAXRException
    {
        return "1.0";
    }
}
