2011-07-22 27 views
0

クライアントからJSON-RPCリクエストを受け取り、それらを非自明のSOAPリクエストに変換するサーバーを作成しようとしています。 SOAPサーバーに送信し、SOAP応答を取得し、クライアントに変換されたJSON応答を送信します。 SOAPサーバーから戻って来る応答は、非常に複雑でネストされている可能性があります。私は、XMLフィールドをJSONをより平坦にマップしようとしています。マッピングは1:1にはなりません。例として、JSONレスポンスで返すSOAPレスポンスのコードをデータベースの値として返すことがあります。JSON-RPCからSOAPへとJSONへ戻る:JSONオブジェクトから通常のSOAPメッセージへのマッピング

私はどの言語や技術を使用しても構わないと思っていますので、既にこの問題を解決している、または助けることができるものはありますか?

+1

自動的にJSONにそれらを回すためにリフトJSONを適用することができます。 –

+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を参照してください。

ケースクラスを他の中間ケースクラスにマップしたい場合は、まずそれを行うことができます。そして、あなたは質問してください

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

関連する問題