1

我正在使用的 wsdl 中的 xsd 使用以“点斜杠”(./) 开头的路径进行引用。

<xsd:schema>
    <xsd:import namespace="urn:my.name.space.be" schemaLocation="http://fictive.url.be:11001/path/to/wsdl/my-service?XSD=./xsd/my-service.xsd"/>
</xsd:schema>

路径有效,可以在浏览器中访问xsd;例如,它也适用于 Soap UI。但是当我尝试使用 Jdeveloper 生成代理时,我遇到了“WebServiceException: : 从 wsdl 创建模型时出错:'ExampleType' 已定义”。

如果我删除“点斜线”(XSD=xsd/my-service.xsd),则不再发生异常并且一切正常。

这是一个错误吗?为什么会这样?有什么方法可以避免这种情况而不必修改 wsdl?

谢谢。

4

1 回答 1

1

发生这种情况的原因与您的 JDeveloper 工具如何组合 XML Schema 集有关。'ExampleType' is already defined'.表示以下两件事之一:

  • 相同的XSD 定义使用不同的基本 URIExampleType加载两次或更多次:不同的“字符串”表示,但在服务器上取消引用时,它指向相同的资源;

  • ExampleType两个或多个(不同的)XSD“位置”中定义:可以在 WSDL 类型/模式部分和/或外部 XSD 文件中。

当您更改 URL 时,它要么使其无效(不再有额外的引用),要么 JDeveloper URI 比较能够正确执行。

要进行诊断,您必须首先弄清楚从哪里下载了哪些资源。

在运行 JDeveloper 和其他工具时使用 HTTP 调试器(例如,使用 tcpmon 作为代理并通过它监视流量)。比较跟踪并查找每个工具试图解析的 URL。

比较 GET 标头值以查看工具之间的差异。然后查看下载的内容。它应该让您对下一步做什么有一个好主意。如果您仍然无法弄清楚,请使用其他信息更新问题。

于 2012-10-22T19:26:23.007 回答