【问题标题】:Generating C# client code from a JAXB WSDL with a binding file使用绑定文件从 JAXB WSDL 生成 C# 客户端代码
【发布时间】:2012-11-09 16:51:58
【问题描述】:

我有一个包含几十个 XSD 的 WSDL,我需要从 WSDL 生成客户端代码以使用 Web 服务。 Web 服务的所有者使用 Java 并使用 JAXB 生成 WSDL/XSD。 JAXB 为自定义绑定指定了一个“绑定文件”,并且所有者已经生成了一个 XJB 文件(JAXB 自定义绑定文件)以与 WSDL 一起使用。

我需要在 C# 中生成我的客户端代码,但 svcutil 和 Visual Studio 的添加服务参考没有针对此自定义绑定文件的任何规定。有一些工具可以生成将绑定文件作为参数的 Java 客户端代码,但没有用于 C# 生成的工具。我尝试只运行 svcutil 而不指定 XJB,但我无法让它工作。我做了广泛的谷歌搜索,但没有运气。关于如何完成这项工作的任何想法?

【问题讨论】:

  • 正如@Bogdan 所建议的,绑定文件是一个红鲱鱼。我的问题是验证命名空间,其中某些类型被多次声明。我不确定它是否是由来自 Java 的 WSDL 引起的(因为代码生成适用于 Java 工具,但不适用于 svcutil),但.Net 客户端代码生成似乎不需要绑定文件。

标签: c# jaxb wsdl


【解决方案1】:

You can customize WSDLs 通过提供绑定声明,但这些是 Java 特定的,并且自定义仅适用于从 WSDL 生成 Java 代码时。可以内联(嵌入在 XSD/WSDL 中)或在单独的文件中声明绑定。 您有一个单独的文件,所以我认为 WSDL 和 XSD 是“干净的”。

JXB 文件是一个红鲱鱼。 WSDL 应该与技术无关,它不关心 Java、C# 或其他任何东西。您应该能够生成代码,因为 svcutil 将忽略 Java 绑定。

svcutil 会向您抛出什么错误?当 WSDL 缺少 <type> 部分时,我已经看到它失败并出现难以理解的消息。您提到了几十个 XSD 文件,它们是如何在 WSDL 中导入的,导入是否有效?如果您在 Visual Studio 中打开 WSDL,它是否显示验证错误,它是否在抱怨什么?

最后,如果一切都失败了,您可以将其全部(包括 JXB 文件)提供给像 wsimport 这样的 Java 工具并从中获取一些 Java 文件。您可以快速执行deploy with Endpoint.publish,然后将 svcutil 指向已部署的地址加上 ?wsdl,看看是否会得到不同的结果。

【讨论】:

  • 我实际上发现了一篇描述绑定文件如何工作的类似文章,最后我将绑定文件内联的内容添加到 XSD 文件中。这仍然没有奏效。这些错误都在“导出期间生成的架构上存在验证错误”这一行,然后它描述了错误。另一个错误是“无法导入 wsdl:portType”,然后是“缺少元素 'xxx'。”
  • WSDL 导入/包含三个 XSD,所有其他 XSD 都是从这三个中导入/包含的,这些 XSD 继续导入其他一些 XSD,等等。我已将 svcutil 指向 Web 服务器我在哪里设置了 WSDL 和 XSD 文件夹结构,过去的 b/c 似乎可以更好地解释 XSD 的路径和位置。 Visual Studio 中没有验证错误,除了 ReSharper 抱怨包含:“无法解析 'schemaLocation' 属性”
  • 这看起来越来越像 svcutil 无法解析所有 XSD 导入,因此您得到一个不完整的 WSDL。 Svcutil 不关心 Java 绑定,因此不要将它们包含在 WSDL 中,而是尝试将所有 XSD 复制粘贴到 WSDL 中,然后只获取一个包含所有内容的大文件(也许问给你文件的人而是只给你一个 WSDL)。然后在将 WSDL 提供给 svcutil 之前验证它(使用专门为 WSDL 设计的验证器,有一些免费的在线可用)。它可能无法解析所有文件,因此将上下文限制为一个文件。
  • 正在实施您的一些建议。明天会就结果回复您。
  • 我解决了这个问题,正如你所建议的,绑定文件是一个红鲱鱼,但进口不是问题。我不得不经历很多模式并更改名称空间,因为存在重复的声明和冲突。我唯一的猜测是 Java 工具不需要像 svcutil 或其他 .Net WSDL 工具那样明确声明命名空间。我接受了你的回答,因为它让我远离了绑定文件。我只是要求您在回答未来观众时强调这一事实。
【解决方案2】:

试试WSCF.blue,看看这对你的情况是否有用。请注意,我不熟悉 JABX,但我目前正在使用此工具从 wsdl 生成 C# 代码。

【讨论】:

  • 我试过 WSCF.blue 没有成功。不过,感谢您的建议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-12
  • 2011-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-11
相关资源
最近更新 更多