/* * 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.tuscany.sca.interfacedef; import org.apache.tuscany.sca.interfacedef.util.Audit; /** * The InterfaceContractMapper is responsible to match interfaces * * @version $Rev$ $Date$ * @tuscany.spi.extension.asclient */ public interface InterfaceContractMapper { /** * @param source The source interface contract * @param target The target interface contract * @param compatibility The compatibility style * @param ignoreCallback * @param silent * @return * @throws IncompatibleInterfaceContractException */ boolean checkCompatibility(InterfaceContract source, InterfaceContract target, Compatibility compatibility, boolean ignoreCallback, boolean silent) throws IncompatibleInterfaceContractException; /** * @param source The source interface contract * @param target The target interface contract * @param compatibility The compatibility style * @param ignoreCallback * @param silent * @return * @throws IncompatibleInterfaceContractException * this interface is intended to incrementally replace the variant without the audit trail * the presence of both interfaces implies a state of partial development */ boolean checkCompatibility(InterfaceContract source, InterfaceContract target, Compatibility compatibility, boolean ignoreCallback, boolean silent, Audit audit) throws IncompatibleInterfaceContractException; /** * Test if the source data type is compatible with the target data type. The * compatibility is defined as follows. * * For example, if the source type is a SDO Customer and the target type is * a JAXB Customer and both Customer are generated from the same XSD type. * * @param source The source data type * @param target The target data type * @param passByValue A flag to indicate how the compatibility is checked * * @return true if the source data type is the same or subtype of the target data type */ boolean isCompatible(DataType source, DataType target, boolean passByValue); /** * Check if source operation is compatible with the target operation. A source operation is * compatible with the target operation means the following: * *
    *
  1. compatibility for the two operations is defined as compatibility * of the signature, i.e., the operation name, the input types, and the output types are the same * *
  2. the order of the input and output types of the source operation is the same as the order of * the input and output types for the corresponding target operation *
  3. the set of Faults and Exceptions expected by the source operation is the same as or is * a SUPERSET of the set of Faults and Exceptions specified by the corresponding target operation *
* * Simply speaking, any request from the source operation can be processed by the target operation and * the normal response or fault/exception from the target operation can be handled by the source operation. * * Please note this compatibility check is NOT symmetric. But the following should be guaranteed: *