I have opened an issue on jira

http://jira.codehaus.org/browse/XSTR-728

Let me know, if you need me to do anything. Thanks


On Mon, Mar 11, 2013 at 6:59 PM, Jörg Schaible <[email protected]>wrote:

> Hi
>
> Mohammad Meah wrote:
>
> > Hi,
> >
> > I am in the midst of upgrading Xstream 1.3 to 1.4. However I am finding
> > that the JSON generated is incorrect, and I am not sure what I need to do
> > resolve this. I wrote a JUNIT test and was able to reproduce the problem.
> > Here's the code for the test
> >
> >     public class XstreamTest {
> >
> >      @Test
> >         public void testXstreamStuffForBasicVO(){
> >          BasicVO basicVO = new BasicVO("atttr1", "attr2");
> >          XStream xstream = new XStream(new
> >          JsonHierarchicalStreamDriver()); //XStream xstream = new
> >          XStream(new JettisonMappedXmlDriver());
> >             xstream.setMode(XStream.NO_REFERENCES);
> >             xstream.registerConverter(new BasicVOConverter());
> >             System.out.println(xstream.toXML(basicVO));
> >             //return setupXstream(xstream);
> >         }
> >
> >          class BasicVO{
> >          @XStreamAlias("alias1")
> >          private String attribute1;
> >
> >          @XStreamAlias("alias2")
> >          private String attribute2;
> >
> >          BasicVO(String att1, String att2){
> >          setAttribute1(att1);
> >          setAttribute2(att2);
> >          }
> >
> >          BasicVO(){
> >
> >          }
> >
> >     public String getAttribute1() {
> >     return attribute1;
> >     }
> >
> >     public void setAttribute1(String attribute1) {
> >     this.attribute1 = attribute1;
> >     }
> >
> >     public String getAttribute2() {
> >     return this.attribute2;
> >     }
> >
> >     public String getAttribute3(){
> >     return "madeupAttribute";
> >     }
> >
> >     public void setAttribute2(String attribute2) {
> >     this.attribute2 = attribute2;
> >     }
> >
> >          }
> >
> >
> >          class BasicVOConverter implements Converter{
> >
> >     @Override
> >     public boolean canConvert(Class type) {
> >     return BasicVO.class.isAssignableFrom(type);
> >     }
> >
> >     @Override
> >     public void marshal(Object source, HierarchicalStreamWriter writer,
> >     MarshallingContext context) {
> >
> >
> >     BasicVO basicVO = (BasicVO) source;
> >
> >             writer.startNode("property1");
> >             writer.setValue(basicVO.getAttribute1());
> >             writer.endNode();
> >
> >             writer.startNode("property2");
> >             writer.setValue(basicVO.getAttribute2());
> >             writer.endNode();
> >
> >             writer.startNode("property3");
> >             writer.setValue(basicVO.getAttribute3());
> >             writer.endNode();
> >
> >     }
> >
> >     @Override
> >     public Object unmarshal(HierarchicalStreamReader reader,
> >     UnmarshallingContext context) {
> >      BasicVO person = new BasicVO();
> >
> >                     reader.moveDown();
> >                     person.setAttribute1(reader.getValue());
> >                     reader.moveUp();
> >
> >                     reader.moveDown();
> >                     person.setAttribute2(reader.getValue());
> >                     reader.moveUp();
> >
> >
> >                     return person;
> >     }
> >
> >          }
> >     }
> >
> > The output generated is the following invalid JSON( invalid because the
> > values are not within double quotes )
> >
> >     {"com.xyz.XstreamTest$BasicVO": {
> >       "property1": atttr1,
> >       "property2": attr2,
> >       "property3": madeupAttribute
> >     }}
> >
> > I would like to point out that, when I use JettisonMappedXmlDriver, this
> > isn't a problem, however, I cannot use this, since I loose some other
> > important things which I get with JsonHierarchicalStreamDriver.
> >
> > With Xstream 1.3, I get the following
> >
> >      {"com.xyz.XstreamTest$BasicVO": {
> >           "property1": "atttr1",
> >           "property2": "attr2",
> >           "property3": "madeupAttribute"
> >         }}
> >
> > I went through the Xstream 1.4 and 1.3 code and found significant
> > differences. Also, I found differences in the way the logic for quotes is
> > applied. In 1.3, quotes are added more generally. However in 1.4, quotes
> > are only added for a "String" type, which I am not sure how this gets
> > determined.
> >
> > I am inclining towards maybe some bug in xstream 1.4 code? This seems too
> > far fetched, I am probably missing some step. Can anyone help me to
> > resolve this? Thanks
>
> well, the JsonHierarchicalSteamWriter actually uses the type of the
> original
> value to format the value in a proper way (in contrast to the
> Jettison-based
> driver). Therefore XStream's converters use internally everywhere the
> helper
> method
>
> ExtendedHierarchicalStreamWriterHelper.startNode(writer, "node",
> String.class);
>
> instead of
>
> writer.startNode("node");
>
> However, you're right, XStream should have used String.class as default if
> no type is available. Can you open a JIRA issue for this?
>
> Regards,
> Jörg
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe from this list, please visit:
>
>     http://xircles.codehaus.org/manage_email
>
>
>

Reply via email to