[英]Bypassing JAX-WS SOAP overhead with JAX-RS/Jersey?
我曾经与之集成或使用过的唯一Web服务是RESTful。 我现在正在尝试与第三方SOAP服务集成,并对SOAP看起来似乎有些费解感到震惊。
在REST中,我使用了一个称为Jersey的JAX-RS客户端,该客户端使RESTful端点的实现成为一个难题。 例如,如果某项服务在http://api.example.com/fizz
公开了一个POST
端点(例如,用于提升Fizz
对象),那么在泽西岛,我可能会制作一个如下所示的服务客户端(伪代码) :
// Groovy pseudo-code
class Fizz {
int type
boolean derps
String uid
}
class FizzClient {
WebResource webResource = initAt("https://api.example.com")
upsertFizz(Fizz fizz) {
webResource.path("fizz").post(fizz)
}
}
但是基于Java的SOAP客户端乍一看似乎要复杂得多。 如果我正确理解安装程序,则一般过程如下:
WSDL
的XML文档; 这似乎是所有可用端点的语言不可知的描述 WSDL
上运行一个名为wsimport
的JDK工具,该工具实际上会生成Java源代码,该代码实现JAX-WS API,并且实际上代表了我的SOAP客户端 首先,如果我对这个过程所说的话不正确,请先纠正我! 假设我或多或少是正确的,我不明白的是: 如果这全部是HTTP对话,为什么需要这样做? 为什么我不能与Jersey进行基于SOAP的对话,而绕开所有这些源代码生成样板?
例如,假设存在相同的端点,但是由SOAP来控制:
class FizzClient {
WebResource webResource = initAt("https://api.example.com")
FizzSerializer serializer // I take Fizz instances and turn them into XML
FizzDeserializer deserializer // I take XML and turn them into Fizz instances
upsertFizz(Fizz fizz) {
String xmlFizz = serializer.serialize(fizz)
webResource.path("fizz").post(xmlFizz)
}
}
如果我正确理解SOAP,那只是利用HTTP动词和请求/响应实体来发送特定于应用程序的消息的一种方式。 这是一个HTTP“对话”。 那么,为什么我不能将诸如Jersey的REST框架劫持到HTTP POST消息中,而绕过此SOAP开销呢?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.