1) 利用JAX-WS的Dispatch/Provider對
在JAX-WS中,我們可以跳過SOAP棧的處理,直接調(diào)用Service Endpoint,這樣我們就可以傳輸POX(Raw xml)或者JSON給Service Endpoint處理,并可以通過MessageContext拿到HTTP method,從而進(jìn)行判斷,調(diào)用不同的邏輯。需要注意的是將Endpoint的@WebService替換成@WebServiceProvider,需要實(shí)現(xiàn)Provider<Source>接口。接著將BindingType改為(value = HTTPBinding.HTTP_BINDING),表明直接處理的是HTTP,而不是SOAP。
Dispatch和Provider分別對應(yīng)于客戶端和服務(wù)端,他們當(dāng)然是可以脫離使用的。
Provider脫離Dispatch
- Get和Delete不需要通過HTTP body,本身就支持任意client
- 通過HTTP Header傳post和put的內(nèi)容,支持任意client
- 通過HTTP body傳Post和Put的內(nèi)容,需要模擬Dispatch傳的HTTP body格式
Dispatch脫離Provider
- 自己生成SOAP包,服務(wù)端可以是SOAP-based web service
2) RESTful HTTPServlets
所謂萬變不離其中,REST本身就是HTTP的架構(gòu),我們可以直接通過HTTP servlet操控HTTP Request和Response,而且HTTP servlet本身就提供了doGet doPost doPut doDelete doHeader, doOptions方法,通過重寫這些方法,我們可以實(shí)現(xiàn)基于HTTP servlet的RESTful web services
3) JAX-RS
JAX-RS(JSR 311,Java API for XML-RESTful Web Services)是基于annotation的實(shí)現(xiàn)方式,我們通過annotation的方式把一個(gè)java class標(biāo)注成RESTful web service,并把它的方法標(biāo)注成HTTP的CRUD。相關(guān)的annotation有@path, @Produces,@GET, @POST, @DELETE, @PUT, @PathParam等,
目前已經(jīng)有很多現(xiàn)成的實(shí)現(xiàn),比如Jersey, Apache CXF, JBoss RESTEasy, Apache Wink. Triaxrs等
4) 其他的一些framework
還有一些其他的第三方的framework,可以方便我們發(fā)布RESTful web services,編寫web client,比如Restlet
5) Container支持
有些Container也提供了一些Utility工具,可以將Java Class發(fā)布成RESTful web services。不過OC4J1013的那個(gè)太假了,