2011-02-25 21 views
10

Tôi đang cố lưu tệp vào máy chủ Sharepoint bằng JAX-WS. Cuộc gọi dịch vụ web báo cáo thành công nhưng tệp không hiển thị.Lưu tệp vào máy chủ chia sẻ bằng cách sử dụng JAX-WS

tôi đã sử dụng lệnh này (từ một WinXP) để tạo mã Java để thực hiện cuộc gọi JAX-WS:

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

tôi nhận được một tay cầm vào dịch vụ web mà tôi gọi là port sử dụng như sau: 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!"); 
} 

tôi gọi là dịch vụ web bằng cách sử dụng sau đây:

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

Các sourceUrl và url chỉ trong destUrlCollection bằng "hostname/site/teamname/Tech Documents/Sub Folder".

Đối tượng FieldInformationCollection có tên fields chỉ chứa một FieldInformation. Đối tượng FieldInformation có "HelloWorld.txt" làm giá trị cho displayName, internalName và giá trị. Thuộc tính type được đặt thành FieldType.FILE. Thuộc tính id được đặt thành (java.util.UUID.randomUUID()).toString().

Cuộc gọi đến copyIntoItems trả về thành công; copyIntoItemsResult chứa giá trị 0 và chỉ đối tượng CopyResult được đặt trong copyResultCollection có mã lỗi của "THÀNH CÔNG" với thông báo lỗi rỗng.

Khi tôi xem thư viện "Tài liệu công nghệ" trên Sharepoint, trong "Thư mục con", không có tệp nào ở đó.

Tại sao nó không cho tôi biết tôi đã làm gì sai? Tôi vừa bỏ lỡ một bước?

Cập nhật (tháng lần thứ 26, 2011)

Tôi đã thay đổi thuộc tính displayName và internalName đối tượng FieldInformation của tôi là "Title" như đề xuất. Vẫn không có niềm vui, nhưng là một bước đi đúng hướng.

Sau khi chơi xung quanh với các url cho một chút, tôi có những kết quả này:

Với cả sourceUrl và URL đích chỉ tương đương, không có giao thức, tôi nhận được câu trả lời THÀNH CÔNG nhưng không có tài liệu thực tế xuất hiện trong Thư viện Tài liệu.

Với cả hai URL tương đương nhưng với giao thức "http: //" được chỉ định, tôi gặp lỗi UNKNOWN với "Tham chiếu đối tượng không được đặt thành phiên bản của đối tượng". như tin nhắn.

Với URL nguồn là chuỗi trống hoặc null, tôi gặp lỗi UNKNOWN với "Giá trị không nằm trong phạm vi dự kiến". như thông báo lỗi.

Cập nhật (02 tháng ba năm 2011)

Theo đề nghị của Alexei Levenkov, tôi sử dụng Fiddler để xem những gì đang xảy ra và thấy điều này:

# 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   

Nó trông giống như một cái bắt tay đơn giản đi cho đến khi nó nhận được HTTP 200 cho cả WSDL và cuộc gọi dịch vụ web. Vì vậy, tôi đã cố gắng không đặt tên người dùng và mật khẩu của tôi trong RequestContext và tôi nhận được một điều tương tự như tôi làm ở trên cho yêu cầu WSDL (hai HTTP 401 và một HTTP 200), nhưng cuộc gọi WebService chỉ có một HTTP 200. Nếu nó không còn sử dụng tên người dùng/mật khẩu của tôi, sau đó nó về mặt lý thuyết sẽ không xác thực.

+2

+1 cho thông báo lỗi :) –

Trả lời

4

URL đích phải chứa đường dẫn đầy đủ đến tệp. Tôi xem mẫu trên trang mô tả phương pháp - http://msdn.microsoft.com/en-us/library/copy.copy.copyintoitems.aspx.

+0

Khi tôi sử dụng đường dẫn đầy đủ cho cả nguồn và destnation (tức là bao gồm phần http: //) tôi nhận được "Tham chiếu đối tượng không được đặt thành một thể hiện của đối tượng." dưới dạng thông báo lỗi. Khi tôi sử dụng đường dẫn đầy đủ cho chỉ đích đến và để nguyên nguồn dưới dạng chuỗi rỗng, tôi nhận được "Giá trị không nằm trong phạm vi dự kiến". –

+2

Làm việc cho tôi (C# ... nhưng miễn là bạn quản lý để gọi WS nó không quan trọng bạn sử dụng ngôn ngữ nào) với: fileName cho nguồn, Url tuyệt đối (với phần tệp) cho đích, thu thập trường trống. Cố gắng thu thập dấu vết Fiddler (hoặc trình theo dõi HTTP khác) và xem có điều gì đáng ngờ không. Bạn cũng có thể xem dấu vết trong khi sử dụng chức năng Sao chép của SharePoint để so sánh với của bạn. –

+0

Về cơ bản, cài đặt Java của tôi đã được gửi trong tên người dùng/mật khẩu của máy tính của tôi thay vì cài đặt tôi đã đặt. Tôi không biết làm thế nào để buộc nó để gửi tên người dùng/mật khẩu tôi muốn. Xin lỗi vì sự chậm trễ trong việc chấp nhận câu trả lời. –

2

Sự cố của bạn có thể là các trường.

DisplayName và InternalName muốn trở thành "Tiêu đề", và giá trị được HelloWorld.txt

Ngoài ra, để lại ID rỗng, SharePoint sẽ cư đó.

+0

Tôi đã thử điều đó, nhưng không có may mắn. Có thể URL nguồn và URL đích không có http: // hoặc https: // trước chúng không? –

+0

Có thể. Nếu bạn đang tải lên một tệp từ một nơi nào đó không phải là SharePoint, tôi nghĩ URL nguồn có thể là rỗng hoặc ít nhất là một chuỗi rỗng. –

0

Kiểm tra nhật ký SharePoint trong C: \ Program Files \ Common Files \ Microsoft Shared \ máy chủ web mở rộng \ 12 \ LOGS. Có thể thiếu phần tên miền trong tên người dùng đang gây ra sự cố?

+0

Tôi đoán tôi không thể tránh các quản trị viên dùng thêm nữa. Tôi đã thông báo rằng "Auth" được báo cáo bởi Fiddler đã báo cáo người dùng và miền tôi đăng nhập vào máy phát triển của mình, chứ không phải tên người dùng tôi dùng cho Sharepoint, điều này có vẻ lạ vì tôi sử dụng thông tin xác thực Sharepoint trong mã Java của mình. –

Các vấn đề liên quan