如何在 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 文件的位置