JAX-WS部署的最佳实践:WSDL位置和客户代(JAX-WS deployment best pr

2019-09-22 03:24发布

我按照这些步骤来创建一个Web服务:

  • 创建一个服务接口和实施与@WebService和@WebMethod注解
  • 部署服务
  • 生成的客户端存根使用的wsimport
  • Web服务调用与看起来像一个客户端程序:

     public static void main(String[] args) throws Exception { URL url = new URL("http://SERVER:PORT/HelloWorldPOC/HelloWorldPOCImplService?wsdl"); QName qname = new QName("http://helloworld.poc.com/", "HelloWorldPOCImplService"); Service service = Service.create(url, qname); HelloWorldPOCImpl hello = service.getPort(HelloWorldPOCImpl.class); hello.execute("hello"); System.out.println("Done"); } 

问题:

  1. WSDL位置是在客户端程序提供。 WSDL位置在的wsimport生成客户机存根硬编码为好。 为什么这种冗余?
  2. 我使用的wsimport使用“localhost”的路径中创建客户端存根:

     wsimport -keep http://localhost:9080/HelloWorldPOC/HelloWorldPOCImplService?wsdl 
    • 我从URL服务器部分localhost作为“localhost”的运行客户端测试程序。 有效。 然后,从服务器的一部分作为服务器的主机名的另一个系统运行相同的客户端。 有效。
    • 这意味着在生成的客户端存根的WSDL位置不习惯?
    • 我们可以生成本地主机上的WSDL和无再生客户存根部署在任何地方吗? 只有呼叫者客户机需要检索从部署服务器的WSDL。 这是公认的做法,还是我们需要重新生成客户端为每个部署的服务器?

Answer 1:

  1. 你可以把它理解为这将是覆盖99%的默认位置。 在我生成的代码,服务可能也创造不指定WSDL URL,所以后来默认URL将被使用。
  2. 当你重写WSDL文件的默认URL地址,当然这将不使用。 很多时候,web服务生产商仅给我们的WSDL文件,然后我们生成从WSDL放置在本地硬盘上的存根,所以我们需要始终覆盖默认值。

PS:我会八卦的另一种技术如何调用web服务没有存根的产生。 你只需要像“远程接口”客户端可用(由服务器类实现)。 当你是负责生产和消费web服务这是非常有效的。 这是非常有效的,当界面的发展,因为当你改变它,你不需要重新生成存根。 下面是示例与JBoss 7(JAX-WS)上的客户端中使用的服务器和Apache CXF库: http://www.mastertheboss.com/jboss-web-services/developing-web-services-on-jboss-as- 7



文章来源: JAX-WS deployment best practice: WSDL location and client generation
标签: jax-ws