在本节简短的介绍中,我们将添加一些接口,以便外部用户可以读取当前的问候语。关于扩展接口以添加问候语的任务留给读者作为练习
JAX-RS
REST很流行(现在在EE 6中以JAX-RS的形式存在),所以让我们把它加入进去。添加
package com.acme.greetings; import java.util.List; import javax.inject.Inject; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; @Path(value = "/RESTExport") public class RESTExporter { @Inject GreetingServer greetingServer; @GET @Path("/greetings") @Produces("application/xml") public List<Greeting> getGreetings() { return greetingServer.getGreetings(); } }
这将从服务器获取当前的问候语(注意注入),并以XML格式呈现。为了连接JAX-RS实现,RESTEasy,在web.xml中添加以下内容
<context-param> <param-name>resteasy.scan</param-name> <param-value>true</param-value> </context-param> <context-param> <param-name>resteasy.servlet.mapping.prefix</param-name> <param-value>/resteasy</param-value> </context-param> <listener> <listener-class>org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class> </listener> <servlet> <servlet-name>Resteasy</servlet-name> <servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class> </servlet> <servlet-mapping> <servlet-name>Resteasy</servlet-name> <url-pattern>/resteasy/*</url-pattern> </servlet-mapping>
并且将@XMLRootElement注释添加到Greeting类的顶部
@Entity @Audited @XmlRootElement public class Greeting
您的问候语现在应从/Greetings/resteasy/RESTExport/greetings处可用。
JAX-WS
添加Web服务甚至更简单。添加
package com.acme.greetings; import java.util.List; import javax.inject.Inject; import javax.jws.WebService; @WebService public class WebServiceExporter { @Inject GreetingServer greetingServer; public List<Greeting> getGreetings() { return greetingServer.getGreetings(); } }
这执行了与我们的RESTExporter类似的工作,然后在web.xml中连接它
<servlet> <servlet-name>WSExport</servlet-name> <servlet-class>com.acme.greetings.WebServiceExporter</servlet-class> </servlet> <servlet-mapping> <servlet-name>WSExport</servlet-name> <url-pattern>/WebServiceExport/*</url-pattern> </servlet-mapping>
嗯。不知道你是否能让它自动注册?无论如何,WSDL应从/Greetings/WebServiceExport?wsdl处可见。
结论
这部分内容比较简短。部分原因是设置事情非常简单,不需要我们做很多变通。希望一旦Aslak完成了Arqullian DBUnit集成(我已经听到了有关JSFUnit集成的传言)我就能写一篇更详细的关于测试应用程序各个部分的文章。