我按照这些步骤来创建一个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"); }
问题:
- WSDL位置是在客户端程序提供。 WSDL位置在的wsimport生成客户机存根硬编码为好。 为什么这种冗余?
我使用的wsimport使用“localhost”的路径中创建客户端存根:
wsimport -keep http://localhost:9080/HelloWorldPOC/HelloWorldPOCImplService?wsdl
- 我从URL服务器部分localhost作为“localhost”的运行客户端测试程序。 有效。 然后,从服务器的一部分作为服务器的主机名的另一个系统运行相同的客户端。 有效。
- 这意味着在生成的客户端存根的WSDL位置不习惯?
- 我们可以生成本地主机上的WSDL和无再生客户存根部署在任何地方吗? 只有呼叫者客户机需要检索从部署服务器的WSDL。 这是公认的做法,还是我们需要重新生成客户端为每个部署的服务器?