You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by rg...@apache.org on 2013/02/04 10:42:13 UTC

svn commit: r1442057 - in /qpid/proton/trunk/proton-c/bindings/java: java.i src/main/java/org/apache/qpid/proton/codec/jni/JNIData.java

Author: rgodfrey
Date: Mon Feb  4 09:42:13 2013
New Revision: 1442057

URL: http://svn.apache.org/viewvc?rev=1442057&view=rev
Log:
PROTON-192: Update JNI Binding to handle byte[] containing nulls

Modified:
    qpid/proton/trunk/proton-c/bindings/java/java.i
    qpid/proton/trunk/proton-c/bindings/java/src/main/java/org/apache/qpid/proton/codec/jni/JNIData.java

Modified: qpid/proton/trunk/proton-c/bindings/java/java.i
URL: http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/bindings/java/java.i?rev=1442057&r1=1442056&r2=1442057&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/bindings/java/java.i (original)
+++ qpid/proton/trunk/proton-c/bindings/java/java.i Mon Feb  4 09:42:13 2013
@@ -349,6 +349,22 @@ JNIEXPORT jbyteArray JNICALL Java_org_ap
 }
 %}
 
+%native (pn_bytes_from_array) void pn_bytes_from_array(pn_bytes_t, jbyteArray);
+%{
+JNIEXPORT void JNICALL Java_org_apache_qpid_proton_jni_ProtonJNI_pn_1bytes_1from_1array(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jbyteArray byteArr)
+{
+    pn_bytes_t* b = *(pn_bytes_t **)&jarg1;
+    size_t sz = (*jenv)->GetArrayLength(jenv, byteArr);
+    if(b->start) free(b->start);
+    
+    jbyte* barr = (*jenv)->GetByteArrayElements(jenv, byteArr, NULL);
+    b->size = sz;
+    b->start = malloc(sz);
+    memcpy(b->start, barr, sz);
+    (*jenv)->ReleaseByteArrayElements(jenv, byteArr, barr, 0);
+}
+%}
+
 
 
 ssize_t  pn_transport_input(pn_transport_t *transport, char *DATA, size_t SIZE);

Modified: qpid/proton/trunk/proton-c/bindings/java/src/main/java/org/apache/qpid/proton/codec/jni/JNIData.java
URL: http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/bindings/java/src/main/java/org/apache/qpid/proton/codec/jni/JNIData.java?rev=1442057&r1=1442056&r2=1442057&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/bindings/java/src/main/java/org/apache/qpid/proton/codec/jni/JNIData.java (original)
+++ qpid/proton/trunk/proton-c/bindings/java/src/main/java/org/apache/qpid/proton/codec/jni/JNIData.java Mon Feb  4 09:42:13 2013
@@ -462,10 +462,10 @@ public class JNIData implements Data
     public void putBinary(final Binary bytes)
     {
         pn_bytes_t bytes_t = new pn_bytes_t();
-        bytes_t.setSize(bytes.getLength());
         byte[] data = new byte[bytes.getLength()];
         System.arraycopy(bytes.getArray(),bytes.getArrayOffset(),data,0,bytes.getLength());
-        bytes_t.setStart(data);
+        Proton.pn_bytes_from_array(bytes_t, data);
+
         Proton.pn_data_put_binary(_impl, bytes_t);
         //TODO
     }
@@ -476,8 +476,7 @@ public class JNIData implements Data
     {
         byte[] data = string.getBytes(UTF8_CHARSET);
         pn_bytes_t bytes_t = new pn_bytes_t();
-        bytes_t.setStart(data);
-        bytes_t.setSize(data.length);
+        Proton.pn_bytes_from_array(bytes_t, data);
         Proton.pn_data_put_string(_impl, bytes_t);
 
         //TODO
@@ -489,8 +488,7 @@ public class JNIData implements Data
     {
         byte[] data = symbol.toString().getBytes(ASCII_CHARSET);
         pn_bytes_t bytes_t = new pn_bytes_t();
-        bytes_t.setStart(data);
-        bytes_t.setSize(data.length);
+        Proton.pn_bytes_from_array(bytes_t, data);
         Proton.pn_data_put_symbol(_impl, bytes_t);
         //TODO
     }



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org