JSON-RPC到SOAP并返回JSON:将JSON对象映射到非平凡的SOAP消息

时间:2011-07-22 15:56:05

标签: java web-services scala soap esb

我正在尝试创建一个从客户端接收JSON-RPC请求的服务器,将这些请求转换为非平凡的SOAP请求到SOAP服务器,然后获取SOAP响应并向客户端发送转换后的JSON响应。从SOAP服务器返回的响应可能非常复杂和嵌套,我正在尝试将XML字段映射到更平坦的JSON。映射不会是1:1。例如,我们可能会在SOAP响应中返回一些代码序列,我们希望在JSON响应中将它们作为数据库中的值返回。

我愿意使用最合适的语言或技术,那么有什么东西可以解决这个问题或者可以提供帮助吗?

1 个答案:

答案 0 :(得分:0)

scalaxb可以将SOAP转换为案例类和接口。 lift-json可以将案例类转换为json。

scalaxb生成的代码为1:1。请参阅wsdl 1.1 support

如果要将案例类映射到其他一些中间案例类,则可以先执行此操作。然后你可以应用lift-json将它们自动变成json

scala> import net.liftweb.json._
scala> import net.liftweb.json.Serialization.{read, write}
scala> implicit val formats = Serialization.formats(NoTypeHints)
scala> val ser = write(Child("Mary", 5, None))
scala> read[Child](ser)
res1: Child = Child(Mary,5,None)

或手动

scala> import net.liftweb.json._
scala> implicit val formats = DefaultFormats // Brings in default date formats etc.
scala> case class Child(name: String, age: Int, birthdate: Option[java.util.Date])
scala> case class Address(street: String, city: String)
scala> case class Person(name: String, address: Address, children: List[Child])
scala> val json = parse(...)
scala> json.extract[Person] 
res0: Person = Person(joe,Address(Bulevard,Helsinki),List(Child(Mary,5,Some(Sat Sep 04 18:06:22 EEST 2004)), Child(Mazy,3,None)))