Saltar al contenido

¿Cómo subo un documento a SharePoint con Java?

Solución:

Además de las sugerencias de Sacha, puede utilizar los servicios web SOAP de SharePoint. Cada sitio de SharePoint expone un montón de servicios web a través de la ruta http://<Site>/_vti_bin/.

En su caso, probablemente desee el servicio web Lists (http://<Site>/_vti_bin/Lists.asmx). Puede obtener el WSDL de http://<Site>/_vti_bin/Lists.asmx?WSDL. El SDK de WSS 3.0 tiene detalles sobre cómo usar el servicio web (probablemente querrá usar el UpdateListItems y AddAttachment métodos).

Dicho todo esto, la primera opción de Sacha (mapear una biblioteca de documentos a una unidad) es probablemente la forma más fácil asumiendo que puede evitar los problemas de NTLM.

Si está utilizando Windows, simplemente puede navegar a una ruta UNC para una biblioteca de documentos. Por ejemplo, si la URL del navegador de su biblioteca de documentos es:

http://<Site>/Foo/BarDocs/Forms/AllItems.aspx

simplemente puede escribir la ruta UNC correspondiente en la barra de direcciones del Explorador de Windows:

\<Site>FooBarDocs

y luego arrastre y suelte los archivos en esta ubicación. Si lo desea, puede asignar esta ubicación a una letra de unidad utilizando el Explorador de Windows o la utilidad de línea de comandos SUBST.EXE.

De acuerdo … después de varias horas de trabajo y mordiéndome a través de la “documentación” que proporciona MicroSoft y todas las sugerencias distribuidas aleatoriamente en la red, logré escribir un código de muestra para explorar el contenido de un servidor de SharePoint: Navegando por SharePoint Carpetas con Axis2.

Siguiente parada: subiendo algo.

Otra solución es usar Método HTTP PUT para enviar un archivo directamente al Sharepoint.

Para eso puedes usar Cliente HTTP Apache:

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.2.3</version>
</dependency>

Y para permitir la autenticación NTLMv2, necesita JCIF Biblioteca.

<dependency>
   <groupId>jcifs</groupId>
   <artifactId>jcifs</artifactId>
   <version>1.3.17</version>
</dependency>

Primero necesitamos escribir un contenedor para permitir que Apache HTTP Client use JCIF para soporte NTLMv2:

public final class JCIFSEngine implements NTLMEngine {

    private static final int TYPE_1_FLAGS =
            NtlmFlags.NTLMSSP_NEGOTIATE_56
            | NtlmFlags.NTLMSSP_NEGOTIATE_128
            | NtlmFlags.NTLMSSP_NEGOTIATE_NTLM2
            | NtlmFlags.NTLMSSP_NEGOTIATE_ALWAYS_SIGN
            | NtlmFlags.NTLMSSP_REQUEST_TARGET;

    @Override
    public String generateType1Msg(final String domain, final String workstation)
            throws NTLMEngineException {
        final Type1Message type1Message = new Type1Message(TYPE_1_FLAGS, domain, workstation);
        return Base64.encode(type1Message.toByteArray());
    }

    @Override
    public String generateType3Msg(final String username, final String password,
            final String domain, final String workstation, final String challenge)
            throws NTLMEngineException {
        Type2Message type2Message;
        try {
            type2Message = new Type2Message(Base64.decode(challenge));
        } catch (final IOException exception) {
            throw new NTLMEngineException("Invalid NTLM type 2 message", exception);
        }
        final int type2Flags = type2Message.getFlags();
        final int type3Flags = type2Flags
                & (0xffffffff ^ (NtlmFlags.NTLMSSP_TARGET_TYPE_DOMAIN | NtlmFlags.NTLMSSP_TARGET_TYPE_SERVER));
        final Type3Message type3Message = new Type3Message(type2Message, password, domain,
                username, workstation, type3Flags);
        return Base64.encode(type3Message.toByteArray());
    }
}

Referencia

El código principal para ejecutar HTTP PUT con autenticación:

    try {

        HttpParams params = new BasicHttpParams();
        HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
        DefaultHttpClient httpclient = new DefaultHttpClient(params);

        //Register JCIF NTLMv2 to manage ntlm auth.
        httpclient.getAuthSchemes().register("ntlm", new AuthSchemeFactory() {
            @Override
            public AuthScheme newInstance(HttpParams hp) {
                return new NTLMScheme(new JCIFSEngine());
            }
        });

        //Provide login/password
        httpclient.getCredentialsProvider().setCredentials(
                AuthScope.ANY,
                new NTCredentials([LOGIN], [PASSWORD], "", [DOMAIN]));
        //Create HTTP PUT Request       
        HttpPut request = new HttpPut("http://[server]/[site]/[folder]/[fileName]");
        request.setEntity(new FileEntity([File]));            

        return httpclient.execute(request);

    } catch (IOException ex) {
      //...
    }
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *