2011-07-22 23 views
0

我試圖創建一個服務器,它接受來自客戶端的JSON-RPC請求,將這些請求轉換爲非平凡的SOAP請求然後SOAP服務器接受SOAP響應並向客戶端發送經過轉換的JSON響應。從SOAP服務器返回的響應可能非常複雜並且嵌套,我試圖將XML字段映射爲更扁平的JSON。映射不會是1:1。作爲示例,我們可能會返回SOAP響應中的代碼序列,我們希望在JSON響應中返回它們作爲數據庫值的代碼。JSON-RPC到SOAP並返回到JSON:將JSON對象映射到非平凡的SOAP消息

我願意使用任何語言或技術最適合,那麼有沒有什麼已經解決了這個問題或可以幫助?

+1

請提問。 –

+0

類似的問題https://stackoverflow.com/questions/26490929/custom-transform-rest-to-soap-to-rest-using-apache-camel – navaltiger

回答

0

scalaxb可以將SOAP轉化爲案例類和接口。 lift-json可以將案例類轉化爲json。

scalaxb生成的代碼將是1:1。請參閱wsdl 1.1 support

如果您想將案例類映射到其他中間案例類,您可以先做。然後你就可以申請升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))) 
+0

請問您能詳細說明一下如何工作?映射[仍然是1:1](http://www.assembla.com/spaces/liftweb/wiki/JSON_Support)? – devinus