使用 Java 从共享点下载文件

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/30228542/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-11-02 16:43:01  来源:igfitidea点击:

Download files from sharepoint with Java

javasharepointsoapsharepoint-2010sharepoint-2013

提问by Robert

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.

我是 Sharepoint 的新手,我正在尝试编写一个 java 程序来处理存储在 sharepoint 文档库中的 csv 文件。我了解到有一个用于 sharepoint 的新 REST API,但它似乎需要通过应用程序注册进行身份验证,但我在该 sharepoint 站点上没有管理员权限,因此我无法使用 REST API (?)。因此我选择使用肥皂。

The url for that document library page is like:

该文档库页面的 url 如下所示:

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

我对用肥皂消费共享点感到非常困惑。我已经下载了 wsdl 文件

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

并为他们创建存根。我觉得应该有getDocumentLibrary()这样的方法,那个目录操作文档库,但是我只找到了一些和List、Copy和View有关的,很多都和List有关。我不知道我应该提供什么参数,我试过了

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

but always get error at getListItems():

但总是在 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.

如果我使用同一站点下的列表设置列表名称,则 getListItems() 将返回 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:

和 getDocuments() 的一部分在这里:

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:

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>

采纳答案by Robert

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

最后我可以使用 Python 访问这些文件,请在此处查看我的答案