使用带有JAX-WS的动态客户端的优点

jco*_*lin 6 java web-services cxf jax-ws

使用带有JAX-WS服务的动态客户端与仅使用生成的客户端类相比有什么优势?有什么缺点?

**对于我的特定情况,我使用Apache CXF,我不确定其他库允许"动态"客户端.

- 我想我不需要添加这个,但是......我正在寻找非显而易见的(我知道......主观的)优点.我不需要别人告诉我不使用生成的类的优点是我不需要生成类.

Pas*_*ent 7

那么,CXF文档非常清楚动态客户端的优势:

CXF支持多种替代方案,允许应用程序在没有SEI和数据类的情况下与服务进行通信.JAX-WS指定了JAX-WS Dispatch API,以及用于读取和写入XML的Provider接口.但是,此页面描述了CXF的动态客户端工具.对于动态客户端,CXF在运行时生成SEI和bean类,并允许您通过使用对象的API调用操作,或者使用反射调用完整代理.

换句话说,您不需要类的定义,如下面的文档示例所示:

JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
Client client = dcf.createClient("echo.wsdl");

Object[] res = client.invoke("echo", "test echo");
System.out.println("Echo response: " + res[0]);
Run Code Online (Sandbox Code Playgroud)

关于缺点,它们非常明显(这是付出的代价):你正在操纵字符串,你失去了强烈的打字.


bma*_*ies 2

优点是避免生成和包含代码。在某些环境中,这是一个问题。如果您的环境中不存在包含生成代码的障碍,那么动态客户端是一个坏主意,它速度更慢且更麻烦。

动态客户端速度较慢,因为代码(我编写了一些代码)必须:

  1. 解析 wsdl 和 schema
  2. 生成代码
  3. 编译代码

它比较麻烦,因为您的数据模型中没有任何复杂对象的 bean 类。你需要使用反射。

请记住,动态客户端与调用接口不同。