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.
+1 cho thông báo lỗi :) –