【发布时间】:2014-05-12 06:59:12
【问题描述】:
我目前正在测试 Apache CXF (2.7.11)。目的是构建一个Web Service客户端。我大致关注 Martin Vereecken 的博文 (http://www.bizzybee.be/2013/01/23/creating-a-java-webservice-client-in-domino-using-apache-cxf/#more-451)。我有一个 WSDL 文件,并使用 wsdl2java 工具创建了示例代码。
我的第一个想法是将 wsdl 文件存储在 NSF 中(例如 WebContent\WEB-INF\resources\wsdl)。但是,生成的代码似乎找不到 WSDL 文件。代码看起来像这样(类名 Session 来自 WSDL):
Session.java:
URL url = Session.class.getResource("WEB-INF/wsdl/twinfield/session.wsdl");
if (url == null) {
url = Session.class.getClassLoader().getResource("WEB-INF/wsdl/twinfield/session.wsdl");
}
我尝试了 WEB-INF 和 /WEB-INF 但似乎都不起作用。
如果我将 WSDL 文件放在网络上(例如 domino/html/wsdl 文件夹),上面的 url 可以工作,但代码稍后会中断(似乎它使用 java.io.File 试图加载WSDL)。
本地引用(例如 C:\temp\wsdl)可以工作,但听起来不是一个可靠的选项。
最终的 java 代码将在 WebContent\WEB-INF\src 中,而不是在 Code\Java 中。
那么,在 Domino 环境中存储和引用 WSDL 文件的“最佳实践”是什么?
更新
我接受了@stwissel 的建议,并注意到wsdl2java 工具实际上可以为您创建整个罐子。只需指定选项 -clientJar,生成的 JAR 文件将包含所有类文件 + wsdl 文件。
【问题讨论】:
-
一个强大的解决方案是将您的 wsdl 放在服务器中的某个位置,例如在配置文件所在的文件夹中,然后为 wsdl 的位置添加系统属性,例如在
server.xml中,然后您可以在您的 Web 服务客户端中使用它。通过这种方式,您可以在任何您想要的客户端中使用/引用 wsdl。顺便说一句,我在 JBoss 中应用了这种方法,我不知道其他环境。 -
谢谢,但是 Domino 环境有点不同,例如没有
server.xml。问题似乎是class.getResource()和classLoader.getResource()都无法在NSF 中找到WSDL 文件。