7

我已将 jax-ws-catalog.xml 添加到我的 .war 文件中,以便在本地解析 schemaLocation 而不是在 .war 中远程解析。我已经按照示例

Metro 用户指南:2.10。使用本地打包的 WSDL 开发客户端应用程序

当我部署 .war 并使用 soapUI 来验证 Web 服务时,它会在尝试访问 schemaLocation 时卡住http://somehost:8080/CMDB/schemas/common/1.0/CMDBCommonTypes.xsd

模式和 wsdl 都在 Eclipse 中验证(使用 Eclipse 的 XML 目录工具)。(如果有帮助的话,我可以发布我的 jax-ws-catalog.xml 和相关的 xsd 和 wsdl 的内容。

Google 搜索发现 jax-ws-catalog.xml 在 Metro 堆栈中不起作用的许多其他问题。

有没有人得到一个 jax-ws-catalog.xml 在 Metro 工作?

4

1 回答 1

16

您将 jax-ws-catalog.xml 和 WSDL 文件放在哪里?

您提到您正在使用 WAR,但在 WAR 中,jax-ws-catalog.xml 的位置取决于您是尝试作为 WS 客户端还是作为 WS Endpoint 发布者(服务器)访问它。

如果您从 WAR 中访问外部 Web 服务,那么您的 jax-ws-catalog.xml 需要进入 app.war/WEB-INF/classes/META-INF 目录,或者如果您有合同优先的 Web 服务部署在您的应用程序中,并且具有 @WSDLLLocation 注释,然后对于该 WSDL,jax-ws 在 app.jar/META-INF 中查找 jax-ws-catalog.xml

因此,对于客户端 WSDL 位置 app.war/WEB-INF/classes/META-INF/jax-ws-catalog.xml,对于带有 @WSDLLocation 注释的合同第一个 WS 端点 app.war/META-INF

如果你想两者都做,即发布(合同优先)以及使用 Web 服务,那么你需要将 jax-ws-catalog.xml + WSDLs 放在这两个位置,即 app.jar/WEB-INF/classes/ META-INF 和 app.jar/META-INF

我已经在我的许多项目中成功地使用了上述方法,这些项目同时发布和使用 Web 服务,我可以保证它按预期工作。

于 2011-04-05T14:32:24.643 回答