-2

for few days now i am trying to send data over socket using flatbuffers

Schema:

namespace Objects;

union Parameters { Login, Register }

table Message {
  parameters:Parameters;
}

table Login{
    email:string;
    password:string;
}

table Register{
    email:string;
    password:string;
}

root_type Message;
file_identifier "MESG";

My builder:

FlatBufferBuilder fbb = new FlatBufferBuilder(1);
        FlatBufferBuilder ftb = new FlatBufferBuilder(1);

        String buffer = "EMAILCHE";
        int id = ftb.createString(buffer);

        Login.startLogin(ftb);
        Login.addEmail(ftb, id);
        Login.addPassword(ftb, id);
        int offset = Login.endLogin(ftb);

        Message.startMessage(fbb);

        Message.addParametersType(fbb, Parameters.Login);
        Message.addParameters(fbb, offset);

        int par = Message.endMessage(fbb);

        Message.finishMessageBuffer(fbb, par);

Deserialization:

ByteBuffer bff = fbb.dataBuffer();

        Message.MessageBufferHasIdentifier(bff);

        Message lg = Message.getRootAsMessage(bff);


        switch (lg.parametersType()){

            case Parameters.Login:
                Login saveSchema = Login.getRootAsLogin(lg.getByteBuffer());
                System.out.println(saveSchema.email());
                break;
            case Parameters.Register:
                System.out.println("reg");
                break;

        }

Index out of bounds exception is thrown on this line: System.out.println(saveSchema.email()); Full error: Exception in thread "main" java.lang.IndexOutOfBoundsException

Lundira
  • 169
  • 3
  • 12

2 Answers2

0

Use just a single FlatBufferBuilder. You can't refer to data in one buffer from another.

Aardappel
  • 5,559
  • 1
  • 19
  • 22
  • In addition, replace `Login.getRootAsLogin(lg.getByteBuffer())` with `(Login)lg.parameter()`. `getRootAsX` functions are only for the root of a FlatBuffer. – Aardappel Feb 18 '16 at 17:53
0

Instead of:

Login saveSchema = Login.getRootAsLogin(lg.getByteBuffer());
                System.out.println(saveSchema.email());

this:

Login saveLogin = new Login();
                saveLogin = (Login) lg.parameters(saveLogin);

                System.out.println(saveLogin.password());
Lundira
  • 169
  • 3
  • 12