我已将 jax-ws-catalog.xml 添加到我的 .war 文件中,以便在本地而不是在 .war 中远程解析 schemaLocation。我已经按照
中的示例进行操作Metro User Guide: 2.10. Developing client application with locally packaged 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 中工作?
最佳答案
您将 jax-ws-catalog.xml 和 WSDL 文件放在哪里?
您提到您正在使用 WAR,但在 WAR 中,jax-ws-catalog.xml 的位置取决于您是尝试将其作为 WS 客户端还是作为 WS 端点发布者(服务器)进行访问.
如果您从 WAR 中访问外部 Web 服务,那么您的 jax-ws-catalog.xml 需要进入 app.war/WEB-INF/classes/META-INF 目录, 或者,如果您在应用程序中部署了契约(Contract)优先 Web 服务,并且具有 @WSDLLocation 注释,那么对于该 WSDL,jax-ws 在 app.jar/META-INF 中查找 jax-ws-catalog.xml
因此对于客户端 WSDL 位置 app.war/WEB-INF/classes/META-INF/jax-ws-catalog.xml 对于带有@WSDLLocation 注释的契约(Contract)第一个 WS 端点 app.war/META-INF
如果您想同时执行这两项操作,即发布(首先是契约(Contract))以及使用 Web 服务,那么您需要将 jax-ws-catalog.xml + WSDL 放在这两个位置,即 app.jar/WEB-INF/classes/META-INF 和 app.jar/META-INF
我已经在我的许多项目中成功地使用了上述方法,这些项目同时发布和使用 Web 服务,我可以保证它按预期工作。
关于java - 有没有人得到 jax-ws-catalog.xml 来在 Metro 上本地解析 schemaLocation?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2835994/