2011-12-06 60 views
4

我在Web服務客戶端項目中使用wsimport來生成基於wsdl文件的工件類。我試圖通過使用wsdlLocation屬性在本地引用wsdl文件。生成的服務將嘗試根據服務類所在的包的路徑和wsdlLocation屬性的值創建URL。class.getResource(「。」)返回null

問題是生成的服務類正在使用class.getResource(".")以獲取當前目錄(服務類所在的包/目錄)的路徑。如果應用程序打包在一個jar中(就像我的情況那樣),這段代碼返回null。我注意到class.getResource(「」)實際上會返回正確的路徑,但更改生成的代碼看起來像是一個難看的解決方案。我想知道是否有一些方法來設置類路徑,以便前面的代碼將返回生成的服務類所在的包/目錄的路徑(如預期的那樣)?

謝謝

+0

一個類不駐留在一個目錄中。它駐留在一個包中。該包可以通過目錄或jar文件的條目來「物化」。無論該類是否在jar中,您的代碼都應該可以工作。如果你想要一個類的包名,只需使用Service.class.getPackage()。getName() –

+0

對不起 - 我已更正該帖子。正如我前面提到的那樣,指定的代碼是由wsimport生成的,我不想改變它。不管怎麼說,還是要謝謝你。 – Alina

回答

0

我會建議你使用QName,並把它作爲你的財產的地方,它可以讓你安心,你必須改變你的WSDL的選項指向的任何位置,如果你不想要基於默認相對路徑的方法。

恕我直言我沒有看到任何不改變生成代碼的原因,儘管它會導致每次重新生成代碼時都有變更的痛苦。

1

你無法獲得一個URL到你的jar文件內的目錄的原因是你忘記在創建jar文件時啓用「添加目錄條目」選項。

如果您使用eclipse創建jar文件,只需啓用「添加目錄條目」選項即可。

如果您使用jdk jar命令,我認爲該選項默認啓用。

不要使用WinZip,7zip或WinRar等普通郵編創建器,因爲我不相信這個選項。

0

您只需使用正斜槓「/」代替句點或點「。」。 。 這是早期版本中的錯誤,現在已解決。檢查以下鏈接以瞭解該錯誤。如果使用正斜槓不能讓我知道。 Bug