Próbuję zapisać plik na serwerze SharePoint za pomocą JAX-WS. Usługa sieciowa zgłasza sukces, ale plik się nie wyświetla.Zapisz plik na serwerze Sharepoint za pomocą JAX-WS
użyłem tego polecenia (ze WinXP) do generowania kodu Java, aby zainicjować połączenie JAX-WS:
wsimport -keep -extension -Xnocompile http://hostname/sites/teamname/_vti_bin/Copy.asmx?WSDL
otrzymuję uchwyt na usługi WWW, które nazwałem port
przy użyciu następujących: 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!");
}
Zadzwoniłem do serwisu internetowego przy użyciu następujących:
port.copyIntoItems(sourceUrl, destUrlCollection, fields ,
"Contents of the file".getBytes(),
copyIntoItemsResult, copyResultCollection)
sourceUrl
a jedynym url w destUrlCollection
równa się "nazwa hosta/sites/teamname Tech/Dokumenty/sub Folder".
Obiekt o nazwie FieldInformationCollection
o nazwie fields
zawiera tylko jeden obiekt FieldInformation
. Obiekt FieldInformation
ma "HelloWorld.txt" jako wartość dla displayName, internalName i value. Właściwość type jest ustawiona na FieldType.FILE
. Właściwość id jest ustawiona na (java.util.UUID.randomUUID()).toString()
.
Połączenie z numerem copyIntoItems
powiodło się; copyIntoItemsResult
zawiera wartość 0, a jedyny obiekt CopyResult
o numerze w kodzie copyResultCollection
zawiera kod błędu "SUCCESS" z komunikatem o błędzie pustym.
Kiedy zajrzałem do biblioteki "Tech Docs" na SharePoint, w "Folderze podrzędnym" nie ma tam pliku.
Dlaczego nie powiedziałaby mi, co zrobiłem źle? Czy po prostu tęsknię za krokiem?
Update (26 lutego 2011)
Zmieniłem displayname i InternalName właściwości mojego FieldInformation obiektu jako "Tytuł", jak sugeruje. Wciąż nie ma radości, ale krok we właściwym kierunku.
Po zabawy z adresów URL na trochę, mam te wyniki:
Z obu sourceUrl i jedyny odpowiednik docelowego adresu URL, bez protokołu, otrzymuję odpowiedź sukcesu, ale nie rzeczywiste dokument pojawia się w biblioteka dokumentów.
Przy obu adresach równoważnych, ale z określonym protokołem "http: //", pojawia się NIEZNANY błąd z "Odwołanie do obiektu nie jest ustawione na wystąpienie obiektu". jako wiadomość.
Przy źródłowym adresie URL, pustym ciągu lub null
, pojawia się NIEZNANY błąd z wartością "Wartość nie mieści się w oczekiwanym zakresie." jako komunikat o błędzie.
Update (2 marca 2011)
Jak sugeruje Aleksiej Levenkov użyłem Skrzypek, aby zobaczyć, co się dzieje i stwierdziliśmy:
# 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
Wygląda jak zwykły uścisk dłoni dzieje on, aż otrzyma HTTP 200 zarówno dla WSDL, jak i dla usługi sieciowej.
Próbowałem więc nie umieszczać mojej nazwy użytkownika i hasła w RequestContext i otrzymuję coś podobnego do powyższego dla żądania WSDL (dwa HTTP 401 i jeden HTTP 200), ale połączenie WebService ma tylko jeden HTTP 200. Jeśli nie będzie już używać mojej nazwy użytkownika/hasła, to teoretycznie nie będzie uwierzytelniania.
+1 za komunikat o błędzie :) –