Estoy intentando guardar un archivo en un servidor Sharepoint usando JAX-WS. La llamada al servicio web está informando de un éxito, pero el archivo no aparece.Guardar archivo en SharePoint Server usando JAX-WS
que utiliza este comando (de una WinXP) para generar el código de Java para realizar la llamada JAX-WS:
wsimport -keep -extension -Xnocompile http://hostname/sites/teamname/_vti_bin/Copy.asmx?WSDL
consigo una manija en el servicio web que he llamado port
utilizando la siguiente: 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!");
}
me llamaron al servicio web utilizando la siguiente:
port.copyIntoItems(sourceUrl, destUrlCollection, fields ,
"Contents of the file".getBytes(),
copyIntoItemsResult, copyResultCollection)
El sourceUrl
y la única dirección URL en destUrlCollection
es igual a "nombre de host/sitios/teamname/Tech Docs/Sub carpeta".
El objeto FieldInformationCollection
llamado fields
contiene solo un FieldInformation
. El objeto FieldInformation
tiene "HelloWorld.txt" como el valor de displayName, internalName y valor. La propiedad type se establece en FieldType.FILE
. La propiedad id está configurada en (java.util.UUID.randomUUID()).toString()
.
La llamada a copyIntoItems
vuelve con éxito; copyIntoItemsResult
contiene un valor de 0 y el único CopyResult
objeto establecido en copyResultCollection
tiene un código de error de "SUCCESS" con un mensaje de error nulo.
Cuando miro en la biblioteca "Tech Docs" en Sharepoint, en la "Sub Carpeta" no hay ningún archivo allí.
¿Por qué no me dice lo que hice mal? ¿Perdí un paso?
actualización (26ª Feb, 2011)
he cambiado propiedades displayName y internalName mi FieldInformation del objeto que se va "Título" como se sugiere. Todavía no hay alegría, pero es un paso en la dirección correcta.
Después de jugar un poco con las direcciones URL de un poco, tengo estos resultados:
Tanto con el sourceUrl y la única equivalente a la URL de destino, sin protocolo, me da la respuesta de éxito, pero no hay ningún documento real aparece en la biblioteca de documentos.
Con las dos URLs equivalentes pero con un protocolo "http: //" especificado, recibo un error DESCONOCIDO con "Referencia de objeto no establecida en una instancia de un objeto". como el mensaje.
Con la URL fuente una cadena vacía o null
, aparece un error DESCONOCIDO con "El valor no está dentro del rango esperado". como el mensaje de error.
actualización (2ª marzo de 2011)
Según lo sugerido por Alexei Levenkov, que utiliza Fiddler para ver lo que estaba pasando y se encontró lo siguiente:
# 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
Parece que un simple apretón de manos va hasta obtener el HTTP 200 para el WSDL y la llamada al servicio web.
Así que traté de no poner mi nombre de usuario y contraseña en RequestContext y recibo una cosa similar a la anterior para la solicitud WSDL (dos HTTP 401 y un HTTP 200), pero la llamada WebService solo tiene un HTTP 200. Si ya no usa mi nombre de usuario/contraseña, teóricamente debería fallar la autenticación.
+1 para el mensaje de error :) –