复盖下产生的WSDL服务终点的地址
-
22-09-2019 - |
题
我有一个网服务所产生的wsgen通过家.当我将服务部署到我们这地方服务器的网址进入WSDL。我们的下服务器是朝向通过一个Apache代理服务器。
这是什么所有装置时,有人访问我们的户看起来在服务的端点和肥皂地址的位置,他们看到的是
http://app server url/service...
而不是的
http://proxy server url/service...
我猜我需要一些澄清几个项目...
为此端点的地址很重要?将客户仍可能如果终点的地址不相匹配的网址代理服务器,他们将要求援引的服务。这基本上要求的问题"是WSDL网服务接口为对象".
更新: 在应对这一问题就不会出现"WSDL网服务接口为对象".终点指定的地址在WSDL不是重要的。事实上,它是比较琐细的调用一个网络服务操作上不同的终点比一个指定的WSDL 如在这里.
// Create service and proxy from the generated Service class. HelloService service = new HelloService(); HelloPort proxy = service.getHelloPort();
// Override the endpoint address ((BindingProvider)proxy).getRequestContext().put( BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "http://new/endpointaddress"); proxy.sayHello("Hello World!");
WSDL是自动产生,当我们部署到我们.是有一个简单的方法来复盖此产生的终点的地址在我们通过一个应用程序服务器的设定。如果是这样,我可以创造一种设定自动地的代理服务器的网址进入产生WSDL。
如果1确实是重要的,我们不能复盖它在任何方式2,则这基本上意味着我们需要单独建立发展和生产。这并不是"感觉",因为它似乎对我我们唯一需要做到部署到另一个服务器被删除现有的(和测试)战争从一个环境上新的服务器。
解决方案
事实证明有一个 Server Name
参数 HTTP Listener
那里的服务的是部署。你可以指定这个数值从我们的管理控制台和我们将使用这个名称,而不是主机名称的请求的网址。
不幸的是,这一参数将不能让你在复盖港口或协议(http https)如果应用服务器和代理服务器不使用同一个人(我们不)。
我做了什么,而不是是 写一个简单的小过滤器 为我服务,以处理这对我来说。
其他提示
我发现了什么我认为这是一个非常简单的方式来处理的问题:使用mod_substitute在Apache.由于我们这些与这一问题已经在使用Apache,并且它是建立在简单,我很喜欢这种方法最好。
我把一块类似的下一个我Apache conf文件和发现的喜悦:
<Location />
AddOutputFilterByType SUBSTITUTE text/xml
Substitute "s|http://internal:8080/xxx|https://external/xxx|ni"
</Location>