2011-06-07 88 views
2

我有一个最后的障碍来解决我正在使用的Web服务应用程序;我需要能够覆盖用于在生成的WSDL文件中设置模式位置和soap地址位置的默认设置。Java Web服务 - 定义服务器位置

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

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

在XSD:进口标签,我需要的schemaLocation更改为

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

,而不是

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

,并在肥皂:地址标签,我需要改变位置是

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> 
+0

我不是粗鲁的,但这是一个问题吗?它以“我有一个最后的障碍......”开始。我们都应该知道你想要实现什么?它看起来有点像我想要做的事情(这就是我如何到这里),但因为它是这个问题是社区很没用 – jambriz 2014-09-09 16:10:20

+0

我不是粗鲁,但这是一个有用的评论?它开始时带有暗示,我们都应该知道你为什么要发布?这听起来有点像你需要帮助(这就是我得到的),但就此评论而言,这对社区来说是无用的。如果您确实找到了针对您的问题的答案,则可以将其发布到此处,以供出于同样原因可能在本页找到自己身份的大量其他人员使用。 – John 2016-06-07 20:56:47

回答

0

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

如果您使用JAX-WS进行部署,则实际上不应该执行其中的任何一项。相反,你应该能够去......

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

...和JAX-WS servlet将自动生成与正确的位置飞一个WSDL。

+0

对不起,我没有说清楚... WSDL文件正在生成。 – John 2011-06-08 11:15:41

2

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