2010-05-20 24 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

相關問題