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

2024-01-06

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

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

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

代替

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

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

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

    UPDATE:针对第一个问题,看来“WSDL 之于 Web 服务就像接口之于对象一样”。WSDL 中指定的端点地址并不重要。事实上,在与 WSDL 中指定的端点不同的端点上调用 Web 服务操作相对简单如此处所述 http://metro.java.net/2.1.1/guide/How_to_invoke_and_endpoint_by_overriding_endpoint_address_in_the_WSDL.html.

    
    
    // 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 http://new/endpointaddress");
    proxy.sayHello("Hello World!");
      
  2. 当我们部署到 Glassfish 时,WSDL 会自动生成。有没有一种简单的方法可以通过应用程序服务器设置覆盖 Glassfish 中生成的端点地址。如果是这样,我可以创建一个设置来自动将代理服务器 URL 放入生成的 WSDL 中。

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


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

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

我所做的是编写一个简单的servlet过滤器 https://stackoverflow.com/questions/2149912/can-i-intercept-calls-for-my-wsdl-on-glassfish-or-on-any-app-server让我的服务为我处理这个问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

覆盖 Glassfish 生成的 WSDL 服务端点地址 的相关文章

随机推荐