2011-02-25 16 views
10

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.

+2

+1 za komunikat o błędzie :) –

Odpowiedz

4

Adresy URL stron docelowych powinny zawierać pełne ścieżki do plików. Sprawdzam próbkę na stronie opisu metody - http://msdn.microsoft.com/en-us/library/copy.copy.copyintoitems.aspx.

+0

Gdy używam pełnych ścieżek dla źródła i destnacji (tj. Obejmują część http: //), otrzymuję "Odwołanie do obiektu nie jest ustawione na instancję obiektu". jako komunikat o błędzie. Kiedy używam pełnej ścieżki tylko dla miejsca docelowego i zostawiam źródło jako pusty ciąg, otrzymuję "Wartość nie mieści się w oczekiwanym zakresie." –

+2

Pracowałem dla mnie (C# ... ale tak długo jak zdołasz wywoływać WS, nie powinno to mieć znaczenia, jakiego języka używasz) z: fileName dla źródła, absolutnego Url (z częścią pliku) dla miejsca docelowego, puste pole kolekcji. Spróbuj zebrać Fiddler (lub inny obserwator HTTP) i sprawdź, czy jest coś podejrzanego. Możesz również zobaczyć śledzenie podczas korzystania z funkcji Kopiuj w SharePoint do porównania z twoją. –

+0

Zasadniczo moja instalacja w języku Java wysyłała nazwę użytkownika/hasło mojego komputera zamiast tego, który ustawiłem. Nie wiem, jak zmusić go do wysłania żądanej nazwy użytkownika/hasła. Przepraszamy za opóźnienie w zaakceptowaniu odpowiedzi. –

2

Twoim problemem są prawdopodobnie te pola.

NazwaWyświetlana i InternalName chcą być „Tytuł”, a wartość być HelloWorld.txt

również zostawić identyfikator pusty, SharePoint, które będą wypełniać.

+0

Próbowałem, ale bez powodzenia. Czy to możliwe, że źródłowy i docelowy adres URL nie ma przed sobą http: // lub https: //? –

+0

Być może. Jeśli przesyłasz plik z miejsca, które nie jest punktem udostępniania, myślę, że źródłowy adres URL może być pusty lub przynajmniej pusty. –

0

Sprawdź dzienniki SharePoint w C: \ Program Files \ Pliki wspólne \ Microsoft Shared \ rozszerzenia serwera WWW \ 12 \ LOGS. Może brakująca część domeny w nazwie użytkownika powoduje problemy?

+0

Chyba nie mogę już uniknąć administratorów sharepoint. Zauważyłem, że "Auth" zgłoszone przez Fiddler zgłosiło użytkownika i domenę, do której loguję się na mojej maszynie programistycznej, a nie nazwę użytkownika, której używam dla Sharepoint, co wydaje się dziwne, ponieważ używam swoich danych uwierzytelniających SharePoint w moim kodzie Java. –

Powiązane problemy