2011-02-25 7 views
10

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.

+2

+1 para el mensaje de error :) –

Respuesta

4

Las URL de destino deben contener rutas de acceso completas a los archivos. Miro la muestra en la página de descripción del método - http://msdn.microsoft.com/en-us/library/copy.copy.copyintoitems.aspx.

+0

Cuando uso rutas completas tanto para el origen como para el destino (es decir, incluyo http: // parte) obtengo "Referencia de objeto no establecida en una instancia de un objeto". como un mensaje de error Cuando uso la ruta completa solo para el destino y dejo la fuente como una cadena vacía, obtengo "El valor no está dentro del rango esperado". –

+2

Funcionó para mí (C# ... pero siempre que consigas llamar a WS, no debería importar el idioma que uses) con: fileName para fuente, Url absoluto (con parte de archivo) para el destino, colección de campo vacía. Intenta recolectar Fiddler (u otro monitor de HTTP) para ver si hay algo sospechoso. También puede ver el rastro al usar la funcionalidad Copiar a de SharePoint para compararla con la suya. –

+0

Básicamente, mi instalación de Java enviaba el nombre de usuario/contraseña de mi máquina en lugar del que estaba configurando. No sé cómo forzarlo a enviar el nombre de usuario/contraseña que deseo. Perdón por el retraso en aceptar la respuesta. –

2

Probablemente su problema se deba a los campos.

DisplayName y InternalName quieren ser "Título", y el valor se HelloWorld.txt

Además, identificación de la licencia vacío, SharePoint manejar en ese.

+0

Lo intenté, pero no tuve suerte. ¿Podría ser que las URL de origen y de destino no tengan un http: // o https: // delante de ellos? –

+0

Quizás. Si está cargando un archivo de un sitio que no es sharepoint, creo que la URL de origen puede ser nula o, al menos, una cadena vacía. –

0

Compruebe los registros de SharePoint en C: \ Archivos de programa \ Archivos comunes \ Microsoft Shared \ web server extensions \ 12 \ LOGS. Tal vez la parte de dominio faltante en el nombre de usuario está causando problemas?

+0

Supongo que ya no puedo evitar a los administradores de sharepoint. Me di cuenta de que la "Auth" informada por Fiddler informaba el usuario y el dominio con el que inicio sesión en mi máquina de desarrollo, no el nombre de usuario que uso para Sharepoint, que parece extraño ya que utilizo mis credenciales Sharepoint en mi código Java. –

Cuestiones relacionadas