使用 CXF 在 JAX-RS 客户端上工作。
要求是在测试客户端的帮助下从单元测试用例测试服务端代码,而不将其余服务部署到服务器
我们实现的 REST 服务使用 HTTP 标头将一些信息传递给 WS 方法。
到目前为止,我遇到的所有实现都将服务部署到服务器。
我尝试创建 JAX-RS 客户端的示例
WebClient client = WebClient.create(ENDPOINT_ADDRESS);
和
RestWSInterafce proxy = JAXRSClientFactory.create(ENDPOINT_ADDRESS, RestWSInterafce.class);
Client client = WebClient.client(proxy);
WebClient httpClient = WebClient.fromClient(client);
我尝试配置 CXF-Jetty 实现,但没有任何运气。下面是 Spring 应用程序上下文文件的快照
<import resource="classpath:META-INF/cxf/cxf.xml"/>
<import resource="classpath:META-INF/cxf/cxf-extension-http-jetty.xml" />
<jaxrs:client id="restWSClient" address="${server.address}" serviceClass="com.xyz.rs.RestWSInterface">
</jaxrs:client>
是否可以在不将其余服务部署到服务器的情况下进行测试?
编辑
在发布这个问题时,我主要关心的是测试期望 HttpHeaders 元素在上下文中传递的方法。从我的界面考虑以下 GET 方法。
@GET
@Produces(MediaType.APPLICATION_JSON + ";charset=UTF-8")
@Path("/getMessage")
public Response getMessage(@Context HttpHeaders headers);
为了对这种方法进行单元测试,我没有通过将应用程序部署到服务器来调用接口,而是编写了测试用例,直接调用实现类并将实现器作为输入传递给 HttpHeader。这解决了我在不部署到服务器的情况下对 ws 方法进行单元测试的问题。
public class HttpHeadersImpl implements HttpHeaders {
private MultivaluedMap<String, String> multivaluedMap;
public void setRequestHeaders(MultivaluedMap<String, String> multivaluedMap) {
this.multivaluedMap = multivaluedMap;
}
@Override
public MultivaluedMap<String, String> getRequestHeaders() {
return multivaluedMap;
}
}