java - 管理 JAX WS 工件的问题

标签 java jax-ws

我正在开发一个大量使用 Web 服务的应用程序。我将开发该应用程序的客户端和服务器端。我想使用 JAX WS(我是新手),因为它似乎是 Java Web 服务的 future ,但我对这些工件有很多担忧。这些问题都不会破坏交易,但总的来说,JAX WS 似乎造成了很多不便。我是 JAX WS 的新手,所以也许有些我不知道的事情可以减轻我的担忧。

这是我的担忧:

  1. 我预计会有相当多的 POJO 在客户端和服务器之间传递(由于缺乏更好的术语,我将这些称为传输对象)。我想在这些对象中包含文档和业务逻辑(对于初学者,equals,hashcode,toString)。如果这些类中有业务逻辑,那么我无法使用 wsimport 为它们创建注释,并且我必须手动管理它们。看起来很麻烦而且容易出错。

  2. 我可以选择让构建系统创建工件,或者让开发人员创建工件并将其 checkin 源代码管理。如果工件是由构建系统生成的,那么每当团队成员更新 API 时,每个人都必须在自己的开发环境中生成工件。如果工件由开发人员生成并 checkin 源代码管理,则每当团队成员重命名或删除 API 时,他都必须记住删除包装器工件。这两种方法似乎都很麻烦。这里的最佳实践是什么?

  3. wsimport 在同一个包中创建所有工件。我将创建多个服务,并且我将有一些共享的传输对象,因此我需要将所有服务导入到同一个包中。如果两个服务具有同名的 API,包装器工件将会发生冲突。

  4. 我预计我的服务中至少有一百个 API。这意味着至少有 200 个包装类。看起来非常困惑。很多很多对开发没有兴趣的类。更糟糕的是,这些包装类将与传输对象驻留在同一包中,这将是我的系统中使用最频繁的一些类。对于我的系统中最重要的包来说,信噪比非常低。

任何人可以为我提供任何指导以简化我的应用程序的开发,我将不胜感激。

最佳答案

如果您可以控制客户端和服务器,则实际上不必使用 wsimport 生成客户端。我目前的做法如下:一个项目定义了 Web 服务的 API。 API由接口(interface)和“传输对象”的所有类组成。另一个项目实现了该服务。您现在可以将 API 分发给现在可以使用该服务并可以利用您所有其他业务方法的客户。

假设 ServiceInterface 是您的服务接口(interface),客户端可能如下所示:

Service s = Service.create(
        new URL("http://example.com/your_service?wsdl"),
        new QName("http://example.com/your_namespace", "YourServiceName"));
ServiceInterface yourService = s.getPort(
        new QName("http://example.com/your_namespace", "YourPortName"),
        ServiceInterface.class);

就像这样你就有了一个服务客户端。这样您就可以使用所有方法 (1),您可以完全控制您的包 (3),并且您没有任何包装类,因为它们都是在运行时生成的 (4)。我认为(2)也可以通过这个解决。

您的问题非常大,因此如果我未能充分解决某个问题,请发表评论,我会尝试提供更多详细信息。

关于java - 管理 JAX WS 工件的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5473764/

相关文章:

java - 如何使用 ASTRewrite 将特定的 SimpleType 替换为 PrimitiveType?

java - 我正在尝试基于 servlet 的应用程序来工作

Java : Is `@WebParam` optional?

android - 在何处查看生成的 XML (KSOAP2)

web-services - Netbeans基本Http身份验证Jax-WS

java - 在网络服务之间共享数据的最佳方式

java - LuaJ 和 Android : cannot bind class

java - 如何使用 arraylist 作为字段有效地深度克隆对象数组

java - android中的非本地化字符串

Java Web 服务客户端 cdata 标签