4

I am sending string after converting to byte array using alljoyn, that string contain image (after converting in String using Base64) also. it is working fine, but in case of some images it gives following error

08-08 18:55:21.158  20724-21095/co.coinflipsrl.infomage E/ALLJOYN﹕ 20.237 ****** ERROR ALLJOYN external          ...oyn_core/src/MsgArg.cc:790 |  0x900d
08-08 18:55:21.159  20724-21095/co.coinflipsrl.infomage E/ALLJOYN_JAVA﹕ 20.238 ****** ERROR ALLJOYN_JAVA external     .../jni/alljoyn_java.cc:11480 |  0x0001
08-08 18:55:21.161  20724-21095/co.coinflipsrl.infomage E/SimpleClient﹕ SimpleInterface.Ping(): org.alljoyn.bus.MarshalBusException: cannot marshal class [B into 'ay'
org.alljoyn.bus.MarshalBusException: cannot marshal class [B into 'ay'
        at org.alljoyn.bus.MsgArg.marshal(MsgArg.java:534)
        at org.alljoyn.bus.MsgArg.marshal(MsgArg.java:556)
        at org.alljoyn.bus.ProxyBusObject.methodCall(Native Method)
        at org.alljoyn.bus.ProxyBusObject.access$300(ProxyBusObject.java:35)
        at org.alljoyn.bus.ProxyBusObject$Handler.invoke(ProxyBusObject.java:264)
        at java.lang.reflect.Proxy.invoke(Proxy.java:397)
        at $Proxy2.Ping(Unknown Source)
        at co.coinflipsrl.infomage.sharing.alljoynshare.ClientFragment$BusHandler.handleMessage(ClientFragment.java:292)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:135)
        at android.os.HandlerThread.run(HandlerThread.java:61)
 Caused by: org.alljoyn.bus.BusException: ER_BUS_BAD_VALUE
        at org.alljoyn.bus.MsgArg.set(Native Method)
        at org.alljoyn.bus.MsgArg.marshal(MsgArg.java:464)

           
sending code is:

 sendUiMessage(MESSAGE_PING, msg.obj);
                        byte[] sentObj = (byte[]) msg.obj;
                        Object reply = mSimpleInterface.Ping((byte[]) msg.obj);
                        byte[] receivedObj = (byte[]) reply;
                        if (Arrays.equals(sentObj, receivedObj)) {
                            sendUiMessage(MESSAGE_PING_REPLY, true);
                        } else {
                            sendUiMessage(MESSAGE_PING_REPLY, false);
                        }

receiving code is:

 public byte[] Ping(byte[] inStr) {

        sendUiMessage(MESSAGE_PING, inStr);

         //Simply echo the ping message.
        sendUiMessage(MESSAGE_PING_REPLY, inStr);
        return inStr;
    }

    /* Helper function to send a message to the UI thread. */
    private void sendUiMessage(int what, Object obj) {
        mHandler.sendMessage(mHandler.obtainMessage(what, obj));
    }
startxlabs
  • 11
  • 3

2 Answers2

1

i think your data is null. null cannot be sent though the alljoyn

Object reply = mSimpleInterface.Ping((byte[]) msg.obj);
jknair0
  • 1,194
  • 13
  • 24
0

This exception occurred when byte array size is large, I overcome this problem by sending my data in multiple packets in fixed size byte array of 100000. Hope this will help.

FileInputStream fis = new FileInputStream(path);
byte[] buf = new byte[100000];

while (fis.read(buf) > 0) {
    mSimpleInterface.Ping(buf);
    transferedFileBytes += buf.length;
}
Divy Soni
  • 824
  • 9
  • 22