0

我正在使用 CXF 以 Java 和 Tomcat 作为应用程序容器来生成 WSDL。我遇到了 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 身份验证,然后它重定向到它后面的 2 个不同服务器之一。WSDL 可以毫无问题地被拉取,但只是为了保持一致性,希望位置字段中包含 https。

此外,我还看到了许多其他关于堆栈溢出的问题,它们是半相同的,但没有什么是准确的。例如这个链接:

在 wsdl:import 中指定位置

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

请指教!

4

2 回答 2

1

通过向我的 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 配置更改。

于 2012-05-29T17:50:55.130 回答
0

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

尝试从实时服务中生成源代码是一个绝妙的想法,但它对于大多数部署来说确实很糟糕。制作副本,提高构建可靠性,减少担心(或至少担心其他事情)。

于 2012-05-29T13:03:23.277 回答