1

如果这是一个重复的问题,我深表歉意——我查找了相当多的文件,发现了很多类似的问题,但与此完全不同。

我正在尝试使用 wsimport 为具有在此 URL 指定的 WSDL 的 Web 服务生成 Java 客户端绑定:https ://api.dss.gov.au/datacollection/dex?wsdl但是,我不断收到如下错误:

[错误] 文件过早结束。http://api.dss.gov.au/datacollection/dex?WSDL&type=XSD&file=file%3A%2FC%3A%2Ftfs%2FCCSApps%2FDataCollection%2FBranches%2FMR17.11%2FOSB%2FDataCollection.Assessment%2FResources的第 1 行%2FSchema%2FAssessment.External.xsd

[错误] org.xml.sax.SAXParseException; systemId:http ://api.dss.gov.au/datacollection/dex?WSDL&type=XSD&file=file%3A%2FC%3A%2Ftfs%2FCCSApps%2FDataCollection%2FBranches%2FMR17.11%2FOSB%2FDataCollection.Assessment%2FResources% 2FSchema%2FAssessment.External.xsd;行号:1;列号:1;文件过早结束。https://api.dss.gov.au/datacollection/dex?wsdl的第 2 行

尝试下载/解析 WSDL 中列出的第一个模式文件时失败。

我在 Windows 10 上运行它。我尝试过 JDK 1.8 和 Java 9。我尝试使用 Eclipse Web 开发人员工具、使用 jaxws-maven-plugin 和直接使用 wsimport 生成它——它们都失败了同样的错误。因此,大概该错误与核心 jax-ws 实现有关,而不与任何包装器有关。

我已将架构 URL 插入我的浏览器窗口(与我的开发人员在同一台机器上)并验证它是否正确下载。乍一看,它似乎是一个格式良好的模式文件——它肯定不是零长度,正如这个错误所暗示的那样。

考虑到这可能是一个权限问题,我尝试了这个问题中建议的修复:JDK8 的 WebService Client Generation Error不幸的是,它们也不起作用。

我尝试将 WSDL 和有问题的模式文件下载到我的本地目录,然后更新 WSDL 中的模式链接以指向模式文件的本地副本。这似乎确实解决了问题 - 但是,它在下一个模式文件上失败。我开始手动在本地下载模式文件并更新链接,但似乎有几十个模式文件。如果 API 发生变化,这似乎也不是针对此 Web 服务进行开发的可持续方式。

对此的答案可能包括以下任何一项:

  1. 告诉我我做错了什么导致这个错误,并允许我修复它以自动从这个 WSDL 生成 Java 绑定。
  2. wsimport 的免费替代工具,可实现相同的功能。
  3. 对 wsimport 的错误报告的引用表明这是一个尚未解决的已知问题。
4

2 回答 2

2

我在 XML 编辑器中打开了错误的 XSD 文件,它显示The reference to entity "type" must end with the ';' delimiter.. && 符号不会在模式导入中转义,并且跨越所有其他模式导入。&type=XSD&file=file

这取决于 WSDL 作者是否可以转义 & 符号或摆脱XSD 文件中导入中的可选type和实体,这样就可以解决问题。file

于 2018-12-10T04:49:29.357 回答
0

我必须对 xml 声明有问题吗?下载 WSDL 并尝试使用任何 IDE 生成客户端。即日食。

于 2018-07-20T08:05:13.750 回答