如何在 xsd 文件中指定架构位置?

Posted

技术标签:

【中文标题】如何在 xsd 文件中指定架构位置?【英文标题】:How to specify schema location in an xsd file? 【发布时间】:2011-02-21 18:29:14 【问题描述】:

我有一个 xsd 文件 Foo.xsd。我尝试了以下方法在 WSDL 文件中引用它,但它不起作用。

1) 将xsd文件放在本地文件系统中并导入为

<xsd:import namespace="http://ws.test.com/" schemaLocation="file:///D:/wsdl/Foo.xsd"></xsd:import>

2) 将 xsd 文件放在 web 根文件夹中并导入为

<xsd:import namespace="http://ws.test.com/" schemaLocation="http://localhost:8080/Xfire/Foo.xsd"></xsd:import>

当我运行客户端时,响应对象的字段为空。但是,当我将类型定义嵌入到 WSDL 本身时,这是可行的。

我们如何指定外部 xsds 的路径?

我正在使用 xFire 1.2.6 来生成 Web 服务。客户端是使用 xFire WSGen 蚂蚁任务生成的。

【问题讨论】:

如果您直接引用文件,请注意构建时间与运行时间路径。我对此有疑问,最终在服务器上托管 xsds 以供我参考,然后改为引用 uri。 【参考方案1】:

通过 HTTP 从任何主机访问 WSDL,因此客户端既不能访问文件 URL,也不能访问 localhost(它将是它自己的主机,而不是您的服务器)。最好的解决方案是 xsd 文件的文件路径:

相对路径:

<xsd:import namespace="http://ws.test.com/" schemaLocation="../Foo.xsd"/>

绝对路径:

<xsd:import namespace="http://ws.test.com/" schemaLocation="/myapp/Foo.xsd"/>

对于绝对路径,你需要知道你的 webapp 的上下文路径,所以我更喜欢相对路径。

【讨论】:

使用 schemaLocation="/xfire/Foo.xsd" org.codehaus.xfire.XFireRuntimeException 尝试了相对路径:找不到架构部分:xFire 1.2.6 用于生成 web 服务。 相对路径不以 / 开头。 /xfire 是你的 webapp 的上下文路径吗? 我的项目是我给的maven多模块项目../foo.xsd。如果我单独构建该模块,它能够找到 XSD 并构建成功。如果我从父级构建它正在父根位置中搜索 XSD,则构建将失败。如果项目是多模块,关于如何提供 xsd 位置的任何想法

以上是关于如何在 xsd 文件中指定架构位置?的主要内容,如果未能解决你的问题,请参考以下文章

当用户在“另存为”对话框中指定位置时,如何将文本写入文件?

如何在 Spring Maven WAR 中指定 SQLite db 文件的位置

如何使用 Rubymotion 在 ios 模拟器中指定用户位置

如何在 web.config 中指定根 (/) 位置?

如何在word中指定范围,在指定位置自动生成目录?

如何在 CATransition 中指定开始和结束位置?