Skip to content

Commit 6797d0f

Browse files
authored
Merge pull request #36 from kiwix/execption_handling
2 parents 420794e + ab7bbc1 commit 6797d0f

27 files changed

Lines changed: 469 additions & 421 deletions

lib/build.gradle

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -342,7 +342,8 @@ String getLibzimFiles() {
342342
"${projectDir}/src/main/java/org/kiwix/libzim/SuggestionIterator.java " +
343343
"${projectDir}/src/main/java/org/kiwix/libzim/SuggestionSearcher.java " +
344344
"${projectDir}/src/main/java/org/kiwix/libzim/SuggestionSearch.java " +
345-
"${projectDir}/src/main/java/org/kiwix/libzim/ZimFileFormatException.java"
345+
"${projectDir}/src/main/java/org/kiwix/libzim/ZimFileFormatException.java " +
346+
"${projectDir}/src/main/java/org/kiwix/libzim/EntryNotFoundException.java"
346347
}
347348

348349
task buildLinuxBinding(type: Exec) {

lib/src/main/cpp/libkiwix/book.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,19 +32,19 @@
3232
METHOD0(void, allocate)
3333
{
3434
SET_PTR(std::make_shared<NATIVE_TYPE>());
35-
}
35+
} CATCH_EXCEPTION()
3636

3737
DISPOSE
3838

3939
METHOD(void, update__Lorg_kiwix_libkiwix_Book_2, jobject otherBook)
4040
{
4141
THIS->update(*getPtr<kiwix::Book>(env, otherBook));
42-
}
42+
} CATCH_EXCEPTION()
4343

4444
METHOD(void, update__Lorg_kiwix_libzim_Archive_2, jobject archive)
4545
{
4646
THIS->update(*getPtr<zim::Archive>(env, archive));
47-
}
47+
} CATCH_EXCEPTION()
4848

4949
GETTER(jstring, getId)
5050

@@ -76,7 +76,7 @@ GETTER(jstring, getCategory)
7676

7777
GETTER(jstring, getTags)
7878

79-
METHOD(jstring, getTagStr, jstring tagName) try {
79+
METHOD(jstring, getTagStr, jstring tagName) {
8080
return TO_JNI(THIS->getTagStr(TO_C(tagName)));
8181
} catch(...) {
8282
return c2jni<std::string>("", env);
@@ -97,8 +97,8 @@ METHOD0(jobjectArray, getIllustrations) {
9797
env->SetObjectArrayElement(retArray, index++, wrapper);
9898
}
9999
return retArray;
100-
}
100+
} CATCH_EXCEPTION(nullptr)
101101

102102
METHOD(jobject, getIllustration, jint size) {
103103
return BUILD_WRAPPER("org/kiwix/libkiwix/Illustration", THIS->getIllustration(TO_C(size)));
104-
}
104+
} CATCH_EXCEPTION(nullptr)

lib/src/main/cpp/libkiwix/bookmark.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
METHOD0(void, setNativeBookmark)
3232
{
3333
SET_PTR(std::make_shared<NATIVE_TYPE>());
34-
}
34+
} CATCH_EXCEPTION()
3535

3636
DISPOSE
3737

@@ -49,24 +49,24 @@ GETTER(jstring, getDate)
4949

5050
METHOD(void, setBookId, jstring bookId) {
5151
THIS->setBookId(TO_C(bookId));
52-
}
52+
} CATCH_EXCEPTION()
5353

5454
METHOD(void, setBookTitle, jstring bookTitle) {
5555
THIS->setBookTitle(TO_C(bookTitle));
56-
}
56+
} CATCH_EXCEPTION()
5757

5858
METHOD(void, setUrl, jstring url) {
5959
THIS->setUrl(TO_C(url));
60-
}
60+
} CATCH_EXCEPTION()
6161

6262
METHOD(void, setTitle, jstring title) {
6363
THIS->setTitle(TO_C(title));
64-
}
64+
} CATCH_EXCEPTION()
6565

6666
METHOD(void, setLanguage, jstring lang) {
6767
THIS->setLanguage(TO_C(lang));
68-
}
68+
} CATCH_EXCEPTION()
6969

7070
METHOD(void, setDate, jstring date) {
7171
THIS->setDate(TO_C(date));
72-
}
72+
} CATCH_EXCEPTION()

lib/src/main/cpp/libkiwix/filter.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,21 +33,21 @@
3333
/* Kiwix Reader JNI functions */
3434
METHOD0(void, allocate) {
3535
SET_PTR(std::make_shared<NATIVE_TYPE>());
36-
}
36+
} CATCH_EXCEPTION()
3737

