We used XStream in a previous company for serializing very large amounts of
java call traces, and it worked very well.

Bob

On Wed, Jun 25, 2008 at 4:35 PM, Ian Boston <[EMAIL PROTECTED]> wrote:

>
>
> Some comments also inline:
>
>
> This bit looks like it works OOTB,
>
>  public String convertToString(Object pojo) {
>    JSONObject jsonObject = JSONObject.fromObject(pojo);
>    return jsonObject.toString();
>  }
>
> and
>
> I am still working on this, although I think that the jsonConfig or the
> Guice module will need a bit more here.
> The Impl's need to be bound to the interfaces in the injector, and there
> might need to be a field translator in the config.
>
> public <T> T convertToObject(String string, final Class<T> rootBeanClass) {
>    JSONObject jsonObject = JSONObject.fromObject(string);
>    JsonConfig jsonConfig = new JsonConfig();
>
>  // enable Guice
>    jsonConfig.setNewBeanInstanceStrategy(new NewBeanInstanceStrategy(){
>
>
>
>      @SuppressWarnings("unchecked")
>      @Override
>      public Object newInstance(Class beanClass, JSONObject jsonObject)
>          throws InstantiationException, IllegalAccessException,
>          SecurityException, NoSuchMethodException,
> InvocationTargetException {
>        if ( beanClass == null ) {
>          beanClass = rootBeanClass;
>        }
>        Object o =
>  BeanJsonLibConverter.this.injector.getInstance(beanClass);
>        return o;
>      }
>
>    });
>
> // load the JSON
>    T rootObject = injector.getInstance(rootBeanClass);
>    Object o =  JSONObject.toBean(jsonObject,rootObject,jsonConfig);
>    return (T) o;
>  }
>
> More comments inline:
>
>
> On 26 Jun 2008, at 00:14, Louis Ryan wrote:
>
>  Notes inlined....
>>
>> On Wed, Jun 25, 2008 at 3:47 PM, Ian Boston <[EMAIL PROTECTED]> wrote:
>>
>>  Ryan,
>>> I have been looking at json-lib over the past few days, and have the
>>> java -> json serialization all working, and some of the json -> java
>>> serialization working (as BeanJsonLibConverter) with the classes
>>> coming from a guice injector (so that the calls can bind to interfaces
>>> rather than concrete classes). I was also going to look at Xstream
>>> because I had heard it was good.... comparitive evidence being better
>>> than guesswork.......but I will leave XStream if you are going to look
>>> at it.
>>>
>>
>>
>> I guess the answer here will be whichever one we like best. Im hopeful
>> that
>> XStream will be a very small amount of code but I'Inm just starting. It
>> does
>> have the advantage of creating an idiomatic non-ATOM XML API that matches
>> the JSON one basically for free if we want it. If you have a patch you
>> want
>> me to look at send it along.
>>
>>
>>
>>
>>>
>>> One thing that this has lead me to realize is that whatever the
>>> serialization mechanism is, we need to have some test cases that can
>>> validate as much of the API as possible without relying on hand coding
>>> the test cases and risking transcription errors. I dont know if it
>>> will work, but I am loading the opesocial-reference/features.xml into
>>> a Rhino context and extracting the json definition direct from the js
>>> api. Hopefully this will mean that the wire protocol stays in step
>>> with the js api definition, and the unit tests wont rely on
>>> hand-recoding each time the API is revision(ed).
>>>
>>> Is this a dumb idea ?
>>>
>>
>>
>> An interesting idea for sure but this may end up being tricky, how are you
>> extracting the JSON format from the JS API as it isnt something which is
>> explicitly 'declared' in that code but rather just consumed.
>>
>
>
> 2 approaches (experiments), but I am not certain if they will work.
>
> I can drill into the attributes defining the JSON fields and validate that
> the JSON has the required structure.
>
> eg opensocial.Person.Fields contains the names of the JSON fields for
> Person, it may need knowledge that person has fields containing other fields
> eg addresses.
>
> I am not expecting this to give a complete test, but it might validate some
> of the structure of the message.
>
> Or (if I can find the right place to do it) I can parse the JSON inside
> Rhino, and then look in via the API access methods that use the Fields... I
> remember seeing a generic getter somewhere at one point when scanning the
> js.
>
>
>
>
>>
>>
>>>
>>> and is completing a json-lib serializer a waste of effort ?
>>>
>>> Ian (not wanting to duplicate effort unnecessarily)
>>>
>>> 2008/6/25 Louis Ryan <[EMAIL PROTECTED]>:
>>>
>>>> Ok now that Im back to working on the RESTful side of things I took a
>>>>
>>> look
>>>
>>>> at Pauls suggestion to use XStream as the serialization mechanism at
>>>>
>>> least
>>>
>>>> for JSON handling and I think it has a lot of merit. Im going to do some
>>>> prototyping in Shindig with this.
>>>>
>>>> I've been catching up on the code since Im back from vacation so Ill
>>>>
>>> start
>>>
>>>> to make contributions in this area mostly focused on the JSON APIs
>>>>
>>> initially
>>>
>>>> as this seems to be where the most interest is and where the
>>>>
>>> implementation
>>>
>>>> path is clearest. My goal will be to have the Shindig JSON
>>>> implementation
>>>> working end-to-end in Orkut in large part to provide feedback on the API
>>>> stack based on a working implementation (I hate working in a bubble!)
>>>>
>>>>
>>>> On Tue, Jun 10, 2008 at 3:11 PM, Paul Lindner <[EMAIL PROTECTED]> wrote:
>>>>
>>>>  It's not enunciate that provides the magic, it just uses xstream to do
>>>>>
>>>> the
>>>
>>>> dirty work:
>>>>>
>>>>> http://xstream.codehaus.org/json-tutorial.html
>>>>>
>>>>> You can either use jettison or your own driver.
>>>>>
>>>>> For the jaxb mappings you can add something like this to the top of the
>>>>> model classes:
>>>>> @XmlRootElement(
>>>>>           name = "person",
>>>>>           namespace = "http://opensocial.org/2008/opensocial";
>>>>>       )
>>>>>
>>>>> And add
>>>>>
>>>>> @XmlElement above each of the getters..
>>>>>
>>>>> For enums you need something like this:
>>>>> @XmlJavaTypeAdapter(Enum.DrinkerAdapter.class)
>>>>>
>>>>> and a corresponding adapter.
>>>>>
>>>>> sample here:
>>>>>
>>>>>
>>>>>
>>>>>  http://www.hi5networks.com/platform/browser/shindig/trunk/java/
>>> social-api/src/main/java/org/apache/shindig/social/opensocial/model/Person.java
>>>
>>>>
>>>>>
>>>>>
>>>>> On Jun 10, 2008, at 2:57 PM, Cassie wrote:
>>>>>
>>>>>  Hmm.. I just worry that it would turn out like abdera... not providing
>>>>>
>>>>>> enough benefit for the learning curve. I mean, the restful json spec
>>>>>> is
>>>>>> really very simple, I'm hoping we can just whip it up :)
>>>>>>
>>>>>> I could be convinced otherwise though - do you have any code you can
>>>>>>
>>>>> share
>>>
>>>> that uses enunciate?
>>>>>>
>>>>>> - Cassie
>>>>>>
>>>>>>
>>>>>> On Tue, Jun 10, 2008 at 2:52 PM, Paul Lindner <[EMAIL PROTECTED]>
>>>>>>
>>>>> wrote:
>>>
>>>>
>>>>>>  If you're going down this route you might want to consider using JAXB
>>>>>>
>>>>>>> annotations and a custom json converter.
>>>>>>>
>>>>>>> This type of situation is working quite well for us in the Enunicate
>>>>>>> toolkit and is already implemented there.  In fact we've added JAXB
>>>>>>> annotations to our internal shindig repo and it's worked out really,
>>>>>>> really
>>>>>>> well.
>>>>>>>
>>>>>>> As far as atom goes..  I have a set of classes that implement Atom in
>>>>>>> JAXB
>>>>>>> that I'd be happy to contribute.
>>>>>>>
>>>>>>> Check out http://enunciate.codehaus.org/
>>>>>>>
>>>>>>> Ryan, can you offer your thoughts?
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Jun 10, 2008, at 2:44 PM, Cassie wrote:
>>>>>>>
>>>>>>> We tried to use abdera to implement the opensocial json restful
>>>>>>> format
>>>>>>>
>>>>>>>  within Shindig.. and it didn't work out very well. The code is
>>>>>>>>
>>>>>>> clunky,
>>>
>>>> overly complicated for simple json and is hard to come up to speed
>>>>>>>>
>>>>>>> on.
>>>
>>>>
>>>>>>>> So... I am going to try an alternate implementation based on the
>>>>>>>> existing
>>>>>>>> older json wire format code. I was going to start coding something
>>>>>>>> in
>>>>>>>>
>>>>>>> a
>>>
>>>> separate dir so that none of the current code is disturbed.
>>>>>>>>
>>>>>>> Hopefully,
>>>
>>>> in
>>>>>>>> the next couple days we will have a cleaner impl of the restful json
>>>>>>>> that
>>>>>>>> is
>>>>>>>> 90% the same as all of the current social code. (this means less
>>>>>>>> migration
>>>>>>>> for current social code users too, yea!)
>>>>>>>>
>>>>>>>> And as for atom... well, we can figure that out later :)
>>>>>>>>
>>>>>>>> Please let me know if you have any huge objections to this.
>>>>>>>> And of course, if it turns out to be worse than the abdera impl.. we
>>>>>>>>
>>>>>>> can
>>>
>>>> always go back.
>>>>>>>>
>>>>>>>> - Cassie
>>>>>>>>
>>>>>>>>
>>>>>>>>  Paul Lindner
>>>>>>> [EMAIL PROTECTED]
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>  Paul Lindner
>>>>> [EMAIL PROTECTED]
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>>>
>

Reply via email to