2012-11-09 59 views
4

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

我需要在C#中生成我的客户端代码,但svcutil和Visual Studio的“添加服务引用”没有针对此自定义绑定文件的任何规定。有一些工具可以生成将客户端代码作为参数的Java客户端代码,但没有C#生成工具。我只是在没有指定XJB的情况下运行svcutil,但是我无法使其工作。我没有运气就做了大量的Google搜索。关于如何使这项工作的任何想法?

+0

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

回答

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文件)提供给一个Java工具,如wsimport,并从中获取一些Java文件。您可以快速执行deploy with Endpoint.publish,然后将svcutil指向已部署的地址加上?wsdl,然后查看是否得到不同的结果。

+0

我实际上找到了一篇描述绑定文件如何工作的类似文章,并且我最终将绑定文件中的内容添加到了XSD文件中。这仍然没有工作。错误全部是“在导出过程中生成的模式存在验证错误”的行,然后描述错误。另一个错误是“无法导入wsdl:portType”,然后“元素'xxx'丢失。” – koopaking3

+0

WSDL导入/包含三个XSD,其他所有XSD都从这三个导入/包含,而这些XSD继续导入其他一些XSD等。我已将svcutil指向一个Web服务器,并在其中设置了WSDL和XSD文件夹结构,过去的B/C似乎更好地解释XSD的路径和位置。 Visual Studio中没有验证错误,除了ReSharper抱怨include:“无法解析'schemaLocation'属性” – koopaking3

+0

这看起来越来越像svcutil无法解析所有XSD导入,因此您会得到一个不完整的WSDL。Svcutil不关心Java绑定,所以不要将它们包含在WSDL中,而是尝试将所有的XSD复制粘贴到WSDL中,并获取一个包含所有内容的大文件(也许询问给你文件的人只给你一个WSDL)。然后在将WSDL提供给svcutil之前验证WSDL(使用专门为WSDL设计的验证器,可以免费在线获得)。它很可能无法解析所有文件,因此将上下文限制为只有一个文件。 – Bogdan

0

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

+0

我试过WSCF.blue没有成功。还是)感谢你的建议。 – koopaking3

相关问题