3.3 工作原理
本部分操作的关键点如下:
- 使用JAX-RS标准创建的web服务,而且JAX-RS标准是RESTfulweb服务的官方java标准。与JAX-WS重要的不同点是不需要带有一个JAX-RS的实现;只需要提供JAX-RS接口和注解(annotations)。所以改为选择使用APACHE CXF JAR-RS实现;因此我们需要提供Apache CXF库用于编译和运行。
- 使用WADL的定义,通过ApacheCXF生成如下Java类:
>> Invoice.java:这个是用来代表invoiceXML内容的JavaBean。这个类通过绑定注解(annotations)来允许Apache CXF JAX-RS的实现将invoice对象编组为XML内容和不降XML内容编组为invoice对象
XmlAccessType.FIELD)(
(name = "invoice", propOrder = {
"id",
"companyName",
"amount"
})
(name="invoice")
>> ObjectFactory.java:该类是可选,因为该类通常被用于创建Invoice.java类的实例,实现方法是调用createInvoice()工厂函数。还有一个工厂函数JAXBElement<Invoice> createInvoice(Invoice value),该函数是用于创建JAXBinvoice XML的绑定。这些工厂函数对于分离服务方法与对象构造编码是非常有用的,尤其是在处理非常复杂的schema例子时,但是在本操作实例中不是特别有用。
>> InvoiceserviceV1Resource.java:这是JAX-RX注解(annotations)Java接口来代表RESTfulInvoice服务以及它的资源。在本实例中,可以看到如下代码:
/**
* Created by Apache CXF WadlToJava code generator
**/
package rest.invoice.v1;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
("/invoiceservice/v1/")
public interface InvoiceserviceV1Resource {
("application/json")
("/invoice/{id}/")
Invoice getInvoiceid( ("id") String id);
}
>>在Apache CXFJAX-RS实现使用注解(annotations)的目的是隐射HTTP请求到与之匹配的Java方法。在本实例用,接口的实现在InvoiceserviceV1ResourceImpl.java中。如果有一个HTTP GET请求的源:/invoiceservice/v1/invoice/{id},InvoiceserviceV1ResourceIm将调用getInvoiceid(..)方法传递字符串类型的 id变量传入{id}路径参数中。其他注解服务方法支持POST、PUT、DELETE请求,这些也可以添加在这以及实现。可以查看:
关于InvoiceServiceCRUDV1Resource.java的源码如下截图:
>> InvoiceserviceV1ResourceImpl.java:当匹配的请求被创建时,提供运行的Java代码来实现前面的接口。我们向这个类的Invoice getInvoiceId(String id)添加了代码,这样如果发票(id)是12345,那么我们使用ObjectFactory创建一个新的Invoice对象,使用期望值选择它,并将其返回到响应。在这个背景下,在将响应分派回SoapUI之前,Apache CXF能够将其封送到JSON内容中。与第一章中的JAX-WS示例不同,没有持有者对象,所以我们负责自己创建Invoice对象。
>>Service.java:该服务类是用于发布stub服务实现的。Endpoint与服务超时都可以在这个类中设置!使用WADL为RESTful web服务创建一个SoapUI 项目,这里也有一些SoapUI插件作为更现代的替代品,例如RAML(http://raml.org)和Swagger。
RESTful web服务经常是编码优先的开发模式,通常没有WADL或者一个结构定义用于生成SoapUI项目和测试。在这些事例中,你可以很容易构建你的REST项目通过手动输入服务的URL、resource、method、parameters在它们各自的菜单选项中,详细操作你可以看:http://www.soapui.org/getting-started/rest-testing.html。如果你是一个pro版本的用户,你可以使用SoapUI录制服务API的请求来生成你的项目和测试。如果你是一个开源的用户,可以通过使用HTTP Monitor(http://www.soapui.org/HTTP-Recording/concept.html)使用与pro版本相似的方法生成测试!