【问题标题】:XPages and Apache CXF: what's the best place for WSDL files?XPages 和 Apache CXF:存放 WSDL 文件的最佳位置是什么?
【发布时间】: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 文件。

标签: cxf xpages


【解决方案1】:

当您从 WSDL 生成 Java 类时,您应该将它们打包到一个 JAR 文件中。将 WSDL 放入 Jar 文件中,这样它就不会丢失。 This blog article 和 cmets 解释它。

当您将该 jar 保存在 NSF 中时,一个潜在的问题可能是访问权限(Java 执行权限)。

博客条目包含示例代码,请查看!

【讨论】:

  • 我注意到 wsdl2java 实际上可以使用 -clientJar 选项为您创建整个 JAR。似乎工作正常。添加到原始问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-12
  • 2013-01-06
相关资源
最近更新 更多