2009-12-23 78 views
4

更新:我已將我的問題提交給CXF用戶的郵件列表這裏使用來自java web開始的CXF web服務

更新:我目前已經簽署了所有的罐子。我仍然無法以可以找到WSDL的方式獲取CXF設置。我最後的嘗試是將WSDL放置在我的WAr文件中,以便通過Web瀏覽器訪問它。我將客戶端中的wsdllocation設置爲URL(http://www.example.com/app/example.wsdl)。我現在得到以下例外:

Exception in thread "AWT-EventQueue-0" java.lang.ExceptionInInitializerError 
at com.sun.xml.internal.ws.util.xml.XmlUtil.createDefaultCatalogResolver(Unknown Source) 
at com.sun.xml.internal.ws.client.WSServiceDelegate.parseWSDL(Unknown Source) 
at com.sun.xml.internal.ws.client.WSServiceDelegate.<init>(Unknown Source) 
at com.sun.xml.internal.ws.client.WSServiceDelegate.<init>(Unknown Source) 
at com.sun.xml.internal.ws.spi.ProviderImpl.createServiceDelegate(Unknown Source) 
at javax.xml.ws.Service.<init>(Unknown Source) 

谷歌搜索幾乎沒有什麼關於此。

我正在使用Apache CXF從給定的WSDL創建Web服務客戶端。我試圖訪問該服務時遇到了問題但是,我得到這個異常:

Can not initialize the default wsdl from ../resource/example.wsdl 
Exception in thread "AWT-EventQueue-0" java.security.AccessControlException: access denied (java.util.PropertyPermission user.dir read) 
at java.security.AccessControlContext.checkPermission(Unknown Source) 
at java.security.AccessController.checkPermission(Unknown Source) 
at java.lang.SecurityManager.checkPermission(Unknown Source) 
at java.lang.SecurityManager.checkPropertyAccess(Unknown Source) 

我不籤我的網絡啓動應用程序,也不會喜歡,因爲我不是從客戶端的機器訪問任何資源。提到的WSDL包裝在我的罐子裏。問題是由CXF生成的客戶端代碼造成的:

URL url = null; 
    try { 
     url = new URL("../resource/example.wsdl"); 
    } catch (MalformedURLException e) { 
     System.err.println("Can not initialize the default wsdl from ../resource/example.wsdl"); 
     // e.printStackTrace(); 
    } 
    WSDL_LOCATION = url; 

如何正確地將CXF指向此WSDL?我也擔心類上的WebService註釋:

@WebServiceClient(name = "Example", 
       wsdlLocation = "../resource/example.wsdl", 
       targetNamespace = "http://services.example.com/") 

我還需要更改嗎?

回答

1

經過一些錯誤和實驗,我已經設法讓一切正常工作。首先,請確認cxf.jarwsdl4j.jar實際上在您的類路徑中。我以爲我已經驗證了這一點,但是因爲我是通過webstart在jar中實例化客戶端,而這本身就是一個WAR,所以我在構建過程中搞亂了cxf運行時的位置。另外,在指定wsdl位置時,我必須使用"classpath:my.wsdl"。我讓自己變得簡單,只需將wsdl放在與我的源代碼相同的位置即可。

希望這可以幫助某個人可能在某個時刻做同樣的事情!

2

您將需要將該wsdlLocation更改爲類路徑:引用。

使用-wsdlLocation如圖所示here

+0

我對這個值的確切用途是什麼? WSDL位於我的jar中,只是指定wsdl名稱會導致一個安全異常,因爲它試圖從user.dir加載。 – Casey 2009-12-29 16:49:14

+0

一個classpath:/org/foo/bar.wsdl路徑,我想。 – bmargulies 2009-12-29 18:47:57

+0

我嘗試使用classpath:example.wsdl作爲-wsdlLocation的輸入,並且在運行它時發生此異常: 無法從classpath初始化默認wsdl:WEXAuth.wsdl 線程「AWT-EventQueue-0」java中的異常.security.AccessControlException:訪問被拒絕(java.util.PropertyPermission user.dir讀取) – Casey 2009-12-29 22:09:59