关注管理JAX WS工件

时间:2011-03-29 14:01:01

标签: java jax-ws

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

以下是我的担忧:

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

  2. 我可以选择让构建系统创建工件,或者让开发人员创建工件并将它们检查到源代码控制中。如果构建系统生成工件,那么只要团队成员更新API,每个人都必须在自己的开发环境中生成工件。如果工件由开发人员生成并检入源代码控制,那么只要团队成员重命名或删除API,他就必须记住删除包装工件。这两种方法似乎都很麻烦。这里的最佳做法是什么?

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

  4. 我预计我的服务中至少有一百个API。这意味着至少有200个包装类。好像杂乱无章。许多对开发没兴趣的课程。更糟糕的是,这些包装类将与传输对象驻留在同一个包中,这将是我系统中一些使用最频繁的类。对于我系统中最重要的封装,信噪比非常低。

  5. 任何人都可以指导我轻松开发我的应用程序的任何指示将不胜感激。

1 个答案:

答案 0 :(得分:2)

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

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

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)也是由此解决的。

你的问题非常大,所以如果我没有充分说明问题,请发表评论,我会尝试详细介绍。