Download files from sharepoint with Java

13,891

Finally I am able to access those files with Python, please check out my answer here

Share:
13,891

Related videos on Youtube

Robert
Author by

Robert

A student

Updated on June 06, 2022

Comments

  • Robert
    Robert almost 2 years

    I am new to Sharepoint and I am trying to write a java program to process csv files which are stored in sharepoint document library. I learned that there is a new REST API for sharepoint but it seems that it needs an authentication with app registration, but I don't have admin permission on that sharepoint site so I cannot use the REST API (?). Therefore I choose to use soap.

    The url for that document library page is like:

    http://sharepoint/sites/pitpublishing/sales/Management_Distribution/Forms/AllItems.aspx?RootFolder=%2Fsites%2Fpitpublishing%2Fsales%2FManagement_Distribution%2FClar_Data&FolderCTID=0x012000C12183D9A264144BBD3D315xxxxxxx&View={F7D1xxx-62FD-428B-80EE-C44xxxxxx} 
    

    I am so confused about sharepoint consuming with soap. I have downloaded the wsdl files from

    http://sharepoint/sites/pitpublishing/sales/_vti_bin/copy.asmx?WSDL
    

    and created the stubs for them. I think there should be a method like getDocumentLibrary(), which directory manipulates the document library, but I only find something relates to List, Copy and View, and many relates to List. I don't know what parameters I should provide them, I have tried

    http://sharepoint/sites/pitpublishing/sales/Management_Distribution
    

    but always get error at getListItems():

    SEVERE: Exception. See stacktrace.javax.xml.ws.soap.SOAPFaultException: Exception of type 'Microsoft.SharePoint.SoapServer.SoapServerException' was thrown.
    

    If I set the List name with a list under the same site, getListItems() will return null.

    Is there anyone who can help me out? Thank you very much!

    EDIT:

    The code that I was using is actually a tutorial code from this blog .

    public static void main(String[] args) {
    //      if(args.length != 3) {
    //          logger.log(Level.SEVERE, "This must be called with parameters: <userId> <password> <config file path>");
    //          return;
    //      }
    
        try {
            String userId = args[0];
            String password = args[1];
            WatcherConfig config = WatcherConfig.loadConfig("C:\\Desktop\\sharepoint\\watcherConfig.xml");//; //args[2];args[2]);
            Authenticator.setDefault(new FnmAuthenticator(userId, password));
    
            Lists stub1 = new Lists(config.getListsWsdlUrl());
            ListsSoap listService = stub1.getListsSoap();
            List<SPDocument> docs = getDocuments(listService, config.getListName(), null, "100");
    
            Copy stub2 = new Copy(config.getCopyWsdlUrl());
            CopySoap copyService = stub2.getCopySoap();     
    
            //process document
            for(SPDocument doc: docs) {
                //make sure we download all attachments first
                if(!doc.isEmail())
                    processDocument(listService, copyService, config, doc);
            }
    
            for(SPDocument doc: docs) {
                //after we download all attachments, we process the emails.
                if(doc.isEmail())
                    processDocument(listService, copyService, config, doc);
            }
        } catch (Exception e) {
            System.out.println(e);
            System.exit(1);
        }
    }
    

    and a part of getDocuments() is here:

    public static List<SPDocument> getDocuments(ListsSoap port, String listName,
            ArrayList<String> listColumnNames, String rowLimit) {
    
        List<SPDocument> docs = new ArrayList<SPDocument>();
    
        if (port != null && listName != null 
                && rowLimit != null) {
    
            try {
                // Here are additional parameters that may be set
                String viewName = "{534xxxx-4D8B-4B1D-91E3-D2ECB6xxxxx}";
                GetListItems.ViewFields viewFields = null;
                GetListItems.Query query = null;
                GetListItems.QueryOptions queryOptions = null;
                String webID = "";
    
                // Calling the List Web Service
                GetListItemsResponse.GetListItemsResult result = port
                        .getListItems(listName, viewName, query, viewFields,
                                rowLimit, queryOptions, webID);
    
                Object listResult = result.getContent().get(0);
                ......
    

    Watcherconfig.xml:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ns2:watcherConfig xmlns:ns2="com.fanniemae.integration.sharepoint.clients">
    <dispatcherList>
        <dispatcherConfig matchingPattern="*" invokingCommand="D:\java\jdk15\bin\java.exe"/>
    </dispatcherList>
    <spDocumentArchiveUrl>http://sharepoint/sites/pitpublishing/sales/Management_Distribution/Clari_Data</spDocumentArchiveUrl>
    <spDocumentInUrl>http://sharepoint/sites/pitpublishing/sales/Management_Distribution/Clari_Data</spDocumentInUrl>
    <documentWorkingDir>C:\Desktop\sharepoint</documentWorkingDir>
    
    <listsWsdlPath>C:\Desktop\sharepoint\Lists.wsdl</listsWsdlPath>
    <copyWsdlPath>C:\Desktop\sharepoint\Copy.wsdl</copyWsdlPath>
    <viewsWsdlPath>C:\Desktop\sharepoint\Views.wsdl</viewsWsdlPath>
    
    <rowLimit>100000</rowLimit>