H5O_info fixes for java and examples

This commit is contained in:
Allen Byrne 2018-05-31 16:09:48 -05:00
parent 0de74a8dad
commit b28815c205
8 changed files with 210 additions and 42 deletions

View File

@ -189,7 +189,7 @@ main (void)
/*
* Find string attribute by iterating through all attributes
*/
ret = H5Oget_info(dataset, &oinfo);
ret = H5Oget_info2(dataset, &oinfo, H5O_INFO_ALL);
for(i = 0; i < (unsigned)oinfo.num_attrs; i++) {
attr = H5Aopen_by_idx(dataset, ".", H5_INDEX_CRT_ORDER, H5_ITER_INC, (hsize_t)i, H5P_DEFAULT, H5P_DEFAULT);
atype = H5Aget_type(attr);

View File

@ -4287,7 +4287,27 @@ public class H5 implements java.io.Serializable {
* @exception NullPointerException
* - name is null.
**/
public synchronized static native H5O_info_t H5Oget_info(long loc_id) throws HDF5LibraryException,
public static H5O_info_t H5Oget_info(long loc_id) throws HDF5LibraryException,
NullPointerException {
return H5Oget_info(loc_id, HDF5Constants.H5O_INFO_ALL);
}
/**
* H5Oget_info retrieves the metadata for an object specified by an identifier.
*
* @param loc_id
* IN: Identifier for target object
* @param fields
* IN: Object fields to select
*
* @return object information
*
* @exception HDF5LibraryException
* - Error from the HDF-5 Library.
* @exception NullPointerException
* - name is null.
**/
public synchronized static native H5O_info_t H5Oget_info(long loc_id, int fields) throws HDF5LibraryException,
NullPointerException;
/**
@ -4314,8 +4334,39 @@ public class H5 implements java.io.Serializable {
* @exception NullPointerException
* - name is null.
**/
public static H5O_info_t H5Oget_info_by_idx(long loc_id, String group_name, int idx_type,
int order, long n, long lapl_id) throws HDF5LibraryException, NullPointerException {
return H5Oget_info_by_idx(loc_id, group_name, idx_type, order, n, HDF5Constants.H5O_INFO_ALL, lapl_id);
}
/**
* H5Oget_info_by_idx retrieves the metadata for an object, identifying the object by an index position.
*
* @param loc_id
* IN: File or group identifier
* @param group_name
* IN: Name of group, relative to loc_id, in which object is located
* @param idx_type
* IN: Type of index by which objects are ordered
* @param order
* IN: Order of iteration within index
* @param n
* IN: Object to open
* @param fields
* IN: Object fields to select
* @param lapl_id
* IN: Access property list identifier for the link pointing to the object (Not currently used; pass as
* H5P_DEFAULT.)
*
* @return object information
*
* @exception HDF5LibraryException
* - Error from the HDF-5 Library.
* @exception NullPointerException
* - name is null.
**/
public synchronized static native H5O_info_t H5Oget_info_by_idx(long loc_id, String group_name, int idx_type,
int order, long n, long lapl_id) throws HDF5LibraryException, NullPointerException;
int order, long n, int fields, long lapl_id) throws HDF5LibraryException, NullPointerException;
/**
* H5Oget_info_by_name retrieves the metadata for an object, identifying the object by location and relative name.
@ -4335,7 +4386,32 @@ public class H5 implements java.io.Serializable {
* @exception NullPointerException
* - name is null.
**/
public synchronized static native H5O_info_t H5Oget_info_by_name(long loc_id, String name, long lapl_id)
public static H5O_info_t H5Oget_info_by_name(long loc_id, String name, long lapl_id)
throws HDF5LibraryException, NullPointerException {
return H5Oget_info_by_name(loc_id, name, HDF5Constants.H5O_INFO_ALL, lapl_id);
}
/**
* H5Oget_info_by_name retrieves the metadata for an object, identifying the object by location and relative name.
*
* @param loc_id
* IN: File or group identifier specifying location of group in which object is located
* @param name
* IN: Relative name of group
* @param fields
* IN: Object fields to select
* @param lapl_id
* IN: Access property list identifier for the link pointing to the object (Not currently used; pass as
* H5P_DEFAULT.)
*
* @return object information
*
* @exception HDF5LibraryException
* - Error from the HDF-5 Library.
* @exception NullPointerException
* - name is null.
**/
public synchronized static native H5O_info_t H5Oget_info_by_name(long loc_id, String name, int fields, long lapl_id)
throws HDF5LibraryException, NullPointerException;
/**
@ -4412,8 +4488,37 @@ public class H5 implements java.io.Serializable {
* @exception NullPointerException
* - name is null.
**/
public static int H5Ovisit(long obj_id, int idx_type, int order, H5O_iterate_cb op, H5O_iterate_t op_data)
throws HDF5LibraryException, NullPointerException {
return H5Ovisit(obj_id, idx_type, order, op, op_data, HDF5Constants.H5O_INFO_ALL);
}
/**
* H5Ovisit recursively visits all objects accessible from a specified object.
*
* @param obj_id
* IN: Identifier of the object at which the recursive iteration begins.
* @param idx_type
* IN: Type of index
* @param order
* IN: Order of iteration within index
* @param op
* IN: Callback function passing data regarding the object to the calling application
* @param op_data
* IN: User-defined pointer to data required by the application for its processing of the object
* @param fields
* IN: Object fields to select
*
* @return returns the return value of the first operator that returns a positive value, or zero if all members were
* processed with no operator returning non-zero.
*
* @exception HDF5LibraryException
* - Error from the HDF-5 Library.
* @exception NullPointerException
* - name is null.
**/
public synchronized static native int H5Ovisit(long obj_id, int idx_type, int order, H5O_iterate_cb op,
H5O_iterate_t op_data) throws HDF5LibraryException, NullPointerException;
H5O_iterate_t op_data, int fields) throws HDF5LibraryException, NullPointerException;
/**
* H5Ovisit_by_name recursively visits all objects starting from a specified object.
@ -4441,8 +4546,41 @@ public class H5 implements java.io.Serializable {
* @exception NullPointerException
* - name is null.
**/
public static int H5Ovisit_by_name(long loc_id, String obj_name, int idx_type, int order,
H5O_iterate_cb op, H5O_iterate_t op_data, long lapl_id) throws HDF5LibraryException, NullPointerException {
return H5Ovisit_by_name(loc_id, obj_name, idx_type, order, op, op_data, HDF5Constants.H5O_INFO_ALL, lapl_id);
}
/**
* H5Ovisit_by_name recursively visits all objects starting from a specified object.
*
* @param loc_id
* IN: File or group identifier
* @param obj_name
* IN: Relative path to the object
* @param idx_type
* IN: Type of index
* @param order
* IN: Order of iteration within index
* @param op
* IN: Callback function passing data regarding the object to the calling application
* @param op_data
* IN: User-defined pointer to data required by the application for its processing of the object
* @param fields
* IN: Object fields to select
* @param lapl_id
* IN: Link access property list identifier
*
* @return returns the return value of the first operator that returns a positive value, or zero if all members were
* processed with no operator returning non-zero.
*
* @exception HDF5LibraryException
* - Error from the HDF-5 Library.
* @exception NullPointerException
* - name is null.
**/
public synchronized static native int H5Ovisit_by_name(long loc_id, String obj_name, int idx_type, int order,
H5O_iterate_cb op, H5O_iterate_t op_data, long lapl_id) throws HDF5LibraryException, NullPointerException;
H5O_iterate_cb op, H5O_iterate_t op_data, int fields, long lapl_id) throws HDF5LibraryException, NullPointerException;
/**

View File

@ -330,6 +330,12 @@ public class HDF5Constants {
public static final int H5O_COPY_EXPAND_REFERENCE_FLAG = H5O_COPY_EXPAND_REFERENCE_FLAG();
public static final int H5O_COPY_WITHOUT_ATTR_FLAG = H5O_COPY_WITHOUT_ATTR_FLAG();
public static final int H5O_COPY_PRESERVE_NULL_FLAG = H5O_COPY_PRESERVE_NULL_FLAG();
public static final int H5O_INFO_BASIC = H5O_INFO_BASIC();
public static final int H5O_INFO_TIME = H5O_INFO_TIME();
public static final int H5O_INFO_NUM_ATTRS = H5O_INFO_NUM_ATTRS();
public static final int H5O_INFO_HDR = H5O_INFO_HDR();
public static final int H5O_INFO_META_SIZE = H5O_INFO_META_SIZE();
public static final int H5O_INFO_ALL = H5O_INFO_ALL();
public static final int H5O_SHMESG_NONE_FLAG = H5O_SHMESG_NONE_FLAG();
public static final int H5O_SHMESG_SDSPACE_FLAG = H5O_SHMESG_SDSPACE_FLAG();
public static final int H5O_SHMESG_DTYPE_FLAG = H5O_SHMESG_DTYPE_FLAG();
@ -1239,6 +1245,18 @@ public class HDF5Constants {
private static native final int H5O_COPY_PRESERVE_NULL_FLAG();
private static native final int H5O_INFO_BASIC();
private static native final int H5O_INFO_TIME();
private static native final int H5O_INFO_NUM_ATTRS();
private static native final int H5O_INFO_HDR();
private static native final int H5O_INFO_META_SIZE();
private static native final int H5O_INFO_ALL();
private static native final int H5O_SHMESG_NONE_FLAG();
private static native final int H5O_SHMESG_SDSPACE_FLAG();

View File

@ -643,6 +643,18 @@ Java_hdf_hdf5lib_HDF5Constants_H5O_1COPY_1WITHOUT_1ATTR_1FLAG(JNIEnv *env, jclas
JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_HDF5Constants_H5O_1COPY_1PRESERVE_1NULL_1FLAG(JNIEnv *env, jclass cls){return H5O_COPY_PRESERVE_NULL_FLAG; }
JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_HDF5Constants_H5O_1INFO_1BASIC(JNIEnv *env, jclass cls) { return H5O_INFO_BASIC; }
JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_HDF5Constants_H5O_1INFO_1TIME(JNIEnv *env, jclass cls) { return H5O_INFO_TIME; }
JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_HDF5Constants_H5O_1INFO_1NUM_1ATTRS(JNIEnv *env, jclass cls) { return H5O_INFO_NUM_ATTRS; }
JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_HDF5Constants_H5O_1INFO_1HDR(JNIEnv *env, jclass cls) { return H5O_INFO_HDR; }
JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_HDF5Constants_H5O_1INFO_1META_1SIZE(JNIEnv *env, jclass cls) { return H5O_INFO_META_SIZE; }
JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_HDF5Constants_H5O_1INFO_1ALL(JNIEnv *env, jclass cls) { return H5O_INFO_ALL; }
JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_HDF5Constants_H5O_1SHMESG_1NONE_1FLAG(JNIEnv *env, jclass cls){return H5O_SHMESG_NONE_FLAG; }
JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_HDF5Constants_H5O_1SHMESG_1SDSPACE_1FLAG(JNIEnv *env, jclass cls){return H5O_SHMESG_SDSPACE_FLAG; }

View File

@ -105,11 +105,11 @@ Java_hdf_hdf5lib_H5_H5Ocopy
/*
* Class: hdf_hdf5lib_H5
* Method: H5Oget_info
* Signature: (J)Lhdf/hdf5lib/structs/H5O_info_t;
* Signature: (JI)Lhdf/hdf5lib/structs/H5O_info_t;
*/
JNIEXPORT jobject JNICALL
Java_hdf_hdf5lib_H5_H5Oget_1info
(JNIEnv *env, jclass clss, jlong loc_id)
(JNIEnv *env, jclass clss, jlong loc_id, jint fields)
{
herr_t status = -1;
H5O_info_t infobuf;
@ -119,7 +119,7 @@ Java_hdf_hdf5lib_H5_H5Oget_1info
jobject ihinfobuf2;
jobject ret_obj = NULL;
status = H5Oget_info((hid_t)loc_id, &infobuf);
status = H5Oget_info2((hid_t)loc_id, &infobuf, (unsigned)fields);
if (status < 0) {
h5libraryError(env);
@ -168,11 +168,11 @@ Java_hdf_hdf5lib_H5_H5Oget_1info
/*
* Class: hdf_hdf5lib_H5
* Method: H5Oget_info_by_name
* Signature: (JLjava/lang/String;J)Lhdf/hdf5lib/structs/H5O_info_t;
* Signature: (JLjava/lang/String;IJ)Lhdf/hdf5lib/structs/H5O_info_t;
*/
JNIEXPORT jobject JNICALL
Java_hdf_hdf5lib_H5_H5Oget_1info_1by_1name
(JNIEnv *env, jclass clss, jlong loc_id, jstring name, jlong access_id)
(JNIEnv *env, jclass clss, jlong loc_id, jstring name, jint fields, jlong access_id)
{
const char *lName;
herr_t status = -1;
@ -185,7 +185,7 @@ Java_hdf_hdf5lib_H5_H5Oget_1info_1by_1name
PIN_JAVA_STRING(name, lName);
if (lName != NULL) {
status = H5Oget_info_by_name((hid_t)loc_id, lName, &infobuf, (hid_t)access_id);
status = H5Oget_info_by_name2((hid_t)loc_id, lName, &infobuf, (unsigned)fields, (hid_t)access_id);
UNPIN_JAVA_STRING(name, lName);
@ -237,12 +237,12 @@ Java_hdf_hdf5lib_H5_H5Oget_1info_1by_1name
/*
* Class: hdf_hdf5lib_H5
* Method: H5Oget_info_by_idx
* Signature: (JLjava/lang/String;IIJJ)Lhdf/hdf5lib/structs/H5O_info_t;
* Signature: (JLjava/lang/String;IIJIJ)Lhdf/hdf5lib/structs/H5O_info_t;
*/
JNIEXPORT jobject JNICALL
Java_hdf_hdf5lib_H5_H5Oget_1info_1by_1idx
(JNIEnv *env, jclass clss, jlong loc_id,
jstring name, jint index_field, jint order, jlong link_n, jlong access_id)
jstring name, jint index_field, jint order, jlong link_n, jint fields, jlong access_id)
{
const char *lName;
herr_t status;
@ -255,7 +255,7 @@ Java_hdf_hdf5lib_H5_H5Oget_1info_1by_1idx
PIN_JAVA_STRING(name, lName);
if (lName != NULL) {
status = H5Oget_info_by_idx((hid_t)loc_id, lName, (H5_index_t)index_field, (H5_iter_order_t)order, (hsize_t)link_n, &infobuf, (hid_t)access_id);
status = H5Oget_info_by_idx2((hid_t)loc_id, lName, (H5_index_t)index_field, (H5_iter_order_t)order, (hsize_t)link_n, &infobuf, (unsigned)fields, (hid_t)access_id);
UNPIN_JAVA_STRING(name, lName);
@ -423,12 +423,12 @@ H5O_iterate_cb
/*
* Class: hdf_hdf5lib_H5
* Method: H5Ovisit
* Signature: (JIILjava/lang/Object;Ljava/lang/Object;)I
* Signature: (JIILjava/lang/Object;Ljava/lang/Object;I)I
*/
JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Ovisit
(JNIEnv *env, jclass clss, jlong grp_id, jint idx_type, jint order,
jobject callback_op, jobject op_data)
jobject callback_op, jobject op_data, jint fields)
{
herr_t status = -1;
@ -442,7 +442,7 @@ Java_hdf_hdf5lib_H5_H5Ovisit
h5nullArgument(env, "H5Ovisit: callback_op is NULL");
} /* end if */
else {
status = H5Ovisit((hid_t)grp_id, (H5_index_t)idx_type, (H5_iter_order_t)order, (H5O_iterate_t)H5O_iterate_cb, (void*)op_data);
status = H5Ovisit((hid_t)grp_id, (H5_index_t)idx_type, (H5_iter_order_t)order, (H5O_iterate_t)H5O_iterate_cb, (void*)op_data, (unsigned)fields);
if (status < 0)
h5libraryError(env);
@ -454,12 +454,12 @@ Java_hdf_hdf5lib_H5_H5Ovisit
/*
* Class: hdf_hdf5lib_H5
* Method: H5Ovisit_by_name
* Signature: (JLjava/lang/String;IILjava/lang/Object;Ljava/lang/Object;J)I
* Signature: (JLjava/lang/String;IILjava/lang/Object;Ljava/lang/Object;IJ)I
*/
JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Ovisit_1by_1name
(JNIEnv *env, jclass clss, jlong grp_id, jstring name, jint idx_type, jint order,
jobject callback_op, jobject op_data, jlong access_id)
jobject callback_op, jobject op_data, jint fields, jlong access_id)
{
herr_t status = -1;
const char *lName;
@ -478,7 +478,7 @@ Java_hdf_hdf5lib_H5_H5Ovisit_1by_1name
else {
PIN_JAVA_STRING(name, lName);
if (lName != NULL) {
status = H5Ovisit_by_name((hid_t)grp_id, lName, (H5_index_t)idx_type, (H5_iter_order_t)order, (H5O_iterate_t)H5O_iterate_cb, (void*)op_data, (hid_t)access_id);
status = H5Ovisit_by_name((hid_t)grp_id, lName, (H5_index_t)idx_type, (H5_iter_order_t)order, (H5O_iterate_t)H5O_iterate_cb, (void*)op_data, (unsigned)fields, (hid_t)access_id);
UNPIN_JAVA_STRING(name, lName);

View File

@ -52,29 +52,29 @@ Java_hdf_hdf5lib_H5_H5Ocopy
/*
* Class: hdf_hdf5lib_H5
* Method: H5Oget_info
* Signature: (J)Lhdf/hdf5lib/structs/H5O_info_t;
* Signature: (JI)Lhdf/hdf5lib/structs/H5O_info_t;
*/
JNIEXPORT jobject JNICALL
Java_hdf_hdf5lib_H5_H5Oget_1info
(JNIEnv*, jclass, jlong);
(JNIEnv*, jclass, jlong, jint fields);
/*
* Class: hdf_hdf5lib_H5
* Method: H5Oget_info_by_name
* Signature: (JLjava/lang/String;J)Lhdf/hdf5lib/structs/H5O_info_t;
* Signature: (JLjava/lang/String;IJ)Lhdf/hdf5lib/structs/H5O_info_t;
*/
JNIEXPORT jobject JNICALL
Java_hdf_hdf5lib_H5_H5Oget_1info_1by_1name
(JNIEnv*, jclass, jlong, jstring, jlong);
(JNIEnv*, jclass, jlong, jstring, jint fields, jlong);
/*
* Class: hdf_hdf5lib_H5
* Method: H5Oget_info_by_idx
* Signature: (JLjava/lang/String;IIJJ)Lhdf/hdf5lib/structs/H5O_info_t;
* Signature: (JLjava/lang/String;IIJIJ)Lhdf/hdf5lib/structs/H5O_info_t;
*/
JNIEXPORT jobject JNICALL
Java_hdf_hdf5lib_H5_H5Oget_1info_1by_1idx
(JNIEnv*, jclass, jlong, jstring, jint, jint, jlong, jlong);
(JNIEnv*, jclass, jlong, jstring, jint, jint, jlong, jint fields, jlong);
/*
* Class: hdf_hdf5lib_H5
@ -88,20 +88,20 @@ Java_hdf_hdf5lib_H5_H5Olink
/*
* Class: hdf_hdf5lib_H5
* Method: H5Ovisit
* Signature: (JIILjava/lang/Object;Ljava/lang/Object;)I
* Signature: (JIILjava/lang/Object;Ljava/lang/Object;I)I
*/
JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Ovisit
(JNIEnv*, jclass, jlong, jint, jint, jobject, jobject);
(JNIEnv*, jclass, jlong, jint, jint, jobject, jobject, jint);
/*
* Class: hdf_hdf5lib_H5
* Method: H5Ovisit_by_name
* Signature: (JLjava/lang/String;IILjava/lang/Object;Ljava/lang/Object;J)I
* Signature: (JLjava/lang/String;IILjava/lang/Object;Ljava/lang/Object;IJ)I
*/
JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Ovisit_1by_1name
(JNIEnv*, jclass, jlong, jstring, jint, jint, jobject, jobject, jlong);
(JNIEnv*, jclass, jlong, jstring, jint, jint, jobject, jobject, jint, jlong);
/*
* Class: hdf_hdf5lib_H5

View File

@ -425,7 +425,7 @@ h5str_sprintf
this_str = (char*)HDmalloc(64);
obj = H5Rdereference2(container, H5P_DEFAULT, H5R_OBJECT, ptr);
H5Oget_info(obj, &oi);
H5Oget_info2(obj, &oi, H5O_INFO_ALL);
/* Print object data and close object */
sprintf(this_str, "%u-%lu", (unsigned) oi.type, oi.addr);
@ -2552,7 +2552,7 @@ obj_info_all
info_all_t *datainfo = (info_all_t*)op_data;
H5O_info_t object_info;
retVal = H5Oget_info_by_name(loc_id, name, &object_info, H5P_DEFAULT);
retVal = H5Oget_info_by_name2(loc_id, name, &object_info, H5O_INFO_ALL, H5P_DEFAULT);
if (retVal < 0) {
*(datainfo->otype+datainfo->count) = -1;
@ -2591,7 +2591,7 @@ obj_info_max
info_all_t *datainfo = (info_all_t*)op_data;
H5O_info_t object_info;
retVal = H5Oget_info(loc_id, &object_info);
retVal = H5Oget_info2(loc_id, &object_info, H5O_INFO_ALL);
if (retVal < 0) {
*(datainfo->otype+datainfo->count) = -1;
*(datainfo->ltype+datainfo->count) = -1;

View File

@ -71,27 +71,27 @@ public class TestH5Oparams {
@Test(expected = HDF5LibraryException.class)
public void testH5Oget_info_invalid() throws Throwable {
H5.H5Oget_info(-1);
H5.H5Oget_info(-1, 0);
}
@Test(expected = NullPointerException.class)
public void testH5Oget_info_by_name_null() throws Throwable {
H5.H5Oget_info_by_name(-1, null, HDF5Constants.H5P_DEFAULT);
H5.H5Oget_info_by_name(-1, null, 0, HDF5Constants.H5P_DEFAULT);
}
@Test(expected = HDF5LibraryException.class)
public void testH5Oget_info_by_name_invalid() throws Throwable {
H5.H5Oget_info_by_name(-1, "/testH5Gcreate", HDF5Constants.H5P_DEFAULT);
H5.H5Oget_info_by_name(-1, "/testH5Gcreate", 0, HDF5Constants.H5P_DEFAULT);
}
@Test(expected = HDF5LibraryException.class)
public void testH5Oget_info_by_idx_invalid() throws Throwable {
H5.H5Oget_info_by_idx(-1, "Bogus", -1, -1, -1L, -1);
H5.H5Oget_info_by_idx(-1, "Bogus", -1, -1, -1L, 0, -1);
}
@Test(expected = NullPointerException.class)
public void testH5Oget_info_by_idx_null() throws Throwable {
H5.H5Oget_info_by_idx(-1, null, 0, 0, 0L, 0);
H5.H5Oget_info_by_idx(-1, null, 0, 0, 0L, 0, 0);
}
@Test(expected = HDF5LibraryException.class)
@ -106,17 +106,17 @@ public class TestH5Oparams {
@Test(expected = NullPointerException.class)
public void testH5Ovisit_null() throws Throwable {
H5.H5Ovisit(-1, -1, -1, null, null);
H5.H5Ovisit(-1, -1, -1, null, null, 0);
}
@Test(expected = NullPointerException.class)
public void testH5Ovisit_by_name_nullname() throws Throwable {
H5.H5Ovisit_by_name(-1, null, -1, -1, null, null, -1);
H5.H5Ovisit_by_name(-1, null, -1, -1, null, null, 0, -1);
}
@Test(expected = NullPointerException.class)
public void testH5Ovisit_by_name_null() throws Throwable {
H5.H5Ovisit_by_name(-1, "Bogus", -1, -1, null, null, -1);
H5.H5Ovisit_by_name(-1, "Bogus", -1, -1, null, null, 0, -1);
}
@Test(expected = HDF5LibraryException.class)