From b697e66b2c04c848ca71303fbb8206b9bb4a8af2 Mon Sep 17 00:00:00 2001 From: MathewFrancis Date: Sun, 17 Aug 2025 11:03:31 +0530 Subject: [PATCH] JNI test connection with spring --- JNI/build.sh | 8 +++++ JNI/libbtcjni.so | Bin 0 -> 15736 bytes JNI/native_impl.c | 28 ++++++++++++++++++ .../config/CezenRoutsSecurityChain.java | 1 + .../cezenBTC/controller/BtcOperations.java | 6 ++++ .../cezenBTC/service/BtcRaceService.java | 9 ++++++ .../cezenBTC/service/NativeBridge.java | 14 +++++++++ 7 files changed, 66 insertions(+) create mode 100755 JNI/build.sh create mode 100755 JNI/libbtcjni.so create mode 100644 JNI/native_impl.c create mode 100644 springHorse/src/main/java/com/example/cezenBTC/service/NativeBridge.java diff --git a/JNI/build.sh b/JNI/build.sh new file mode 100755 index 0000000..282d3bb --- /dev/null +++ b/JNI/build.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash +set -e +gcc -fPIC -shared \ + -I"$JAVA_HOME/include" \ + -I"$JAVA_HOME/include/linux" \ + -o libbtcjni.so native_impl.c +echo "Built libbtcjni.so" + diff --git a/JNI/libbtcjni.so b/JNI/libbtcjni.so new file mode 100755 index 0000000000000000000000000000000000000000..df4c67c2b4ca83f65c7e4dc81e28c4ea7e76d395 GIT binary patch literal 15736 zcmeHOYit}>6~607vnBB(#Z}y-Nv0^4T#`&&#|aIU8^1FNwi6OtfxL_=Zt5k z>q;pSKVYu3``vTydCi$SJNNFK`CR|tKvg6nxK)dX#Tq3<7Y(c&U>z)P?C-;%N2it~-Wm8bpCo_lorfqLHzTE2<`Zq;oH;T)DnM)=W2q*$*l!{l z$LsaFZw&va?%;DvJ)L_RZXMrI_vP=PD4O2@AGAyHcg;qkl85Ku`Byjn>DJ52SD{<6 zVGK%zkuL%7t_u7o*5RXnrGosPb@&6oe_sXp=YV&Ys24UlS4d`*_=h&TjEB%6HeH`c zXES=vHY{7$g?@BoNROMAIg!lSrZqCuo62U)5o0W6x?`0`^w_kak0&!mDtX2f$BZdM zk7d)kIc=mTQ>Gp>&zPB>kzPG#T2slGsSg`=a?0$nlJN;sPnfAxR^&31Rx)FcLqrfv z>@hu-cuXHRlBwG@XT;+ol^lzyxvY9n92q>?)2p|u?dk!qFDGvV&V4nU_XvHv=|JwQ z(B=7=-%$}jwE%EtUL-(d#A41^g7GZ1DV%s`ld zFa!S&8MxK3<6qj@rKnb{y|PaT?cBUw@oR<4*H#@zD|~NJ!i5EZxK^xbX_fZ-S00$x&R#~Yu=i=jb5gn}28**Atmn1j z91aoxhoAx$f29?E*6l3*Wdmeqq#ilvN+@*pGJ>$TfH?LVzAruxxgtu6x1jjk;rrfaQo|ygU=v8@^{C15fGojVvC$PDI(L2k!_ncM4y5^ z=Puyg3!h7Wa~!lO>Kg~@n~ybYJRO}ChqoSj|NdR_@h0lS-v;6ZkmF}^D31J3zz6je zKyGLgaDw@x;+A}rO#(z{7HyY0Tev`2#$s=%s`ldFau!*!VH8N z2s037Ak09RfiMIA`x)T6MXpnXEt+gt3yE!$3tnL)6hX@N4Aq(5Lp0YzZX=raR9lJW zx=7roVdL>PR-G);%T%0*drWN0RFufIjLk&9#~l{`B-}{YOvts2C8~$ynn$_U1R2~v zV#C^BY+GCq*T^yR+lb~kFOnP-h04bM;HjyM-z{Q?C*(wP9$`Bw$4fP?-kU^ooMi65 z23)rubl66l>@GsCPd(Dx`$463bS$5-^U4GJ)%|MQ-h+8bwtu$0Lv8E0pV&c*1$E1_{!Kmz!DDKuwyhVJ0{r`k&-0b-eE>QUagS*3aygv;Ude~EPIbBN zs1Tom4%+AW&-^JV|6Z@Ym-!cKs#cZ=Zp{G}AwEVzE3<*!TmW-mX?Uy}SSg0C0mSHXc*3Aow<`Huo$VId#x z0zUmD__#tGUWY%jj-8m4e|sJKv+KxTBKcr_`wigBKa$F#0U~DEIXgc-uExY#xw~$s z^%xes=b#Ebp4BH(*)b!f$L*|@(~bPJfTDJ&XSdC`+E!Tti{O*GVOhqEZf0z2MvPlV z+SKFubb1CkW{@Bv}z`oPKVp?8@G8M=z6F3~`||CBifg{vS)V+YqXmpedAygEgjH8}3|kHMkG1jC2x= zfoZf1QA#^wxtvg8Hm6~d1}}|wL*xA(@0om`y+|EKC18~Ar_5HNan_^_Yb(IvVUGjFt(B;>jnLP2*z;@!TP+;V7x~9xEz3=6mQ+a_y1GC!+SaF^SXtR z*C`+(8`|)TiKhP`?N~%n7gay!#E^cX&MsBC>HDOrM92Utb|TM)uG0 zH0-%~I-q}o1Q=O?C=XiKj{Cbz(bqt|AYbrG{*0`r1#D9 zhZ(UdNS4zjaMj_E?Yc&450yGaK7n zMV4bTK^hnI$m95V{oTBdKBa@r34A{nc_i-fS%0_3aXYN0KjRtYw3A+F< h|NQ%f`#Fx?uU~2>Dqx)bvh3#d^l9SP1r!3L_&3!!pU(gQ literal 0 HcmV?d00001 diff --git a/JNI/native_impl.c b/JNI/native_impl.c new file mode 100644 index 0000000..557ca00 --- /dev/null +++ b/JNI/native_impl.c @@ -0,0 +1,28 @@ +//native_impl.c + +#include +#include +#include + +// JNI functions for com.example.cezenBTC.service.NativeBridge + +JNIEXPORT jstring JNICALL +Java_com_example_cezenBTC_service_NativeBridge_hello(JNIEnv *env, jclass clazz, jstring jname) { + (void)clazz; // unused + const char *name = jname ? (*env)->GetStringUTFChars(env, jname, NULL) : "World"; + + char buf[256]; + snprintf(buf, sizeof(buf), "Hello from JNI, %s!", (name && *name) ? name : "World"); + + if (jname) { + (*env)->ReleaseStringUTFChars(env, jname, name); + } + return (*env)->NewStringUTF(env, buf); +} + +JNIEXPORT jint JNICALL +Java_com_example_cezenBTC_service_NativeBridge_add(JNIEnv *env, jclass clazz, jint a, jint b) { + (void)env; (void)clazz; + return a + b; +} + diff --git a/springHorse/src/main/java/com/example/cezenBTC/config/CezenRoutsSecurityChain.java b/springHorse/src/main/java/com/example/cezenBTC/config/CezenRoutsSecurityChain.java index 36d8396..7856f1d 100755 --- a/springHorse/src/main/java/com/example/cezenBTC/config/CezenRoutsSecurityChain.java +++ b/springHorse/src/main/java/com/example/cezenBTC/config/CezenRoutsSecurityChain.java @@ -109,6 +109,7 @@ public class CezenRoutsSecurityChain { "/btc/get_races_by_venue_id", "/btc/get_all_races_by_today", "/btc/get_race_card", + "/btc/tester", "/cezen/set_aors", "/cezen/set_password", "/cezen/add_extension" diff --git a/springHorse/src/main/java/com/example/cezenBTC/controller/BtcOperations.java b/springHorse/src/main/java/com/example/cezenBTC/controller/BtcOperations.java index 954ecd2..ed4b9cc 100644 --- a/springHorse/src/main/java/com/example/cezenBTC/controller/BtcOperations.java +++ b/springHorse/src/main/java/com/example/cezenBTC/controller/BtcOperations.java @@ -47,4 +47,10 @@ public class BtcOperations { return this.btcRaceService.getRaceCard(LocalDate.now()); } + + @GetMapping("/tester") + public ResponseEntity testData(){ + + return this.btcRaceService.testConnection(); + } } diff --git a/springHorse/src/main/java/com/example/cezenBTC/service/BtcRaceService.java b/springHorse/src/main/java/com/example/cezenBTC/service/BtcRaceService.java index 0cc8233..d545a9a 100644 --- a/springHorse/src/main/java/com/example/cezenBTC/service/BtcRaceService.java +++ b/springHorse/src/main/java/com/example/cezenBTC/service/BtcRaceService.java @@ -114,4 +114,13 @@ public class BtcRaceService { return ResponseEntity.status(200).body(raceCard); } + + // this is a JNI test to spring + public ResponseEntity testConnection(){ + + //jni logic here + String msg = NativeBridge.hello("Spring"); + int sum = NativeBridge.add(21, 21); + return ResponseEntity.ok(msg + " | add(21,21)=" + sum); + } } diff --git a/springHorse/src/main/java/com/example/cezenBTC/service/NativeBridge.java b/springHorse/src/main/java/com/example/cezenBTC/service/NativeBridge.java new file mode 100644 index 0000000..a097d48 --- /dev/null +++ b/springHorse/src/main/java/com/example/cezenBTC/service/NativeBridge.java @@ -0,0 +1,14 @@ +package com.example.cezenBTC.service; + +public final class NativeBridge { + public static native String hello(String name); + public static native int add(int a, int b); + + static { + // ABSOLUTE PATH to the generated library + // Linux: libbtcjni.so, macOS: libbtcjni.dylib, Windows: btcjni.dll + System.load("/home/mathew/Desktop/dev/horse/JNI_spring/btc_horse/JNI/libbtcjni.so"); // <-- change this to the real path + } + + private NativeBridge() {} +} \ No newline at end of file