3838
DISPOSE
3939

4040
#define FORWARD(name, args_type) \
4141
METHOD(jobject, name, args_type value) { \
4242
THIS->name(jni2c(value, env)); \
4343
return thisObj; \
44-
}
44+
} CATCH_EXCEPTION(nullptr)
4545

4646
#define FORWARDA(name, args_type) \
4747
METHOD(jobject, name, jobjectArray value) { \
4848
THIS->name(jni2c<args_type>(value, env)); \
4949
return thisObj; \
50-
}
50+
} CATCH_EXCEPTION(nullptr)
5151

5252

5353

lib/src/main/cpp/libkiwix/illustration.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,22 +32,22 @@
3232
METHOD0(void, dispose)
3333
{
3434
dispose<NATIVE_TYPE>(env, thisObj);
35-
}
35+
} CATCH_EXCEPTION()
3636

3737
METHOD0(jint, width) {
3838
return TO_JNI(THIS->width);
39-
}
39+
} CATCH_EXCEPTION(0)
4040

4141
METHOD0(jint, height) {
4242
return TO_JNI(THIS->height);
43-
}
43+
} CATCH_EXCEPTION(0)
4444

4545
METHOD0(jstring, mimeType) {
4646
return TO_JNI(THIS->mimeType);
47-
}
47+
} CATCH_EXCEPTION(nullptr)
4848

4949
METHOD0(jstring, url) {
5050
return TO_JNI(THIS->url);
51-
}
51+
} CATCH_EXCEPTION(nullptr)
5252

5353
GETTER(jstring, getData)

lib/src/main/cpp/libkiwix/kiwixicu.cpp

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,9 @@
2828
#include "zim/tools.h"
2929

3030
JNIEXPORT void JNICALL Java_org_kiwix_kiwixlib_JNIICU_setDataDirectory(
31-
JNIEnv* env, jclass kclass, jstring dirStr)
31+
JNIEnv* env, jclass kclass, jstring dirStr) try
3232
{
33-
try {
34-
zim::setICUDataDirectory(TO_C(dirStr));
35-
} catch (...) {
36-
std::cerr << "Unable to set data directory " << TO_C(dirStr) << std::endl;
37-
}
33+
zim::setICUDataDirectory(TO_C(dirStr));
34+
} catch(...) {
35+
throwException(env, "java/lang/Exception", "Unable to set data directory");
3836
}

lib/src/main/cpp/libkiwix/kiwixserver.cpp

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -34,15 +34,11 @@
3434
/* Kiwix Reader JNI functions */
3535
METHOD(void, setNativeServer, jobject jLibrary)
3636
{
37-
LOG("Attempting to create server");
38-
try {
39-
auto library = getPtr<kiwix::Library>(env, jLibrary);
40-
SET_PTR(std::make_shared<NATIVE_TYPE>(library.get()));
41-
} catch (std::exception& e) {
42-
LOG("Error creating the server");
43-
LOG("%s", e.what());
44-
}
45-
}
37+
auto library = getPtr<kiwix::Library>(env, jLibrary);
38+
SET_PTR(std::make_shared<NATIVE_TYPE>(library.get()));
39+
} catch (std::exception& e) {
40+
throwException(env, "java/lang/Exception", "Error creating the server");
41+
} CATCH_EXCEPTION()
4642

4743

4844
DISPOSE
@@ -51,39 +47,39 @@ DISPOSE
5147
METHOD(void, setRoot, jstring root)
5248
{
5349
THIS->setRoot(TO_C(root));
54-
}
50+
} CATCH_EXCEPTION()
5551

5652
METHOD(void, setAddress, jstring address)
5753
{
5854
THIS->setAddress(TO_C(address));
59-
}
55+
} CATCH_EXCEPTION()
6056

6157
METHOD(void, setPort, int port)
6258
{
6359
THIS->setPort(TO_C(port));
64-
}
60+
} CATCH_EXCEPTION()
6561

6662
METHOD(void, setNbThreads, int threads)
6763
{
6864
THIS->setNbThreads(TO_C(threads));
69-
}
65+
} CATCH_EXCEPTION()
7066

7167
METHOD(void, setTaskbar, jboolean withTaskbar, jboolean withLibraryButton)
7268
{
7369
THIS->setTaskbar(TO_C(withTaskbar), TO_C(withLibraryButton));
74-
}
70+
} CATCH_EXCEPTION()
7571

