gpt4 book ai didi

java - 覆盖 Glassfish 生成的 WSDL 服务端点地址

转载 作者:搜寻专家 更新时间:2023-10-31 19:36:18 24 4
gpt4 key购买 nike

我有一个由 wsgen 通过 maven 生成的 Web 服务。当我将服务部署到 Glassfish 时,它会将服务器 URL 放入 WSDL。我们的 Glassfish 服务器以 Apache 代理服务器为前端。

这一切意味着当有人访问我们的 WSDL 并查看服务端点时,他们看到的 soap 地址位置是

http://app server url/service...

代替

http://proxy server url/service...

我想我需要对一些项目进行一些澄清......

  1. 这个端点地址重要吗?如果端点地址与他们将调用以调用服务的代理服务器的 URL 不匹配,客户端是否仍然能够运行。这基本上是在问这样的问题:“WSDL 之于 Web 服务就像接口(interface)之于对象一样”。

    UPDATE: In response to this first question it does appear that "WSDL to web service as interface is to object". The endpoint address specified in the WSDL is not important. In fact, it is relatively trivial to invoke a web service operation on a different endpoint than the one specified in the WSDL as described here.

    // 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!");

  2. WSDL 是在我们部署到 Glassfish 时自动生成的。有没有一种简单的方法可以通过应用服务器设置覆盖 Glassfish 中生成的端点地址。如果是这样,我可以创建一个设置,自动将代理服务器 URL 放入生成的 WSDL 中。

如果 1 确实很重要并且我们不能用 2 以任何方式覆盖它,那么这基本上意味着我们需要为开发和生产进行单独的构建。这“感觉不对”,因为在我看来,要部署到另一台服务器,我们唯一需要做的就是将现有(并经过测试)的 war 从一个环境中删除到新服务器上。

最佳答案

原来在部署服务的HTTP Listener上有一个Server Name参数。您可以从 Glassfish 管理控制台指定此值,Glassfish 将使用此名称而不是请求 URL 中的主机名。

不幸的是,如果您的应用服务器和代理服务器不使用相同的端口或协议(protocol)(我们的不使用),则此参数不允许您覆盖端口或协议(protocol)(http 到 https)。

我做的是 write a simple servlet filter让我的服务为我处理这件事。

关于java - 覆盖 Glassfish 生成的 WSDL 服务端点地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2142924/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com