[英]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.