Java 与管理JAX-WS工件有关的问题

Java 与管理JAX-WS工件有关的问题,java,jax-ws,Java,Jax Ws,我正在开发一个大量使用web服务的应用程序。我将开发这个应用程序的客户端和服务器端。我希望使用JAX-WS(我是新手),因为它似乎是面向Java的web服务的未来,但我有一些与工件相关的问题。所有这些问题都不是交易的破坏者,但总的来说,JAX-WS似乎带来了很多不便。我是JAX-WS新手,所以可能有一些我不知道的事情可以缓解我的担忧 以下是我关注的问题: 我预计会有相当多的POJO在客户机和服务器之间传递(由于缺少更好的术语,我将称这些传输对象)。我希望在这些对象中包括文档和业务逻辑(对于初学者

我正在开发一个大量使用web服务的应用程序。我将开发这个应用程序的客户端和服务器端。我希望使用JAX-WS(我是新手),因为它似乎是面向Java的web服务的未来,但我有一些与工件相关的问题。所有这些问题都不是交易的破坏者,但总的来说,JAX-WS似乎带来了很多不便。我是JAX-WS新手,所以可能有一些我不知道的事情可以缓解我的担忧

以下是我关注的问题:

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

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

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

  • 我希望我的服务中至少有100个API。这意味着至少有200个包装类。看起来像是一堆乱七八糟的东西。很多很多课程对发展没有兴趣。更糟糕的是,这些包装器类将与传输对象驻留在同一个包中,这将是我的系统中使用率最高的类之一。对于我的系统中最重要的软件包,信噪比非常低


  • 如果有人能给我提供任何帮助我轻松开发应用程序的建议,我将不胜感激。

    如果你能同时控制客户端和服务器,你就不必使用
    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)也可以通过这个解决


    您的问题相当大,因此如果我没有充分说明某一点,请留下评论,我会尝试深入了解更多细节。

    我做了大量研究,从未发现任何建议可以在运行时创建客户端工件的内容。这很好,基本上解决了我所有的担忧。在我看来,企业Java(我将web服务计算到企业中,即使它在JavaSE中也可用)的复杂性确实令人望而生畏。你刚才的经历也一直发生在我身上@Musik,s.getPort(QName)能用吗?我们不需要提供ServiceInterface.class吗?我也加了这个,但还是不起作用。还有一个疑问,当每次动态创建这些包装类时,它不会影响性能吗?@kaushik:没错,类参数丢失了。关于性能:您只需创建一次端口,并在应用程序的整个生命周期内使用它。@musiKk,在我的eclipse中,每次都会显示一条消息信息:动态创建请求包装类org.kwa.www.jaxws.getConsumerEdge,在我的构建文件夹中,该类不存在。所以每次创建这些类,不是吗?