Hi Sean,
thanks for your help but we found another problem:
after we insert the valid json:
{ok,Pid} = riakc_pb_socket:start_link("10.10.10.74", 8087),
Value = mochijson2:encode({struct, [{id, 22}]}),
In = riakc_obj:new(<<"mm">>,<<"1">>,Value,"application/json"),
riakc_pb_socket:put(Pid,In)
we read it from erlang:
{ok, Obj} = riakc_pb_socket:get(Pid,"mm","1"),
io:format("Obj: ~p~n",[Obj]),
ContentType = riakc_obj:get_content_type(Obj),
io:format("ContentType: ~p~n",[ContentType]),
Obj: {riakc_obj,"mm","1",
<<107,206,97,96,96,96,204,96,202,5,82,28,202,156,255,126,250,
115,109,75,206,96,74,228,206,99,101,152,17,87,127,130,47,11,0>>,
[{{dict,3,16,16,8,80,48,
{[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]},
{{[],[],[],[],[],[],[],[],[],[],
[[<<"X-Riak-VTag">>,51,122,101,57,117,75,111,98,113,
118,97,77,100,117,114,76,97,56,122,68,115,70],
[<<"content-type">>,97,112,112,108,105,99,97,116,
105,111,110,47,120,45,101,114,108,97,110,103,45,
98,105,110,97,114,121]],
[],[],
[[<<"X-Riak-Last-Modified">>|{1326,113432,240315}]],
[],[]}}},
<<131,107,0,4,84,69,83,84>>}],
undefined,undefined}
ContentType: "application/x-erlang-binary"
We received every time x-erlang-binary
When we wrote the same over the http api for example:
curl -X PUT -H "Content-Type: application/json" -i
http://127.0.0.1:8098/riak/mm/2 -d '{"email:","email to
email.com","pass":"123123"}'
Obj: {riakc_obj,"mm","2",
<<107,206,97,96,96,96,204,96,202,5,82,28,202,156,255,126,250,
115,157,14,206,96,74,100,204,99,101,232,115,175,63,193,151,5,
0>>,
[{{dict,3,16,16,8,80,48,
{[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]},
{{[],[],[],[],[],[],[],[],[],[],
[[<<"X-Riak-VTag">>,122,97,52,89,80,115,106,112,121,
57,118,98,68,81,114,66,56,72,109,78,52],
[<<"content-type">>,97,112,112,108,105,99,97,116,
105,111,110,47,106,115,111,110]],
[],[],
[[<<"X-Riak-Last-Modified">>|{1326,107534,668061}]],
[],[]}}},
<<"{\"email:\",\"email to
email.com\",\"pass\":\"123123\"}">>}],
undefined,undefined}
ContentType: "application/json"
It looks like the risk_obj:new don't write the right content-type.
Can you imagine why ?
Thanks
Marcel
Am 07.01.2012 um 18:29 schrieb Sean Cribbs:
> Marcel,
>
> {ok,Pid} = riakc_pb_socket:start_link("127.0.0.1", 8087),
> Tuple = "{\"id\",22}",
>
> That is not valid JSON, first of all.
>
> Obj = riakc_obj:new("mm","1",Tuple),
>
> Make sure that you set the content type here, otherwise it won't be detected
> on the Java side. (example below)
>
> riakc_pb_socket:put(Pid,Obj),
>
> After then we try to read from risk-java-client:
>
> RiakClient httpClient = new RiakClient("http://10.10.10.61:8098/riak");
> IRiakClient client = RiakFactory.httpClient(httpClient);
> Bucket b = client.fetchBucket("mm").execute();
> IRiakObject fetched = b.fetch("1").execute();
> String decodedString = new String(fetched.getValue());
> System.out.println(decodedString);
>
> I convert the Object to an HexString: 83 6B 00 05 7B 22 6E 22 7D
>
>
> Decoding that byte array in Erlang gives:
>
> 1> <<16#83,16#6B,0,5,16#7B,16#22,16#6E,16#22,16#7D>>.
> <<131,107,0,5,123,34,110,34,125>>
> 2> binary_to_term(v(1)).
> "{\"n\"}"
> 3>
>
> The default behavior of the Erlang client is to serialize terms to binary
> unless the content type is explicit and the value of the object is a binary.
> Try this instead:
>
> Value = mochijson2:encode({struct, [{id, 22}]}),
> Obj = riakc_obj:new(<<"mm">>,<<"1">>,Value,"application/json"),
> riakc_pb_socket:put(Pid, Obj)
>
> Then re-read it from the Java side and you should get what you expect.
>
> My question is:
>
> 1. What are the first 4 bytes ?
>
> A binary that starts with byte 131 is typically in Erlang
> term_to_binary/binary_to_term format.
>
> 2. how can i receive a string with out the 4 bytes ?
>
> See above.
>
> 3. How can i convert the string into a JSON Object ?
>
>
> See above, and then use Jackson to decode the value (I believe the Java
> client may do this automatically for you).
>
> --
> Sean Cribbs <[email protected]>
> Software Engineer
> Basho Technologies, Inc.
> http://basho.com/
>
_______________________________________________
riak-users mailing list
[email protected]
http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com