java - 使用 Java 创建 Web 服务客户端时出错

标签 java asp.net service jax-ws

我在网络上到处都看到过这个问题,但仍然没有找到适合我的明确解决方案。问题是这样的:

我正在尝试用 Java 创建一个 Web 服务客户端。客户端需要是一个控制台应用程序,将放置在服务器上并以一定的时间间隔自动运行。我尝试使用的 Web 服务是由第三方公司编写和托管的。该服务是用 ASP.NET 编写的。我们点击了该公司的多项服务。它们都是用 ASP.NET 编写的。我从未处理过这些服务,直到 2 天前,当时我的任务是使用其中 2 个服务并根据数据构建 Excel 电子表格。在继续之前,让我描述一下我的开发环境。其中一些是相关的,一些是不相关的,但我想包括所有内容:

  • Windows 7 专业版 32 位
  • NetBeans IDE 6.9.1
  • Java JDK 1.6.0_17
  • jre6
  • Glassfish 3 开源全平台发布
  • 所有软件均已应用所有可用更新

说到问题。当我将第一个 Web 服务客户端添加到控制台应用程序时,我对整个过程的顺利进行感到惊讶。我编写 Web 服务应用程序的大部分经验都是在 .NET 中完成的。我能够导入 WSDL,并且 NetBeans 在第一次尝试时生成了所有类。 5 分钟内,我第一次调用该服务并得到了预期的响应,让我知道我的尝试成功了。然后,我使用我需要的第二个 WSDL 的地址将第二个 Web 服务客户端添加到控制台应用程序。这是我遇到一个大问题的地方。

导入 WSDL 后,NetBeans 向我发出错误警报,指出:

Web Service Client can not be created by JAXWS:wsimport utility.
Reason: undefined element declaration 's:schema'

在接下来的一个小时里滥用 Google 寻找解决方案后,我最终决定进行一些尝试和错误。查看 NetBeans 中的“输出”窗口,我可以看到它提示 3 条特定的行。当我查看 WSDL 时,我发现这 3 行是完全相同的,如下所示:

<s:element ref="s:schema" />

这 3 行是在 WSDL 的顶部到大约中间的随机位置发现的。我从 Web Service References 文件夹中找到的 WSDL 中删除了这些行,只将 WSDL 保留在 META-INF 文件夹中。然后,我刷新了服务引用,令我惊讶的是,NetBeans 解析了 WSDL 并像以前一样生成了我的类。太棒了,对吧?好吧,这就是问题#2 发挥作用的地方。

既然我能够毫无错误地编译我的应用程序,我必须尝试访问该服务以查看我的黑客是否有效。它没。由于 JAXWS 中的另一个错误,我必须在创建服务对象时在构造函数中提供 WSDL 的 URL。这意味着我修复的 WSDL 将被忽略,服务现在又恢复使用无法解析的 WSDL。当我尝试提供我在项目中本地编辑的 WSDL 的位置时,我遇到了另一个编译错误,指出我遇到了 NullPointerException。它说我需要在使用它之前初始化该对象。

我研究了该网站上似乎无数的主题,寻找并尝试已提供的任何解决方案。我还尝试了网络上所有的解决方案,但都没有成功。如果有人对我有任何建议、任何提示、技巧、窍门,请告诉我。目前我愿意接受任何建议。

预先感谢您提供的任何帮助。

最佳答案

单方面的契约(Contract)变更可能会导致问题。

假设 s 前缀引用 http://www.w3.org/2001/XMLSchema 命名空间,看起来您的 WSDL 引用了 XML 架构类型。在生成 JAXB 绑定(bind)时,JAX-WS 可能无法解决此问题。

您可以从 http://www.w3.org/2001/XMLSchema.html 下载 XSD ;您至少需要 XMLSchema.xsdXMLSchema.dtddatatypes.dtd。由此生成 Java 类型可能需要修改您的 JAXB 绑定(bind)配置。

或者,使用 dynamic JAX-WS client code 可能更容易。您可以使用soapUI 等工具来创建/测试示例XML 请求。

<小时/>

如果您决定编辑 WSDL,则生成的服务代码应该具有 Foo_Service(URL, QName) 形式的构造函数,该构造函数允许您在本地配置 WSDL(例如从类路径) .

关于java - 使用 Java 创建 Web 服务客户端时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5889087/

相关文章:

java - 模拟 FeignClient 响应

javascript - 使用 Javascript 更改按钮文本

javascript - 当我使用 CodeMirror 编辑 TextArea 中的代码时,如何使用 js 或 jQuery 将其反射(reflect)到另一个文本区域中

asp.net - 使用子域开发 Web 应用程序

azure - 有没有办法公开 azure web 应用程序默认端口以外的其他端口?

java - 如何将泛型参数传递给方法?

java - 无法使用 java 中的 xslt 从 json 转换为 xml

java - 强制停止我的包后,Android 正在终止我的前台服务

android - 无法在内部类中启动服务 - 这是我的 Android list 吗?

java - 缩短 JDBC 代码