XML and Case Class

XML and Case Class

I compare the library scalaxb and XStream. It seems to me that XStream is more easy to use.

Here is first step to add the dependencies.
  "com.thoughtworks.xstream" % "xstream" % "1.4.8",
  "org.joda" % "joda-convert" % "1.7",

The Trait object to deal with the xstream base class.
package com.sillycat.jobsconsumer.utilities

import com.sillycat.jobsconsumer.models.Job
import com.thoughtworks.xstream.XStream
import com.thoughtworks.xstream.io.xml.DomDriver

trait IncludeXMLMapping {

  var xStream : XStream = new XStream(new DomDriver())

  xStream.alias("job", classOf[Job])

  def toXML(obj:Any): String ={
    xStream.toXML(obj)
  }

  def fromXML(xml:String):Any = {
    xStream.fromXML(xml)
  }

}

Here is the Test Class
package com.sillycat.jobsconsumer.models

import com.sillycat.jobsconsumer.utilities.{IncludeXMLMapping}
import org.scalatest.{BeforeAndAfter, Matchers, FunSpec}

class JobXMLSpec extends FunSpec with Matchers with BeforeAndAfter with IncludeXMLMapping {

  describe("JobXMLMapping") {
    describe("#xml2object"){
      it("Convert xml string to object") {
        val xml =
          """<job>
            |  <id>id1</id>
            |  <title>title1</title>
            |  <desc>desc1</desc>
            |  <industry>sales</industry>
            |</job>""".stripMargin
        val job1 = fromXML(xml).asInstanceOf[Job]
        job1.title should be ("title1")
      }
    }
    describe("#object2xml"){
      it("Convert object to xml string") {
        val job1 = Job("id1","title1","desc1","sales")
        val expect =
          """<job>
            |  <id>id1</id>
            |  <title>title1</title>
            |  <desc>desc1</desc>
            |  <industry>sales</industry>
            |</job>""".stripMargin
        val xml = toXML(job1)
        xml should be (expect)
      }
    }
  }

}


Tip
Warning Message
[warn] Class java.time.Duration not found - continuing with a stub.
[warn] Class java.time.Duration not found - continuing with a stub.
[warn] two warnings found

Solution:
Adding package dependency fixes the problem.
"org.joda" % "joda-convert" % "1.7",


References:
http://x-stream.github.io/tutorial.html
http://alvinalexander.com/scala/serializing-deserializing-xml-scala-classes

xml to object
https://github.com/takezoe/solr-scala-client

case class mapper
https://github.com/takezoe/solr-scala-client/blob/master/src/main/scala/jp/sf/amateras/solr/scala/CaseClassMapper.scala

猜你喜欢

转载自sillycat.iteye.com/blog/2236419