2010-05-20 23 views
12

我有一个xsd文件Foo.xsd。我尝试了以下方式将其引用到WSDL文件中,但它不起作用。如何在xsd文件中指定模式位置?

1)放置在本地文件系统XSD文件并将其导入作为

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

2)放置在Web根文件夹中的XSD文件和当运行在客户端导入为

<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 ant任务生成。

+0

如果直接引用文件,请小心构建时间与运行时间路径。我遇到了这个问题,并最终在服务器上托管了xsds,以便引用我的引用,然后引用uri。 – 2017-07-19 14:17:29

回答

16

的WSDL通过HTTP从任何主机访问,因此客户既不能访问文件网址或本地主机(这将是自己的主人,而不是你的服务器)。最好的解决方案将是一个文件路径XSD文件:

相对路径:

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

绝对路径:

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

因为你需要知道的上下文路径的绝对路径的webapp,所以我宁愿相对路径。

+1

尝试使用schemaLocation =“/ xfire/Foo.xsd”的相对路径 org.codehaus.xfire.XFireRuntimeException:无法找到模式部分: xFire 1.2.6用于生成Web服务。 – Manoj 2010-05-21 09:11:49

+0

相对路径不以a开头。/xfire是你的web应用程序的上下文路径吗? – 2010-05-22 20:57:48

+0

我的项目是maven多模块项目,我给../foo.xsd。如果我单独构建该模块,则可以找到XSD并建立成功。如果我从父级构建它正在父级根目录位置搜索XSD,则构建失败。如果项目是多模块的话,有关如何提供xsd位置的任何想法 – 2016-06-13 17:01:19

相关问题