diff --git a/cpp/wedpr-transport/sdk-wrapper/java/bindings/src/main/java/com/webank/wedpr/sdk/jni/demo/TransportDemo.java b/cpp/wedpr-transport/sdk-wrapper/java/bindings/src/main/java/com/webank/wedpr/sdk/jni/demo/TransportDemo.java index f9ef455..6c1c2c0 100644 --- a/cpp/wedpr-transport/sdk-wrapper/java/bindings/src/main/java/com/webank/wedpr/sdk/jni/demo/TransportDemo.java +++ b/cpp/wedpr-transport/sdk-wrapper/java/bindings/src/main/java/com/webank/wedpr/sdk/jni/demo/TransportDemo.java @@ -15,12 +15,12 @@ package com.webank.wedpr.sdk.jni.demo; -import com.webank.wedpr.sdk.jni.common.WeDPRSDKException; import com.webank.wedpr.sdk.jni.generated.*; import com.webank.wedpr.sdk.jni.generated.Error; import com.webank.wedpr.sdk.jni.transport.IMessage; import com.webank.wedpr.sdk.jni.transport.TransportConfig; import com.webank.wedpr.sdk.jni.transport.WeDPRTransport; +import com.webank.wedpr.sdk.jni.transport.handlers.MessageCallback; import com.webank.wedpr.sdk.jni.transport.handlers.MessageDispatcherCallback; import com.webank.wedpr.sdk.jni.transport.handlers.MessageErrorCallback; import com.webank.wedpr.sdk.jni.transport.impl.TransportImpl; @@ -30,13 +30,15 @@ public class TransportDemo { public static class MessageDispatcherCallbackImpl extends MessageDispatcherCallback { private final String nodeID; + private final WeDPRTransport weDPRTransport; // java -cp 'conf/:lib/*:apps/*' com.webank.wedpr.sdk.jni.demo.TransportDemo agency0Node // "127.0.0.1" 9020 "ipv4:127.0.0.1:40600,127.0.0.1:40601" "agency1Node" // java -cp 'conf/:lib/*:apps/*' com.webank.wedpr.sdk.jni.demo.TransportDemo agency1Node // "127.0.0.1" 9021 "ipv4:127.0.0.1:40620,127.0.0.1:40621" "agency0Node" - public MessageDispatcherCallbackImpl(String nodeID) { + public MessageDispatcherCallbackImpl(String nodeID, WeDPRTransport transport) { this.nodeID = nodeID; + this.weDPRTransport = transport; } @SneakyThrows(Exception.class) @@ -50,7 +52,38 @@ public void onMessage(IMessage message) { + ", payload: " + new String(message.getPayload()) + "#######"); - throw new WeDPRSDKException("Exception test"); + + String response = "#### hello, response!"; + System.out.println( + "#### sendResponse: " + + response + + ", traceID: " + + message.getHeader().getTraceID() + + ",srcNode: " + + new String(message.getHeader().getSrcNode())); + this.weDPRTransport.asyncSendResponse( + message.getHeader().getSrcNode(), + message.getHeader().getTraceID(), + response.getBytes(), + 0, + new MessageErrorCallbackImpl(this.nodeID)); + } + } + + public static class MessageCallbackImpl extends MessageCallback { + + @Override + public void onMessage( + Error error, IMessage message, SendResponseHandler sendResponseHandler) { + if (error != null && error.errorCode() != 0) { + System.out.println("#### MessageCallbackImpl error: " + error.errorMessage()); + return; + } + System.out.println( + "#### receive response: " + + message + + ", payload: " + + new String(message.getPayload())); } } @@ -111,7 +144,7 @@ public static void main(String[] args) throws Exception { // send Message to the gateway String topic = "testTopic"; MessageDispatcherCallback messageDispatcherCallback = - new MessageDispatcherCallbackImpl(nodeID); + new MessageDispatcherCallbackImpl(nodeID, transport); transport.registerTopicHandler(topic, messageDispatcherCallback); System.out.println("##### register topic success"); @@ -130,7 +163,7 @@ public static void main(String[] args) throws Exception { 0, 10000, new MessageErrorCallbackImpl(nodeID), - null); + new MessageCallbackImpl()); // push String syncPayload = "sync_" + payLoad; diff --git a/cpp/wedpr-transport/sdk-wrapper/java/bindings/src/main/java/com/webank/wedpr/sdk/jni/transport/IMessageBuilder.java b/cpp/wedpr-transport/sdk-wrapper/java/bindings/src/main/java/com/webank/wedpr/sdk/jni/transport/IMessageBuilder.java index 6b61f21..d63c99e 100644 --- a/cpp/wedpr-transport/sdk-wrapper/java/bindings/src/main/java/com/webank/wedpr/sdk/jni/transport/IMessageBuilder.java +++ b/cpp/wedpr-transport/sdk-wrapper/java/bindings/src/main/java/com/webank/wedpr/sdk/jni/transport/IMessageBuilder.java @@ -22,6 +22,9 @@ public class IMessageBuilder { public static IMessage build(Message msg) { + if (msg == null) { + return null; + } return new MessageImpl(msg); } diff --git a/cpp/wedpr-transport/sdk-wrapper/java/src/wedpr_java_transportJAVA_wrap.cxx b/cpp/wedpr-transport/sdk-wrapper/java/src/wedpr_java_transportJAVA_wrap.cxx index c5bc735..5624a7c 100644 --- a/cpp/wedpr-transport/sdk-wrapper/java/src/wedpr_java_transportJAVA_wrap.cxx +++ b/cpp/wedpr-transport/sdk-wrapper/java/src/wedpr_java_transportJAVA_wrap.cxx @@ -222,6 +222,22 @@ static void SWIGUNUSED SWIG_JavaThrowException(JNIEnv *jenv, SWIG_JavaExceptionC #define SWIG_contract_assert(nullreturn, expr, msg) do { if (!(expr)) {SWIG_JavaThrowException(jenv, SWIG_JavaIllegalArgumentException, msg); return nullreturn; } } while (0) +/* SWIG Errors applicable to all language modules, values are reserved from -1 to -99 */ +#define SWIG_UnknownError -1 +#define SWIG_IOError -2 +#define SWIG_RuntimeError -3 +#define SWIG_IndexError -4 +#define SWIG_TypeError -5 +#define SWIG_DivisionByZero -6 +#define SWIG_OverflowError -7 +#define SWIG_SyntaxError -8 +#define SWIG_ValueError -9 +#define SWIG_SystemError -10 +#define SWIG_AttributeError -11 +#define SWIG_MemoryError -12 +#define SWIG_NullReferenceError -13 + + /* ----------------------------------------------------------------------------- * director_common.swg * @@ -836,6 +852,44 @@ template T SwigValueInit() { #include // Use the C99 official header +SWIGINTERN void SWIG_JavaException(JNIEnv *jenv, int code, const char *msg) { + SWIG_JavaExceptionCodes exception_code = SWIG_JavaUnknownError; + switch(code) { + case SWIG_MemoryError: + exception_code = SWIG_JavaOutOfMemoryError; + break; + case SWIG_IOError: + exception_code = SWIG_JavaIOException; + break; + case SWIG_SystemError: + case SWIG_RuntimeError: + exception_code = SWIG_JavaRuntimeException; + break; + case SWIG_OverflowError: + case SWIG_IndexError: + exception_code = SWIG_JavaIndexOutOfBoundsException; + break; + case SWIG_DivisionByZero: + exception_code = SWIG_JavaArithmeticException; + break; + case SWIG_SyntaxError: + case SWIG_ValueError: + case SWIG_TypeError: + exception_code = SWIG_JavaIllegalArgumentException; + break; + case SWIG_UnknownError: + default: + exception_code = SWIG_JavaUnknownError; + break; + } + SWIG_JavaThrowException(jenv, exception_code, msg); +} + + +#include +#include + + #include #include @@ -3766,7 +3820,6 @@ SWIGEXPORT jbyteArray JNICALL Java_com_webank_wedpr_sdk_jni_generated_wedpr_1jav { jresult = jenv->NewByteArray((&result)->len); jenv->SetByteArrayRegion(jresult, 0, (&result)->len, (jbyte *) (&result)->data); - delete[] (&result)->data; } return jresult; } @@ -3877,7 +3930,6 @@ SWIGEXPORT jbyteArray JNICALL Java_com_webank_wedpr_sdk_jni_generated_wedpr_1jav { jresult = jenv->NewByteArray((&result)->len); jenv->SetByteArrayRegion(jresult, 0, (&result)->len, (jbyte *) (&result)->data); - delete[] (&result)->data; } return jresult; } @@ -4882,7 +4934,6 @@ SWIGEXPORT jbyteArray JNICALL Java_com_webank_wedpr_sdk_jni_generated_wedpr_1jav { jresult = jenv->NewByteArray((&result)->len); jenv->SetByteArrayRegion(jresult, 0, (&result)->len, (jbyte *) (&result)->data); - delete[] (&result)->data; } return jresult; } @@ -5444,7 +5495,6 @@ SWIGEXPORT jbyteArray JNICALL Java_com_webank_wedpr_sdk_jni_generated_wedpr_1jav { jresult = jenv->NewByteArray((&result)->len); jenv->SetByteArrayRegion(jresult, 0, (&result)->len, (jbyte *) (&result)->data); - delete[] (&result)->data; } return jresult; } diff --git a/cpp/wedpr-transport/sdk-wrapper/java/swig/wedpr_java_transport.i b/cpp/wedpr-transport/sdk-wrapper/java/swig/wedpr_java_transport.i index 212ffdd..fd0a6d1 100644 --- a/cpp/wedpr-transport/sdk-wrapper/java/swig/wedpr_java_transport.i +++ b/cpp/wedpr-transport/sdk-wrapper/java/swig/wedpr_java_transport.i @@ -2,6 +2,7 @@ %include "stdint.i" %include "typemaps.i" +%include #if defined(SWIGJAVA) #if defined(SWIGWORDSIZE64) @@ -173,11 +174,10 @@ namespace bcos{ %typemap(argout) OutputBuffer { JCALL3(ReleaseByteArrayElements, jenv, $input, (jbyte *) $1.data, 0); } -// Note: will cause copy herer +// Note: will cause copy here %typemap(out) OutputBuffer { $result = JCALL1(NewByteArray, jenv, $1.len); JCALL4(SetByteArrayRegion, jenv, $result, 0, $1.len, (jbyte *) $1.data); - delete[] $1.data; } %typemap(javain) OutputBuffer "$javainput" %typemap(javaout) OutputBuffer { return $jnicall; }