我有一个由 wsgen 通过 maven 生成的 Web 服务。当我将服务部署到 Glassfish 时,它会将服务器 URL 放入 WSDL。我们的 Glassfish 服务器以 Apache 代理服务器为前端。
这一切意味着当有人访问我们的 WSDL 并查看服务端点时,他们看到的肥皂地址位置是
http://app server url/service...
代替
http://proxy server url/service...
我想我需要对一些项目进行澄清......
这个端点地址重要吗?如果端点地址与它们将调用以调用服务的代理服务器的 URL 不匹配,客户端是否仍然能够运行。这基本上提出了“ WSDL 到 Web 服务就像接口是对象”这样的问题。
更新:在回答第一个问题时,似乎“ WSDL to web service as interface is to object ”。WSDL 中指定的端点地址并不重要。事实上,在与此处描述的 WSDL 中指定的端点不同的端点上调用 Web 服务操作是相对简单的。
// 从生成的服务类创建服务和代理。 HelloService 服务 = 新的 HelloService(); HelloPort 代理 = service.getHelloPort();
// 覆盖端点地址 ((BindingProvider)proxy).getRequestContext().put( BindingProvider.ENDPOINT_ADDRESS_PROPERTY, " http://new/endpointaddress "); proxy.sayHello("Hello World!");
WSDL 是在我们部署到 Glassfish 时自动生成的。有没有一种简单的方法可以通过应用服务器设置覆盖 Glassfish 中生成的端点地址。如果是这样,我可以创建一个设置来自动将代理服务器 URL 放入生成的 WSDL。
如果 1 确实很重要并且我们不能以任何方式用 2 覆盖它,那么这基本上意味着我们需要为开发和生产进行单独的构建。这并不“感觉正确”,因为在我看来,要部署到另一台服务器,我们唯一需要做的就是将现有(和经过测试的)战争从一个环境放到新服务器上。