使用CXF和Tomcat的WSDL导入位置

时间:2012-05-25 18:22:14

标签: java api tomcat wsdl cxf

我使用CXF生成WSDL,使用Java和Tomcat作为应用程序容器。我遇到的问题是wsdl导入位置不包括ssl链接版本。这是一个例子:

<wsdl:import location="http://api.test.com/soap_admin?wsdl=AdminApi.wsdl" namespace="http://admin.test.com"></wsdl:import>

应该是(我知道如何更改命名空间值,而不是位置值):

<wsdl:import location="https://api.test.com/soap_admin?wsdl=AdminApi.wsdl" namespace="https://admin.test.com"></wsdl:import>

我前面还有一个负载均衡器正在进行SSL身份验证,然后重定向到其后面的两个不同服务器之一。 WSDL能够被提取没有问题,但为了保持一致,希望位置字段中包含https。

此外,我已经看到堆栈溢出上的许多其他问题是半同样的事情,但没有什么是准确的。例如,这个链接:

specify location in wsdl:import

但这是在WCF堆栈上完成的,而不是我正在使用的。我的直觉告诉我它是一个简单的CXF或Tomcat配置更改。如果我将它部署在我的一个不使用SSL而不包含https的开发服务器上,那么它是动态的,这将是很好的。

请指教!

2 个答案:

答案 0 :(得分:0)

我总是尝试保留我生成源代码的WSDL文档的本地副本,这样如果服务碰巧暂时关闭,我的构建不会失败。是的,这意味着服务位置不正确,但通过在Server对象上设置属性很容易修复,就像设置用户名和密码一样。 (当然,如果有服务API更改,我可能需要更改相当多的代码。)一旦保留本地副本,只需将<wsdl:import location=… />设置为本地路径(使用文本编辑器) !);在代码生成完成后将不会使用

尝试从实时服务生成源是一个很好的想法,除了它对大多数部署来说真的很糟糕。制作副本,提高构建可靠性,减少担心(或者至少关注其他事情)。

答案 1 :(得分:0)

通过在tomcat 7的server.xml配置中添加另一个连接器端口来解决此问题:

<Connector port="8081" maxHttpHeaderSize="8192"
maxThreads="300" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" scheme="https" proxyPort="443" proxyName="your.frontend.address" disableUploadTimeout="true" />

同样@Donal,我基本上定义了如何连接到这个tomcat的两个版本。我刚刚列出的代码我将负载均衡器指向,然后对于内部用户,我仍然定义了8080连接器端口。显然可以将配置调整到适合您需要的任何配置。你的解决方案当然有效,但仍然有相当不成熟的产品,我不想一直这样做。

我原本以为这是一个CXF问题,但结果却是一个tomcat配置更改。