7672
METHOD(void, setBlockExternalLinks, jboolean blockExternalLinks)
7773
{
7874
THIS->setBlockExternalLinks(TO_C(blockExternalLinks));
79-
}
75+
} CATCH_EXCEPTION()
8076

8177
METHOD0(jboolean, start)
8278
{
8379
return THIS->start();
84-
}
80+
} CATCH_EXCEPTION(false)
8581

8682
METHOD0(void, stop)
8783
{
8884
THIS->stop();
89-
}
85+
} CATCH_EXCEPTION()

lib/src/main/cpp/libkiwix/library.cpp

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
METHOD0(void, setNativeHandler)
3333
{
3434
SET_PTR(std::make_shared<NATIVE_TYPE>());
35-
}
35+
} CATCH_EXCEPTION()
3636

3737
DISPOSE
3838

@@ -41,43 +41,41 @@ METHOD(jboolean, addBook, jobject book)
4141
{
4242
auto cBook = getPtr<kiwix::Book>(env, book);
4343

44-
try {
45-
return THIS->addBook(*cBook);
46-
} catch (std::exception& e) {
47-
LOG("Unable to add the book");
48-
LOG("%s", e.what()); }
49-
return false;
50-
}
44+
return THIS->addBook(*cBook);
45+
} CATCH_EXCEPTION(false)
5146

5247
METHOD(jobject, getBookById, jstring id) {
5348
return BUILD_WRAPPER2("org/kiwix/libkiwix/Book", THIS->getBookById(TO_C(id)));
54-
}
49+
} CATCH_EXCEPTION(nullptr)
5550

5651
METHOD(jobject, getArchiveById, jstring id) {
57-
return BUILD_WRAPPER("org/kiwix/libzim/Archive", THIS->getArchiveById(TO_C(id)));
58-
}
52+
auto archive = THIS->getArchiveById(TO_C(id));
53+
std::cout << "archive is " << archive << std::endl;
54+
return BUILD_WRAPPER2("org/kiwix/libzim/Archive", archive);
55+
} CATCH_EXCEPTION(nullptr)
5956

6057
METHOD(jboolean, removeBookById, jstring id) {
6158
return TO_JNI(THIS->removeBookById(TO_C(id)));
62-
}
59+
} CATCH_EXCEPTION(false)
6360

6461
METHOD(jboolean, writeToFile, jstring path) {
6562
return TO_JNI(THIS->writeToFile(TO_C(path)));
66-
}
63+
} CATCH_EXCEPTION(false)
64+
6765
METHOD(jboolean, writeBookmarksToFile, jstring path) {
6866
return TO_JNI(THIS->writeBookmarksToFile(TO_C(path)));
69-
}
67+
} CATCH_EXCEPTION(false)
7068

7169
METHOD(jint, getBookCount, jboolean localBooks, jboolean remoteBooks) {
7270
return TO_JNI(THIS->getBookCount(TO_C(localBooks), TO_C(remoteBooks)));
73-
}
71+
} CATCH_EXCEPTION(0)
7472

7573
GETTER(jobjectArray, getBooksIds)
7674

7775
METHOD(jobjectArray, filter, jobject filterObj) {
7876
auto filter = getPtr<kiwix::Filter>(env, filterObj);
7977
return c2jni(THIS->filter(*filter), env);
80-
}
78+
} CATCH_EXCEPTION(nullptr)
8179

8280
GETTER(jobjectArray, getBooksLanguages)
8381
GETTER(jobjectArray, getBooksCategories)
@@ -87,11 +85,11 @@ GETTER(jobjectArray, getBooksPublishers)
8785
METHOD(void, addBookmark, jobject bookmark) {
8886
auto cBookmark = getPtr<kiwix::Bookmark>(env, bookmark);
8987
THIS->addBookmark(*cBookmark);
90-
}
88+
} CATCH_EXCEPTION()
9189

9290
METHOD(jboolean, removeBookmark, jstring zimId, jstring url) {
9391
return TO_JNI(THIS->removeBookmark(TO_C(zimId), TO_C(url)));
94-
}
92+
} CATCH_EXCEPTION(false)
9593

9694
METHOD(jobjectArray, getBookmarks, jboolean onlyValidBookmarks) {
9795
auto bookmarks = THIS->getBookmarks(TO_C(onlyValidBookmarks));
@@ -108,4 +106,4 @@ METHOD(jobjectArray, getBookmarks, jboolean onlyValidBookmarks) {
108106
env->SetObjectArrayElement(retArray, index++, wrapper);
109107
}
110108
return retArray;
111-
}
109+
} CATCH_EXCEPTION(nullptr)

0 commit comments

Comments
 (0)