resteasy-links的研究(二)
上一篇文章讲解了resteasy-links的实现和工作机制,这篇文章通过一个实际的例子来看一下resteasy-links的具体工作过程。
首先这个例子在这里:
把上面的例子clone到本地,然后编译项目:
$ mvn install
编译好以后,启动服务:
$ mvn jetty:run
以下是服务的编译和启动情况:

服务启动以后,使用http命令访问服务:
$ http -v http://localhost:8080/links
以下是服务的访问情况:

可以看到atom link的数据可以封装在response里面返回了。
接下来看一下这个项目的实现:

如上所示,这个项目包含一个FooResource,用来提供服务,然后包含一个Fruit的class,这个Fruit的class是用JAXB的annotations标记过了:

因此后续它可以被序列化成xml数据。
看了下这个demo项目的架构,回顾一下前一篇文章中说的,resteasy-links的工作机制:
- 把需要生成atom links信息的方法标记上
@AtomLink。 - 把需要扫描并处理类型class的方法标记上
@LinkResource。 - 在resource class里面添加
RESTServiceDiscovery实例进行信息注入。
把这三条对应到本文样例项目的具体代码里,首先是fruit这个代码:

可以看到RESTServiceDiscovery必须作为XmlElement在我们的data class里面,用来形成atom link数据。
回过头再来看一下RESTServiceDiscovery的class diagram:

可以看到AtomLink是RESTServiceDiscovery里面的一个inner class。其中AtomLink本身也是一个jaxb标记过的class:

所以这个RESTServiceDiscovery和它包含的AtomLink是要被resteasy-links模块来注入的。接下来看FooResource的源代码:

这个代码里面的注释已经写清楚@AddLinks和@LinkResource的工作机制了,用来对应前面文章所分析的resteasy-links内部工作原理。
以上就是本文的内容。