2011-02-25 47 views
10

我試圖使用JAX-WS將文件保存到Sharepoint服務器。 Web服務調用報告成功,但文件不顯示。保存文件到Sharepoint服務器使用JAX-WS

我用這個命令(從WinXP中)來生成Java代碼,以使JAX-WS電話:

wsimport -keep -extension -Xnocompile http://hostname/sites/teamname/_vti_bin/Copy.asmx?WSDL 

我得到了Web服務的手柄,我使用以下稱爲port: CopySoap port = null;

if (userName != null && password != null) { 
    Copy service = new Copy(); 
    port = service.getCopySoap(); 
    ((BindingProvider) port).getRequestContext().put(BindingProvider.USERNAME_PROPERTY, userName); 
    ((BindingProvider) port).getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, password); 
} else { 
    throw new Exception("Holy Frijolé! Null userName and/or password!"); 
} 

我使用以下稱爲Web服務:

port.copyIntoItems(sourceUrl, destUrlCollection, fields , 
    "Contents of the file".getBytes(), 
    copyIntoItemsResult, copyResultCollection) 

sourceUrldestUrlCollection唯一的網址與 「主機名/網站/ teamname /技術文檔/子文件」。

FieldInformationCollection對象名爲fields僅包含一個FieldInformationFieldInformation對象具有「HelloWorld.txt」作爲displayName,internalName和value的值。 類型屬性設置爲FieldType.FILE。 id屬性設置爲(java.util.UUID.randomUUID()).toString()

呼叫copyIntoItems成功返回; copyIntoItemsResult包含值0,且在copyResultCollection中設置的唯一CopyResult對象 的錯誤代碼爲「SUCCESS」,並且爲空錯誤消息。

當我查看Sharepoint上的「Tech Docs」庫時,在「Sub Folder」中沒有文件。

爲什麼不告訴我我做錯了什麼?我只是錯過了一步?

更新(2011年2月26日)

我已經改變了我FieldInformation對象的顯示名稱和INTERNALNAME性質是「標題」的建議。仍然沒有喜樂,但朝着正確的方向邁出了一步。

與網址有點玩弄後,我得到了這些結果:

同時與sourceUrl和唯一的目標網址等同,不帶任何協議,我得到了成功響應,但沒有實際的文件出現在文檔庫。

對於這兩個URL等同,但指定了「http://」協議,我得到一個UNKNOWN錯誤,其中「對象引用未設置爲對象實例」。作爲消息。

源URL爲空字符串或null,我得到一個UNKNOWN錯誤,其中「值不在預期範圍內」。作爲錯誤信息。

更新(2011年3月2日)

正如阿列克謝Levenkov建議,我用小提琴手,看看發生了什麼事情,發現這個:

# Result Protocol Host URL Body Caching Content-Type Process Comments Custom 
34 401 HTTP hostname /sites/teamname/_vti_bin/Copy.asmx?WSDL 1,656  text/html javaw:5304   
35 401 HTTP hostname /sites/teamname/_vti_bin/Copy.asmx?WSDL 1,539  text/html javaw:5304   
36 200 HTTP hostname /sites/teamname/_vti_bin/Copy.asmx?WSDL 10,887 private  text/xml; charset=utf-8 javaw:5304   
37 401 HTTP hostname /sites/teamname/_vti_bin/Copy.asmx 1,656  text/html javaw:5304   
38 401 HTTP hostname /sites/teamname/_vti_bin/Copy.asmx 1,539  text/html javaw:5304   
39 200 HTTP hostname /sites/teamname/_vti_bin/Copy.asmx 611 private, max-age=0  text/xml; charset=utf-8 javaw:5304   

它看起來像一個簡單的握手會直到獲取WSDL和Web服務調用的HTTP 200。

所以我試着不把我的用戶名和密碼放在RequestContext中,我得到了類似的東西,就像我上面做的WSDL請求(兩個HTTP 401和一個HTTP 200)一樣,但是WebService調用只有一個HTTP 200。如果它不再使用我的用戶名/密碼,那麼理論上應該驗證失敗。

+2

+1爲錯誤消息:) – 2011-02-25 15:49:54

回答

4

目標網址應包含文件的完整路徑。我在方法描述頁面上檢查示例 - http://msdn.microsoft.com/en-us/library/copy.copy.copyintoitems.aspx

+0

當我對源和目的使用完整路徑(即包含http://部分)時,我得到「未將對象引用設置爲對象的實例。」作爲錯誤消息。當我僅將完整路徑用於僅目的地並將源保留爲空字符串時,我會得到「值不在預期範圍內」。 – 2011-02-28 03:19:12

+2

爲我工作(C#...但只要你設法調用WS它應該不重要你使用什麼語言)與:文件名的源,絕對網址(與文件部分)的目的地,空字段集合。嘗試收集Fiddler(或其他HTTP觀察者)跟蹤,看看是否有可疑的東西。您還可以在使用SharePoint的「複製」功能與您的功能進行比較時看到跟蹤。 – 2011-03-01 00:15:44

+0

基本上,我的Java安裝是在我的機器的用戶名/密碼中發送的,而不是我設置的那個。我不知道如何強制它發送我想要的用戶名/密碼。抱歉,接受答案的延遲。 – 2011-04-10 23:58:21

2

您的問題可能是字段。

顯示名稱和INTERNALNAME想成爲「標題」,和值HelloWorld.txt

而且,留下ID爲空,SharePoint將填充這一點。

+0

我試過了,但沒有運氣。這可能是源URL和目標URL在它們前面沒有http://或https://? – 2011-02-25 19:20:01

+0

也許吧。如果您從某個不是共享點的位置上傳文件,我認爲源URL可以爲空,或者至少爲空字符串。 – 2011-02-25 20:55:37

0

檢查C:\ Program Files \ Common Files \ Microsoft Shared \ web server extensions \ 12 \ LOGS中的SharePoint日誌。也許在用戶名中缺少域名部分導致問題?

+0

我想我無法避免的SharePoint管理員了。我注意到,Fiddler報告的「Auth」報告了我登錄到我的開發機器的用戶和域,而不是用於Sharepoint的用戶名,這在我的Java代碼中使用我的Sharepoint憑證後似乎很奇怪。 – 2011-03-03 03:19:28

相關問題