Hi Jonathan,

Yes, definitely a bug. Could you please open a ticket (http://
github.com/dpp/liftweb/issues) and I will take a look at it. And
thanks for the test case!

Cheers Joni

On Feb 3, 3:41 am, Jonathan Ferguson <[email protected]> wrote:
> When converting XML to Json attributes are being lost, given the below XML
> document, we would expect
> {"word":{"word":"content","self":"http://localhost:8080/word/example
> ","term":"example","available":"true"}}
> where as we get {"word":"content"}
> example XML:
> <word term="example" self="http://localhost:8080/word/example";
> available="true">content</word>
>
> This is been tested on M1 and trunk.
>
> Thanks in advance.
>
> To repeat
>
> // From the command line, adjust paths as needed
>
> $scala -cp
> /Users/jono/.m2/repository/com/thoughtworks/paranamer/paranamer/2.0/paranamer-2.0.jar:/Users/jono/.m2/repository/net/liftweb/lift-json/2.0-SNAPSHOT/lift-json-2.0-SNAPSHOT.jar
>
> import scala.xml._
> import net.liftweb.json.JsonAST._
> import net.liftweb.json.Printer
> import net.liftweb.json.Xml
>
> val example1 = <word term="example" self="http://localhost:8080/word/example";
> available="true">content</word>
> val expected1 = 
> """{"word":{"word":"content","self":"http://localhost:8080/word/example","term":"example","available":"true"}}""";
> val got1 = Printer.compact(render(Xml.toJson(example1)))
>
> val example2 = <word term="example" self="http://localhost:8080/word/example";
> available="true"></word>
> val expected2 = 
> """{"word":{"word":"content","self":"http://localhost:8080/word/example","term":"example","available":"true"}}""";
> val got2 = Printer.compact(render(Xml.toJson(example2)))
>
> // Add to src/test/scala/net/liftweb/json/XmlBugs.scala
>
>   "Jono's XML with attributes parses correctly" in {
> val example1 = <word term="example" self="http://localhost:8080/word/example";
> available="true">content</word>
> val expected1 = 
> """{"word":{"word":"content","self":"http://localhost:8080/word/example","term":"example","available":"true"}}""";
>
> val example2 = <word term="example" self="http://localhost:8080/word/example";
> available="true"></word>
> val expected2 = 
> """{"word":{"word":"content","self":"http://localhost:8080/word/example","term":"example","available":"true"}}""";
>
>     Printer.compact(render(toJson(example1))) mustEqual expected1
>     Printer.compact(render(toJson(example2))) mustEqual expected2
>   }
>
> Here is what I get when I run the example provided.
>
> $scala -cp
> /Users/jono/.m2/repository/com/thoughtworks/paranamer/paranamer/2.0/paranamer-2.0.jar:/Users/jono/.m2/repository/net/liftweb/lift-json/2.0-SNAPSHOT/lift-json-2.0-SNAPSHOT.jar
> Welcome to Scala version 2.7.7.final (Java HotSpot(TM) 64-Bit Server VM,
> Java 1.6.0_17).
> Type in expressions to have them evaluated.
> Type :help for more information.
>
> scala> import scala.xml._
> import scala.xml._
>
> scala> import net.liftweb.json.JsonAST._
> import net.liftweb.json.JsonAST._
>
> scala> import net.liftweb.json.Printer
> import net.liftweb.json.Printer
>
> scala> import net.liftweb.json.Xml
> import net.liftweb.json.Xml
>
> scala>
>
> scala> val example1 = <word term="example" 
> self="http://localhost:8080/word/example"; available="true">content</word>
> example1: scala.xml.Elem = <word self="http://localhost:8080/word/example";
> term="example" available="true">content</word>
>
> scala> val expected1 = 
> """{"word":{"word":"content","self":"http://localhost:8080/word/example","term":"example","available":"true"}}""";
> expected1: java.lang.String = 
> {"word":{"word":"content","self":"http://localhost:8080/word/example","term":"example","available":"true"}}
>
> scala> val got1 = Printer.compact(render(Xml.toJson(example1)))
> got1: String = {"word":"content"}
>
> scala>
>
> Jono
>
> P.S I thought I had a fix, but it broke one of HarryH's tests.
>
> scala>
>
> scala> val example2 = <word term="example" 
> self="http://localhost:8080/word/example"; available="true"></word>
> example2: scala.xml.Elem = <word self="http://localhost:8080/word/example";
> term="example" available="true"></word>
>
> scala> val expected2 = 
> """{"word":{"word":"content","self":"http://localhost:8080/word/example","term":"example","available":"true"}}""";
> expected2: java.lang.String = 
> {"word":{"word":"content","self":"http://localhost:8080/word/example","term":"example","available":"true"}}
>
> scala> val got2 = Printer.compact(render(Xml.toJson(example2)))
> got2: String = {"word":null}
>
> scala>

-- 
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en.

Reply via email to