jco*_*lin 6 java web-services cxf jax-ws
使用带有JAX-WS服务的动态客户端与仅使用生成的客户端类相比有什么优势?有什么缺点?
**对于我的特定情况,我使用Apache CXF,我不确定其他库允许"动态"客户端.
- 我想我不需要添加这个,但是......我正在寻找非显而易见的(我知道......主观的)优点.我不需要别人告诉我不使用生成的类的优点是我不需要生成类.
那么,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)
关于缺点,它们非常明显(这是付出的代价):你正在操纵字符串,你失去了强烈的打字.
优点是避免生成和包含代码。在某些环境中,这是一个问题。如果您的环境中不存在包含生成代码的障碍,那么动态客户端是一个坏主意,它速度更慢且更麻烦。
动态客户端速度较慢,因为代码(我编写了一些代码)必须:
它比较麻烦,因为您的数据模型中没有任何复杂对象的 bean 类。你需要使用反射。
请记住,动态客户端与调用接口不同。