【问题标题】:Java Web Services - Defining Server LocationJava Web 服务 - 定义服务器位置
【发布时间】:2011-06-07 21:18:41
【问题描述】:

我要克服我正在使用的 Web 服务应用程序的最后一个障碍;我需要能够覆盖用于在生成的 WSDL 文件中设置架构位置和肥皂地址位置的默认设置。

当我部署应用程序(Red Hat linux 上的 GlassFish v2.1)时,它在 URL 中使用本地服务器名称,但它需要使用公共域名。我能够在本地保存 WSDL 文件,更改 URL,将其公开,从文件外部生成测试应用程序,最后能够成功运行测试。

我现在已经进入了 JAX-WS 自定义绑定领域,但我希望我要么忽略了一个更简单的解决方案,要么绑定并不像乍一看那么复杂。 Web 服务实现是通过一个无状态的 EJB(例如下面的 MyWS.java)。生成的 WSDL 文件看起来像 MyWSDL.wsdl(见下文)。

在 xsd:import 标记中,我需要将 schemaLocation 更改为

    http://test.mycompany.com/MyWSService/MyWS?xsd=1 

而不是

    http://local-server-name/MyWSService/MyWS?xsd=1 

在soap:address标签中,我需要将位置更改为

    http://test.mycompany.com/MyWSService/MyWS 

而不是

    http://local-server-name/MyWSService/MyWS.

MyWS.java

@WebService(name="MyWS",
        portName="MyWSPort",
        serviceName="MyWSService",
        targetNamespace="http://test.mycompany.com/")
@Stateless()
public class MyWS {

    @WebMethod(operationName="testLogin")
    public String testLogin(@WebParam(name="username") String username,
            @WebParam(name="password") String password) {
        String retVal = "Test Failed.";

        //do some stuff

        return retVal;
    }

    ...
}

MyWSDL.wsdl

<definitions targetNamespace="http://test.mycompany.com/" name="MyWSService">

  <types>
    <xsd:schema>
      <xsd:import namespace="http://test.mycompany.com/" schemaLocation="http://local-server-name/MyWSService/MyWS?xsd=1"/>
    </xsd:schema>
  </types>

  <service name="MyWSService">
    <port name="MyWSPort" binding="tns:MyWSPortBinding">
      <soap:address location="http://local-server-name/MyWSService/MyWS"/>
    </port>
  </service>
</definitions>

【问题讨论】:

  • 我并不是要粗鲁,但这甚至是一个问题吗?它以“我有一个最后的障碍......”开始。我们都应该知道你到底想要达到什么目的??它看起来有点像我正在尝试做的事情(这就是我来到这里的方式),但事实上这个问题对社区来说毫无用处
  • 我不是故意粗鲁,但这甚至是一个有用的评论吗?它从暗示开始,我们都应该知道你到底为什么要发帖?这听起来有点像您需要帮助(这就是我来到这里的方式),但就这条评论而言,这对社区来说毫无用处。如果您确实找到了问题的答案,您可以将其发布在此处,以供可能出于同样原因在此页面上找到自己的大量其他人使用。

标签: java web-services annotations


【解决方案1】:

我能够通过更改 GlassFish HTTP 服务的配置来解决该问题。对于用于 Web 服务应用程序的 HTTP 侦听器,我将服务器的别名设置为 test.mycompany.com:80。通常,我们的 Web 服务器中有这种配置,所以一开始我什至没有考虑应用程序服务器的配置。

【讨论】:

    【解决方案2】:

    您是如何生成 WSDL 的?你是手动生成的吗?您是否使用带有 -wsdl 选项的 wsgen 生成它?

    如果您使用 JAX-WS 进行部署,您实际上不应该做任何这些事情。相反,您应该能够去...

    <SERVER_URL>/<CONTEXT_LOCATION>/<SERVLET_URL>?wsdl
    

    ...JAX-WS servlet 将在运行中自动生成具有正确位置的 wsdl。

    【讨论】:

    • 对不起,我没有说清楚...... WSDL 文件正在动态生成。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-14
    • 1970-01-01
    • 1970-01-01
    • 2011-04-24
    • 2010-11-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多