【问题标题】:How to specify schema location in an xsd file?如何在 xsd 文件中指定架构位置?
【发布时间】: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。

标签: java xml web-services xsd


【解决方案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 位置的任何想法
猜你喜欢
  • 2011-05-12
  • 1970-01-01
  • 2018-08-04
  • 1970-01-01
  • 2012-03-06
  • 2016-05-04
  • 1970-01-01
  • 2020-04-06
  • 1970-01-01
相关资源
最近更新 更多