繁体   English   中英

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

[英]Advantages of using a Dynamic Client with 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]);

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

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

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

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

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

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

使用动态客户端的优点是您不需要在运行时之前生成存根。 这允许您通常调用在运行时可能不了解的服务。

如果您准确了解客户端代码将要调用的Web服务以及在客户端的生命周期内不会更改,则生成的客户端类很棒。

如果其中任何一种情况不是这样,那么您需要考虑客户如何处理这些情况。 Dispatch API使您可以灵活地动态生成Web服务调用,而无需熟悉所访问的服务。 这显然需要代码来支持构建该调用所需的配置选项。

尽管如此,服务器端接口的开发人员/维护人员确实承担了一定的责任,不会引入会破坏客户端代码的更改。

前几天我与同事进行了类似的谈话。 他正在使用Spring客户端,它需要使用一个接口来编译客户端,然后Spring注入实际代码以使接口工作。 它基本上归结为我们之间最古老的锯,像动态代理这样的东西通常会引入某种性能税,他没关系,我开始写生活中的设备驱动程序,所以我对速度有着极大的偏见。 就我而言,更快/更小的胜利,因为我不受限于这样有限的环境......我的Droid手机让我所有的系统,包括大型机,在我的前10年专业看起来微不足道,我会站在速度的一边。 对此的共同反驳是,还有许多其他瓶颈是“真正的”问题,而且这个问题对他们来说微不足道......而且可能是真的......但每一点点都有帮助。 如果你读过Steve Souders和他的同胞们的东西......用户可以注意到400毫秒的变化......他们并不一定注意到事情变慢了,但他们的反应是不同的。 因为我无法对网络速度,数据库索引开销等做任何事情,所以我至少可以用我可以影响的事情做最好的工作。 呼! 对不起'那个!! 现在就离开肥皂盒吧! ;)

DII(d ynamic nvocation 覆盖整个院落)客户端:随着DII,客户可以调用即使远程程序或服务的名称的签名是未知的,直到运行时的远程过程。

由于其灵活性,可以在服务代理中使用DII客户端,该服务代理动态地发现服务,配置远程调用并执行调用。

  • 好处

    • 在这里,我们必须创建简单的java接口,描述Web服务支持访问的操作。 因此,不需要自动生成的存根来访问服务。
    • 使用端点,它即时生成WSDL和Stubs,即在运行时。
  • 缺点

    • 即使在这种风格中,我们也必须在创建客户端之前了解Web服务。
    • Generated Stub(GS)相比,由于WSDL和存根在运行时生成,因此它的工作速度很慢。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM