Sto tentando di salvare un file su un server Sharepoint utilizzando JAX-WS. La chiamata al servizio web segnala un successo, ma il file non viene visualizzato.Salva file su Sharepoint Server utilizzando JAX-WS
Ho usato questo comando (da un WinXP) per generare il codice Java per effettuare la chiamata JAX-WS:
wsimport -keep -extension -Xnocompile http://hostname/sites/teamname/_vti_bin/Copy.asmx?WSDL
ricevo una maniglia sul servizio web che ho chiamato port
utilizzando la seguente: 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!");
}
Ho chiamato il servizio Web utilizzando il seguente:
port.copyIntoItems(sourceUrl, destUrlCollection, fields ,
"Contents of the file".getBytes(),
copyIntoItemsResult, copyResultCollection)
Il sourceUrl
e l'unico url destUrlCollection
è uguale a "hostname/siti/Teamname/Tech Docs/sottocartella".
L'oggetto FieldInformationCollection
fields
contiene solo uno FieldInformation
. L'oggetto FieldInformation
ha "HelloWorld.txt" come valore per displayName, internalName e valore. La proprietà type è impostata su FieldType.FILE
. La proprietà id è impostata su (java.util.UUID.randomUUID()).toString()
.
La chiamata a copyIntoItems
restituisce correttamente; copyIntoItemsResult
contiene un valore 0 e l'unico oggetto impostato su copyResultCollection
ha un codice di errore "SUCCESSO" con un messaggio di errore nullo.
Quando analizzo la libreria "Tech Docs" su Sharepoint, nella "Cartella secondaria" non è presente alcun file.
Perché non dovrebbe dirmi cosa ho sbagliato? Ho appena perso un passaggio?
aggiornamento (Feb 26, 2011)
ho cambiato proprietà displayName e InternalName del mio oggetto FieldInformation di essere "Titolo" come suggerito. Ancora nessuna gioia, ma un passo nella giusta direzione.
Dopo aver suonato in giro con gli URL per un po ', ho ottenuto questi risultati:
Con sia il SourceURL e l'unico equivalente URL di destinazione, senza protocollo, ottengo la risposta successo, ma nessun documento attuale appare nella biblioteca di documenti.
Con entrambi gli URL equivalenti ma con un protocollo "http: //" specificato, viene visualizzato un errore SCONOSCIUTO con "Riferimento oggetto non impostato su un'istanza di un oggetto". come il messaggio.
Con l'URL di origine una stringa vuota o null
, viene visualizzato un errore SCONOSCIUTO con "Il valore non rientra nell'intervallo previsto." come il messaggio di errore.
Update (2 Marzo 2011)
Come suggerito da Alexei Levenkov, ho usato Fiddler per vedere che cosa stava succedendo e ho trovato questo:
# 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
Sembra una semplice stretta di mano in corso acceso fino a quando non ottiene l'HTTP 200 sia per il WSDL che per la chiamata al servizio web.
Così ho provato a non mettere il mio nome utente e password nel RequestContext e ottengo una cosa simile come faccio sopra per la richiesta WSDL (due HTTP 401 e una HTTP 200), ma la chiamata WebService ha solo un HTTP 200. Se non utilizza più il mio nome utente/password, dovrebbe teoricamente fallire l'autenticazione.
+1 per il messaggio di errore :) –