/**************************************************************
 * 
 * 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.
 * 
 *************************************************************/


#ifndef __com_sun_star_lang_WrappedTargetException_idl__ 
#define __com_sun_star_lang_WrappedTargetException_idl__ 
 
#ifndef __com_sun_star_uno_Exception_idl__ 
#include <com/sun/star/uno/Exception.idl> 
#endif 
 
 
//============================================================================= 
 
module com {  module sun {  module star {  module lang {  
 
//============================================================================= 
 
// DocMerge from xml: exception com::sun::star::lang::WrappedTargetException
/** This is a checked exception that wraps an exception thrown 
	by the original target. 

	<p>Normally this exception is declared for generic methods.  </p>

	@see com::sun::star::container::XIndexAccess 
	@see com::sun::star::container::XNameAccess 
	@see com::sun::star::beans::XPropertySet
 */
published exception WrappedTargetException: com::sun::star::uno::Exception
{ 
	//------------------------------------------------------------------------- 
	 
	// DocMerge from xml: field com::sun::star::lang::WrappedTargetException::TargetException
	/** The exception is thrown by the target.
	 */
	any TargetException; 
 
}; 
 
//============================================================================= 
 
}; }; }; };  
 
/*============================================================================= 
 
=============================================================================*/ 
#endif 
