JSON-RPC 到 SOAP 并返回到 JSON:将 JSON 对象映射到重要的 SOAP 消息

发布于 2024-11-26 09:31:55 字数 266 浏览 1 评论 0原文

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

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

I'm trying to create a server that takes JSON-RPC requests from a client, transforms those into non-trivial SOAP requests to a SOAP server, then takes the SOAP response and sends the client a transformed JSON response. The responses that come back from the SOAP server are potentially very complicated and nested, and I'm trying to map the XML fields to flatter JSON. The mappings wont be 1:1. As an example, we may get back a sequence of codes in the SOAP response that we want to return in the JSON response as their values from a database.

I'm willing to use whatever languages or technologies are best appropriate, so is there anything out there that already solves this problem or can help?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

送舟行 2024-12-03 09:31:55

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

scalaxb 生成的代码将是 1:1。请参阅wsdl 1.1 支持

如果您想将案例类映射到其他一些中间案例类,您可以先这样做。 将它们转换为 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)

然后你可以应用 lift-json 自动或手动

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)))

scalaxb can turn SOAP into case classes and interfaces. lift-json can turn case classes into json.

The scalaxb-generated code would be 1:1. See wsdl 1.1 support.

If you want to map the case classes into some other intermediate case classes, you can do that first. Then you can apply lift-json to turn them into json automatically

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)

or manually

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)))
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文