Example usage for org.w3c.dom Element normalize

List of usage examples for org.w3c.dom Element normalize

Introduction

In this page you can find the example usage for org.w3c.dom Element normalize.

Prototype

public void normalize();

Source Link

Document

Puts all Text nodes in the full depth of the sub-tree underneath this Node, including attribute nodes, into a "normal" form where only structure (e.g., elements, comments, processing instructions, CDATA sections, and entity references) separates Text nodes, i.e., there are neither adjacent Text nodes nor empty Text nodes.

Usage

From source file:org.apache.manifoldcf.crawler.connectors.sharepoint.SPSProxyHelper.java

/**
* Gets a list of field names of the given document library
* @param site//from   w ww  .j  a  va 2 s .  c om
* @param list/library name
* @return list of the fields
*/
public Map<String, String> getFieldList(String site, String listName)
        throws ManifoldCFException, ServiceInterruption {
    long currentTime;
    try {
        Map<String, String> result = new HashMap<String, String>();

        if (Logging.connectors.isDebugEnabled())
            Logging.connectors
                    .debug("SharePoint: In getFieldList; site='" + site + "', listName='" + listName + "'");

        // The docLibrary must be a GUID, because we don't have  title.

        if (site.compareTo("/") == 0)
            site = "";
        ListsWS listService = new ListsWS(baseUrl + site, userName, password, configuration, httpClient);
        ListsSoap listCall = listService.getListsSoapHandler();

        GetListResponseGetListResult listResponse = listCall.getList(listName);
        org.apache.axis.message.MessageElement[] List = listResponse.get_any();

        XMLDoc doc = new XMLDoc(List[0].toString());
        ArrayList nodeList = new ArrayList();

        doc.processPath(nodeList, "*", null);
        if (nodeList.size() != 1) {
            throw new ManifoldCFException(
                    "Bad xml - missing outer node - there are " + Integer.toString(nodeList.size()) + " nodes");
        }

        Object parent = nodeList.get(0);
        if (!doc.getNodeName(parent).equals("ns1:List"))
            throw new ManifoldCFException(
                    "Bad xml - outer node is '" + doc.getNodeName(parent) + "' not 'ns1:List'");

        nodeList.clear();
        doc.processPath(nodeList, "*", parent); // <ns1:Fields>

        for (Object metaField : nodeList) {
            if (doc.getNodeName(metaField).equals("ns1:Fields")) {
                ArrayList fieldsList = new ArrayList();
                doc.processPath(fieldsList, "*", metaField);

                for (Object o : fieldsList) {
                    String name = doc.getValue(o, "DisplayName");
                    String fieldName = doc.getValue(o, "Name");
                    String hidden = doc.getValue(o, "Hidden");
                    // System.out.println( "Hidden :" + hidden );
                    if (name.length() != 0 && fieldName.length() != 0 && (!hidden.equalsIgnoreCase("true"))) {
                        // make sure we don't include the same field more than once.
                        // This may happen if the Library has more than one view.
                        if (result.containsKey(fieldName) == false)
                            result.put(fieldName, name);
                    }
                }
            }
        }
        // System.out.println(result.size());
        return result;
    } catch (java.net.MalformedURLException e) {
        throw new ManifoldCFException("Bad SharePoint url: " + e.getMessage(), e);
    } catch (javax.xml.rpc.ServiceException e) {
        if (Logging.connectors.isDebugEnabled())
            Logging.connectors.debug("SharePoint: Got a service exception getting field list for site " + site
                    + " listName " + listName + " - retrying", e);
        currentTime = System.currentTimeMillis();
        throw new ServiceInterruption("Service exception: " + e.getMessage(), e, currentTime + 300000L,
                currentTime + 12 * 60 * 60000L, -1, true);
    } catch (org.apache.axis.AxisFault e) {
        if (e.getFaultCode().equals(new javax.xml.namespace.QName("http://xml.apache.org/axis/", "HTTP"))) {
            org.w3c.dom.Element elem = e.lookupFaultDetail(
                    new javax.xml.namespace.QName("http://xml.apache.org/axis/", "HttpErrorCode"));
            if (elem != null) {
                elem.normalize();
                String httpErrorCode = elem.getFirstChild().getNodeValue().trim();
                if (httpErrorCode.equals("404"))
                    return null;
                else if (httpErrorCode.equals("403"))
                    throw new ManifoldCFException("Remote procedure exception: " + e.getMessage(), e);
                else if (httpErrorCode.equals("401")) {
                    if (Logging.connectors.isDebugEnabled())
                        Logging.connectors.debug(
                                "SharePoint: Crawl user does not have sufficient privileges to get field list for site "
                                        + site + " listName " + listName + " - skipping",
                                e);
                    return null;
                }
                throw new ManifoldCFException("Unexpected http error code " + httpErrorCode
                        + " accessing SharePoint at " + baseUrl + site + ": " + e.getMessage(), e);
            }
            throw new ManifoldCFException("Unknown http error occurred: " + e.getMessage(), e);
        }

        if (e.getFaultCode().equals(new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/envelope/",
                "Server.userException"))) {
            String exceptionName = e.getFaultString();
            if (exceptionName.equals("java.lang.InterruptedException"))
                throw new ManifoldCFException("Interrupted", ManifoldCFException.INTERRUPTED);
        }

        // I don't know if this is what you get when the library is missing, but here's hoping.
        if (e.getMessage().indexOf("List does not exist") != -1)
            return null;

        if (Logging.connectors.isDebugEnabled())
            Logging.connectors.debug("SharePoint: Got a remote exception getting field list for site " + site
                    + " listName " + listName + " - retrying", e);
        currentTime = System.currentTimeMillis();
        throw new ServiceInterruption("Remote procedure exception: " + e.getMessage(), e, currentTime + 300000L,
                currentTime + 3 * 60 * 60000L, -1, false);
    } catch (java.rmi.RemoteException e) {
        throw new ManifoldCFException("Unexpected remote exception occurred: " + e.getMessage(), e);
    }
}

From source file:org.apache.manifoldcf.crawler.connectors.sharepoint.SPSProxyHelper.java

/**
*
* @param site//from  w  w  w  .  j  a  v  a 2  s . c  om
* @param docPath
* @return an XML document
* @throws ManifoldCFException
* @throws ServiceInterruption
*/
public XMLDoc getVersions(String site, String docPath) throws ServiceInterruption, ManifoldCFException {
    long currentTime;
    try {
        if (site.compareTo("/") == 0)
            site = ""; // root case
        VersionsWS versionsService = new VersionsWS(baseUrl + site, userName, password, configuration,
                httpClient);
        VersionsSoap versionsCall = versionsService.getVersionsSoapHandler();

        GetVersionsResponseGetVersionsResult versionsResp = versionsCall.getVersions(docPath);
        org.apache.axis.message.MessageElement[] lists = versionsResp.get_any();

        //System.out.println( lists[0].toString() );
        XMLDoc doc = new XMLDoc(lists[0].toString());
        ArrayList nodeList = new ArrayList();

        doc.processPath(nodeList, "*", null);

        if (nodeList.size() != 1) {
            throw new ManifoldCFException("Bad xml - missing outer 'results' node - there are "
                    + Integer.toString(nodeList.size()) + " nodes");
        }

        Object parent = nodeList.get(0);
        if (!doc.getNodeName(parent).equals("results"))
            throw new ManifoldCFException("Bad xml - outer node is not 'results'");

        return doc;
    } catch (java.net.MalformedURLException e) {
        throw new ManifoldCFException("Bad SharePoint url: " + e.getMessage(), e);
    } catch (javax.xml.rpc.ServiceException e) {
        if (Logging.connectors.isDebugEnabled())
            Logging.connectors.debug("SharePoint: Got a service exception getting versions for site " + site
                    + " docpath " + docPath + " - retrying", e);
        currentTime = System.currentTimeMillis();
        throw new ServiceInterruption("Service exception: " + e.getMessage(), e, currentTime + 300000L,
                currentTime + 12 * 60 * 60000L, -1, true);
    } catch (org.apache.axis.AxisFault e) {
        currentTime = System.currentTimeMillis();
        if (e.getFaultCode().equals(new javax.xml.namespace.QName("http://xml.apache.org/axis/", "HTTP"))) {
            org.w3c.dom.Element elem = e.lookupFaultDetail(
                    new javax.xml.namespace.QName("http://xml.apache.org/axis/", "HttpErrorCode"));
            if (elem != null) {
                elem.normalize();
                String httpErrorCode = elem.getFirstChild().getNodeValue().trim();
                if (httpErrorCode.equals("404")) {
                    // Page did not exist
                    if (Logging.connectors.isDebugEnabled())
                        Logging.connectors.debug("SharePoint: The page at " + baseUrl + site
                                + " did not exist; assuming library deleted");
                    return null;
                } else if (httpErrorCode.equals("401")) {
                    // User did not have permissions for this library to get the acls
                    if (Logging.connectors.isDebugEnabled())
                        Logging.connectors
                                .debug("SharePoint: The crawl user did not have access to get versions for "
                                        + baseUrl + site + "; skipping");
                    return null;
                } else if (httpErrorCode.equals("403"))
                    throw new ManifoldCFException(
                            "Http error " + httpErrorCode + " while reading from " + baseUrl + site
                                    + " - check IIS and SharePoint security settings! " + e.getMessage(),
                            e);
                else
                    throw new ManifoldCFException("Unexpected http error code " + httpErrorCode
                            + " accessing SharePoint at " + baseUrl + site + ": " + e.getMessage(), e);
            }
            throw new ManifoldCFException("Unknown http error occurred: " + e.getMessage(), e);
        } else if (e.getFaultCode()
                .equals(new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/envelope/", "Server"))) {
            org.w3c.dom.Element elem = e.lookupFaultDetail(new javax.xml.namespace.QName(
                    "http://schemas.microsoft.com/sharepoint/soap/", "errorcode"));
            if (elem != null) {
                elem.normalize();
                String sharepointErrorCode = elem.getFirstChild().getNodeValue().trim();
                if (sharepointErrorCode.equals("0x82000006")) {
                    // List did not exist
                    if (Logging.connectors.isDebugEnabled())
                        Logging.connectors.debug("SharePoint: The docpath " + docPath + " in site " + site
                                + " did not exist; assuming library deleted");
                    return null;
                } else {
                    if (Logging.connectors.isDebugEnabled()) {
                        org.w3c.dom.Element elem2 = e.lookupFaultDetail(new javax.xml.namespace.QName(
                                "http://schemas.microsoft.com/sharepoint/soap/", "errorstring"));
                        String errorString = "";
                        if (elem != null)
                            errorString = elem2.getFirstChild().getNodeValue().trim();

                        Logging.connectors.debug("SharePoint: Getting versions for the docpath " + docPath
                                + " in site " + site + " failed with unexpected SharePoint error code "
                                + sharepointErrorCode + ": " + errorString + " - Skipping", e);
                    }
                    return null;
                }
            }
            if (Logging.connectors.isDebugEnabled())
                Logging.connectors
                        .debug("SharePoint: Unknown SharePoint server error getting versions for site " + site
                                + " docpath " + docPath + " - axis fault = " + e.getFaultCode().getLocalPart()
                                + ", detail = " + e.getFaultString() + " - retrying", e);

            throw new ServiceInterruption("Unknown SharePoint server error: " + e.getMessage() + " - retrying",
                    e, currentTime + 300000L, currentTime + 3 * 60 * 60000L, -1, false);
        }

        if (e.getFaultCode().equals(new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/envelope/",
                "Server.userException"))) {
            String exceptionName = e.getFaultString();
            if (exceptionName.equals("java.lang.InterruptedException"))
                throw new ManifoldCFException("Interrupted", ManifoldCFException.INTERRUPTED);
        }

        if (Logging.connectors.isDebugEnabled())
            Logging.connectors.debug("SharePoint: Got an unknown remote exception getting versions for site "
                    + site + " docpath " + docPath + " - axis fault = " + e.getFaultCode().getLocalPart()
                    + ", detail = " + e.getFaultString() + " - retrying", e);
        throw new ServiceInterruption("Remote procedure exception: " + e.getMessage(), e, currentTime + 300000L,
                currentTime + 3 * 60 * 60000L, -1, false);
    } catch (java.rmi.RemoteException e) {
        // We expect the axis exception to be thrown, not this generic one!
        // So, fail hard if we see it.
        if (Logging.connectors.isDebugEnabled())
            Logging.connectors.debug("SharePoint: Got an unexpected remote exception getting versions for site "
                    + site + " docpath " + docPath, e);
        throw new ManifoldCFException("Unexpected remote procedure exception: " + e.getMessage(), e);
    }
}

From source file:org.apache.manifoldcf.crawler.connectors.sharepoint.SPSProxyHelper.java

/**
* Gets a list of document libraries given a parent site
* @param parentSite the site to search for document libraries, empty string for root
* @return lists of NameValue objects, representing document libraries
*///from   www  .java 2  s  .  c  o m
public List<NameValue> getDocumentLibraries(String parentSite, String parentSiteDecoded)
        throws ManifoldCFException, ServiceInterruption {
    long currentTime;
    try {
        ArrayList<NameValue> result = new ArrayList<NameValue>();

        String parentSiteRequest = parentSite;

        if (parentSiteRequest.equals("/")) {
            parentSiteRequest = ""; // root case
            parentSiteDecoded = "";
        }

        ListsWS listsService = new ListsWS(baseUrl + parentSiteRequest, userName, password, configuration,
                httpClient);
        ListsSoap listsCall = listsService.getListsSoapHandler();

        GetListCollectionResponseGetListCollectionResult listResp = listsCall.getListCollection();
        org.apache.axis.message.MessageElement[] lists = listResp.get_any();

        //if ( parentSite.compareTo("/Sample2") == 0) System.out.println( lists[0].toString() );

        XMLDoc doc = new XMLDoc(lists[0].toString());
        ArrayList nodeList = new ArrayList();

        doc.processPath(nodeList, "*", null);
        if (nodeList.size() != 1) {
            throw new ManifoldCFException("Bad xml - missing outer 'ns1:Lists' node - there are "
                    + Integer.toString(nodeList.size()) + " nodes");
        }
        Object parent = nodeList.get(0);
        if (!doc.getNodeName(parent).equals("ns1:Lists"))
            throw new ManifoldCFException("Bad xml - outer node is not 'ns1:Lists'");

        nodeList.clear();
        doc.processPath(nodeList, "*", parent); // <ns1:Lists>

        String prefixPath = decodedServerLocation + parentSiteDecoded + "/";

        int i = 0;
        while (i < nodeList.size()) {
            Object o = nodeList.get(i++);

            String baseType = doc.getValue(o, "BaseType");
            if (baseType.equals("1")) {
                // We think it's a library

                // This is how we display it, so this has the right path extension
                String urlPath = doc.getValue(o, "DefaultViewUrl");
                // This is the pretty name
                String title = doc.getValue(o, "Title");

                // Leave this in for the moment
                if (Logging.connectors.isDebugEnabled())
                    Logging.connectors.debug("SharePoint: Library list: '" + urlPath + "', '" + title + "'");

                // It's a library.  If it has no view url, we don't have any idea what to do with it
                if (urlPath != null && urlPath.length() > 0) {
                    // Normalize conditionally
                    if (!urlPath.startsWith("/"))
                        urlPath = prefixPath + urlPath;
                    // Get rid of what we don't want, unconditionally
                    if (urlPath.startsWith(prefixPath)) {
                        urlPath = urlPath.substring(prefixPath.length());
                        // We're at the library name.  Figure out where the end of it is.
                        int index = urlPath.indexOf("/");
                        if (index == -1)
                            throw new ManifoldCFException(
                                    "Bad library view url without site: '" + urlPath + "'");
                        String pathpart = urlPath.substring(0, index);

                        if (pathpart.length() != 0 && !pathpart.equals("_catalogs")) {
                            if (title == null || title.length() == 0)
                                title = pathpart;
                            result.add(new NameValue(pathpart, title));
                        }
                    } else {
                        Logging.connectors.warn("SharePoint: Library view url is not in the expected form: '"
                                + urlPath + "'; expected something beginning with '" + prefixPath
                                + "'; skipping");
                    }
                }
            }
        }

        return result;
    } catch (java.net.MalformedURLException e) {
        throw new ManifoldCFException("Bad SharePoint url: " + e.getMessage(), e);
    } catch (javax.xml.rpc.ServiceException e) {
        if (Logging.connectors.isDebugEnabled())
            Logging.connectors.debug("SharePoint: Got a service exception getting document libraries for site "
                    + parentSite + " - retrying", e);
        currentTime = System.currentTimeMillis();
        throw new ServiceInterruption("Service exception: " + e.getMessage(), e, currentTime + 300000L,
                currentTime + 12 * 60 * 60000L, -1, true);
    } catch (org.apache.axis.AxisFault e) {
        if (e.getFaultCode().equals(new javax.xml.namespace.QName("http://xml.apache.org/axis/", "HTTP"))) {
            org.w3c.dom.Element elem = e.lookupFaultDetail(
                    new javax.xml.namespace.QName("http://xml.apache.org/axis/", "HttpErrorCode"));
            if (elem != null) {
                elem.normalize();
                String httpErrorCode = elem.getFirstChild().getNodeValue().trim();
                if (httpErrorCode.equals("404"))
                    return null;
                else if (httpErrorCode.equals("403"))
                    throw new ManifoldCFException("Remote procedure exception: " + e.getMessage(), e);
                else if (httpErrorCode.equals("401")) {
                    if (Logging.connectors.isDebugEnabled())
                        Logging.connectors.debug(
                                "SharePoint: Crawl user does not have sufficient privileges to read document libraries for site "
                                        + parentSite + " - skipping",
                                e);
                    return null;
                }
                throw new ManifoldCFException("Unexpected http error code " + httpErrorCode
                        + " accessing SharePoint at " + baseUrl + parentSite + ": " + e.getMessage(), e);
            }
            throw new ManifoldCFException("Unknown http error occurred: " + e.getMessage(), e);
        }
        if (e.getFaultCode().equals(new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/envelope/",
                "Server.userException"))) {
            String exceptionName = e.getFaultString();
            if (exceptionName.equals("java.lang.InterruptedException"))
                throw new ManifoldCFException("Interrupted", ManifoldCFException.INTERRUPTED);
        }
        if (Logging.connectors.isDebugEnabled())
            Logging.connectors.debug("SharePoint: Got a remote exception reading document libraries for site "
                    + parentSite + " - retrying", e);
        currentTime = System.currentTimeMillis();
        throw new ServiceInterruption("Remote procedure exception: " + e.getMessage(), e, currentTime + 300000L,
                currentTime + 3 * 60 * 60000L, -1, false);
    } catch (java.rmi.RemoteException e) {
        throw new ManifoldCFException("Unexpected remote exception occurred: " + e.getMessage(), e);
    }
}

From source file:org.apache.manifoldcf.crawler.connectors.sharepoint.SPSProxyHelper.java

/**
* Gets a list of lists given a parent site
* @param parentSite the site to search for lists, empty string for root
* @return lists of NameValue objects, representing lists
*///from ww  w  .  j  av a2 s  . co  m
public List<NameValue> getLists(String parentSite, String parentSiteDecoded)
        throws ManifoldCFException, ServiceInterruption {
    long currentTime;
    try {
        ArrayList<NameValue> result = new ArrayList<NameValue>();

        String parentSiteRequest = parentSite;

        if (parentSiteRequest.equals("/")) {
            parentSiteRequest = ""; // root case
            parentSiteDecoded = "";
        }

        ListsWS listsService = new ListsWS(baseUrl + parentSiteRequest, userName, password, configuration,
                httpClient);
        ListsSoap listsCall = listsService.getListsSoapHandler();

        GetListCollectionResponseGetListCollectionResult listResp = listsCall.getListCollection();
        org.apache.axis.message.MessageElement[] lists = listResp.get_any();

        //if ( parentSite.compareTo("/Sample2") == 0) System.out.println( lists[0].toString() );

        XMLDoc doc = new XMLDoc(lists[0].toString());
        ArrayList nodeList = new ArrayList();

        doc.processPath(nodeList, "*", null);
        if (nodeList.size() != 1) {
            throw new ManifoldCFException("Bad xml - missing outer 'ns1:Lists' node - there are "
                    + Integer.toString(nodeList.size()) + " nodes");
        }
        Object parent = nodeList.get(0);
        if (!doc.getNodeName(parent).equals("ns1:Lists"))
            throw new ManifoldCFException("Bad xml - outer node is not 'ns1:Lists'");

        nodeList.clear();
        doc.processPath(nodeList, "*", parent); // <ns1:Lists>

        String prefixPath = decodedServerLocation + parentSiteDecoded + "/";

        int i = 0;
        while (i < nodeList.size()) {
            Object o = nodeList.get(i++);

            String baseType = doc.getValue(o, "BaseType");
            if (baseType.equals("0")) {
                // We think it's a list

                // This is how we display it, so this has the right path extension
                String urlPath = doc.getValue(o, "DefaultViewUrl");
                // This is the pretty name
                String title = doc.getValue(o, "Title");

                // Leave this in for the moment
                if (Logging.connectors.isDebugEnabled())
                    Logging.connectors.debug("SharePoint: List: '" + urlPath + "', '" + title + "'");

                // If it has no view url, we don't have any idea what to do with it
                if (urlPath != null && urlPath.length() > 0) {
                    // Normalize conditionally
                    if (!urlPath.startsWith("/"))
                        urlPath = prefixPath + urlPath;
                    // Get rid of what we don't want, unconditionally
                    if (urlPath.startsWith(prefixPath)) {
                        urlPath = urlPath.substring(prefixPath.length());
                        // We're at the /Lists/listname part of the name.  Figure out where the end of it is.
                        int index = urlPath.indexOf("/");
                        if (index == -1)
                            throw new ManifoldCFException("Bad list view url without site: '" + urlPath + "'");
                        String pathpart = urlPath.substring(0, index);

                        if ("Lists".equals(pathpart)) {
                            int k = urlPath.indexOf("/", index + 1);
                            if (k == -1)
                                throw new ManifoldCFException(
                                        "Bad list view url without 'Lists': '" + urlPath + "'");
                            pathpart = urlPath.substring(index + 1, k);
                        }

                        if (pathpart.length() != 0 && !pathpart.equals("_catalogs")) {
                            if (title == null || title.length() == 0)
                                title = pathpart;
                            result.add(new NameValue(pathpart, title));
                        }
                    } else {
                        Logging.connectors.warn("SharePoint: List view url is not in the expected form: '"
                                + urlPath + "'; expected something beginning with '" + prefixPath
                                + "'; skipping");
                    }
                }
            }

        }

        return result;
    } catch (java.net.MalformedURLException e) {
        throw new ManifoldCFException("Bad SharePoint url: " + e.getMessage(), e);
    } catch (javax.xml.rpc.ServiceException e) {
        if (Logging.connectors.isDebugEnabled())
            Logging.connectors.debug(
                    "SharePoint: Got a service exception getting lists for site " + parentSite + " - retrying",
                    e);
        currentTime = System.currentTimeMillis();
        throw new ServiceInterruption("Service exception: " + e.getMessage(), e, currentTime + 300000L,
                currentTime + 12 * 60 * 60000L, -1, true);
    } catch (org.apache.axis.AxisFault e) {
        if (e.getFaultCode().equals(new javax.xml.namespace.QName("http://xml.apache.org/axis/", "HTTP"))) {
            org.w3c.dom.Element elem = e.lookupFaultDetail(
                    new javax.xml.namespace.QName("http://xml.apache.org/axis/", "HttpErrorCode"));
            if (elem != null) {
                elem.normalize();
                String httpErrorCode = elem.getFirstChild().getNodeValue().trim();
                if (httpErrorCode.equals("404"))
                    return null;
                else if (httpErrorCode.equals("403"))
                    throw new ManifoldCFException("Remote procedure exception: " + e.getMessage(), e);
                else if (httpErrorCode.equals("401")) {
                    if (Logging.connectors.isDebugEnabled())
                        Logging.connectors.debug(
                                "SharePoint: Crawl user does not have sufficient privileges to read lists for site "
                                        + parentSite + " - skipping",
                                e);
                    return null;
                }
                throw new ManifoldCFException("Unexpected http error code " + httpErrorCode
                        + " accessing SharePoint at " + baseUrl + parentSite + ": " + e.getMessage(), e);
            }
            throw new ManifoldCFException("Unknown http error occurred: " + e.getMessage(), e);
        }
        if (e.getFaultCode().equals(new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/envelope/",
                "Server.userException"))) {
            String exceptionName = e.getFaultString();
            if (exceptionName.equals("java.lang.InterruptedException"))
                throw new ManifoldCFException("Interrupted", ManifoldCFException.INTERRUPTED);
        }
        if (Logging.connectors.isDebugEnabled())
            Logging.connectors.debug(
                    "SharePoint: Got a remote exception reading lists for site " + parentSite + " - retrying",
                    e);
        currentTime = System.currentTimeMillis();
        throw new ServiceInterruption("Remote procedure exception: " + e.getMessage(), e, currentTime + 300000L,
                currentTime + 3 * 60 * 60000L, -1, false);
    } catch (java.rmi.RemoteException e) {
        throw new ManifoldCFException("Unexpected remote exception occurred: " + e.getMessage(), e);
    }
}

From source file:org.apache.manifoldcf.crawler.connectors.sharepoint.SPSProxyHelper.java

/**
*
* @param parentSite/*  w  w w .  ja  v a  2  s.c  o m*/
* @param docLibrary
* @return document library ID
* @throws ManifoldCFException
* @throws ServiceInterruption
*/
public String getDocLibID(String parentSite, String parentSiteDecoded, String docLibrary)
        throws ServiceInterruption, ManifoldCFException {
    long currentTime;
    try {
        // The old code here used to call the lists service to find the guid, using the doc library url name as the title.
        // This did not work when the title differed from the url name.
        // On 5/8/2008 I modified the code to use the lists service to locate the correct record by matching the defaultViewUrl field,
        // so that we instead iterate through the children.  It's more expensive but it works.
        String parentSiteRequest = parentSite;

        if (parentSiteRequest.equals("/")) {
            parentSiteRequest = ""; // root case
            parentSiteDecoded = "";
        }

        ListsWS listsService = new ListsWS(baseUrl + parentSiteRequest, userName, password, configuration,
                httpClient);
        ListsSoap listsCall = listsService.getListsSoapHandler();

        GetListCollectionResponseGetListCollectionResult listResp = listsCall.getListCollection();
        org.apache.axis.message.MessageElement[] lists = listResp.get_any();

        XMLDoc doc = new XMLDoc(lists[0].toString());
        ArrayList nodeList = new ArrayList();

        doc.processPath(nodeList, "*", null);
        if (nodeList.size() != 1) {
            throw new ManifoldCFException("Bad xml - missing outer 'ns1:Lists' node - there are "
                    + Integer.toString(nodeList.size()) + " nodes");
        }
        Object parent = nodeList.get(0);
        if (!doc.getNodeName(parent).equals("ns1:Lists"))
            throw new ManifoldCFException("Bad xml - outer node is not 'ns1:Lists'");

        nodeList.clear();
        doc.processPath(nodeList, "*", parent); // <ns1:Lists>

        String prefixPath = decodedServerLocation + parentSiteDecoded + "/";

        int i = 0;
        while (i < nodeList.size()) {
            Object o = nodeList.get(i++);

            String baseType = doc.getValue(o, "BaseType");
            if (baseType.equals("1")) {
                // We think it's a library

                // This is how we display it, so this has the right path extension
                String urlPath = doc.getValue(o, "DefaultViewUrl");

                // If it has no view url, we don't have any idea what to do with it
                if (urlPath != null && urlPath.length() > 0) {
                    // Normalize conditionally
                    if (!urlPath.startsWith("/"))
                        urlPath = prefixPath + urlPath;
                    // Get rid of what we don't want, unconditionally
                    if (urlPath.startsWith(prefixPath)) {
                        urlPath = urlPath.substring(prefixPath.length());
                        // We're at the library name.  Figure out where the end of it is.
                        int index = urlPath.indexOf("/");
                        if (index == -1)
                            throw new ManifoldCFException(
                                    "Bad library view url without site: '" + urlPath + "'");
                        String pathpart = urlPath.substring(0, index);

                        if (pathpart.equals(docLibrary)) {
                            // We found it!
                            // Return its ID
                            return doc.getValue(o, "ID");
                        }
                    } else {
                        Logging.connectors.warn("SharePoint: Library view url is not in the expected form: '"
                                + urlPath + "'; it should start with '" + prefixPath + "'; skipping");
                    }
                }
            }
        }

        // Not found - return null
        return null;
    } catch (java.net.MalformedURLException e) {
        throw new ManifoldCFException("Bad SharePoint url: " + e.getMessage(), e);
    } catch (javax.xml.rpc.ServiceException e) {
        if (Logging.connectors.isDebugEnabled())
            Logging.connectors.debug("SharePoint: Got a service exception getting the library ID for site "
                    + parentSite + " library " + docLibrary + " - retrying", e);
        currentTime = System.currentTimeMillis();
        throw new ServiceInterruption("Service exception: " + e.getMessage(), e, currentTime + 300000L,
                currentTime + 12 * 60 * 60000L, -1, true);
    } catch (org.apache.axis.AxisFault e) {
        currentTime = System.currentTimeMillis();
        if (e.getFaultCode().equals(new javax.xml.namespace.QName("http://xml.apache.org/axis/", "HTTP"))) {
            org.w3c.dom.Element elem = e.lookupFaultDetail(
                    new javax.xml.namespace.QName("http://xml.apache.org/axis/", "HttpErrorCode"));
            if (elem != null) {
                elem.normalize();
                String httpErrorCode = elem.getFirstChild().getNodeValue().trim();
                if (httpErrorCode.equals("404")) {
                    // Page did not exist
                    if (Logging.connectors.isDebugEnabled())
                        Logging.connectors.debug("SharePoint: The page at " + baseUrl + parentSite
                                + " did not exist; assuming library deleted");
                    return null;
                } else if (httpErrorCode.equals("401")) {
                    // User did not have permissions for this library to list libraries
                    if (Logging.connectors.isDebugEnabled())
                        Logging.connectors
                                .debug("SharePoint: The crawl user did not have access to list libraries for "
                                        + baseUrl + parentSite + "; skipping");
                    return null;
                } else if (httpErrorCode.equals("403"))
                    throw new ManifoldCFException(
                            "Http error " + httpErrorCode + " while reading from " + baseUrl + parentSite
                                    + " - check IIS and SharePoint security settings! " + e.getMessage(),
                            e);
                else
                    throw new ManifoldCFException("Unexpected http error code " + httpErrorCode
                            + " accessing SharePoint at " + baseUrl + parentSite + ": " + e.getMessage(), e);
            }
            throw new ManifoldCFException("Unknown http error occurred: " + e.getMessage(), e);
        } else if (e.getFaultCode()
                .equals(new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/envelope/", "Server"))) {
            org.w3c.dom.Element elem = e.lookupFaultDetail(new javax.xml.namespace.QName(
                    "http://schemas.microsoft.com/sharepoint/soap/", "errorcode"));
            if (elem != null) {
                elem.normalize();
                String sharepointErrorCode = elem.getFirstChild().getNodeValue().trim();
                if (sharepointErrorCode.equals("0x82000006")) {
                    // List did not exist
                    if (Logging.connectors.isDebugEnabled())
                        Logging.connectors.debug("SharePoint: The list " + docLibrary + " in site " + parentSite
                                + " did not exist; assuming library deleted");
                    return null;
                } else {
                    if (Logging.connectors.isDebugEnabled()) {
                        org.w3c.dom.Element elem2 = e.lookupFaultDetail(new javax.xml.namespace.QName(
                                "http://schemas.microsoft.com/sharepoint/soap/", "errorstring"));
                        String errorString = "";
                        if (elem != null)
                            errorString = elem2.getFirstChild().getNodeValue().trim();

                        Logging.connectors.debug("SharePoint: Getting library ID for the list " + docLibrary
                                + " in site " + parentSite + " failed with unexpected SharePoint error code "
                                + sharepointErrorCode + ": " + errorString + " - Skipping", e);
                    }
                    return null;
                }
            }
            if (Logging.connectors.isDebugEnabled())
                Logging.connectors
                        .debug("SharePoint: Unknown SharePoint server error getting library ID for site "
                                + parentSite + " library " + docLibrary + " - axis fault = "
                                + e.getFaultCode().getLocalPart() + ", detail = " + e.getFaultString()
                                + " - retrying", e);

            throw new ServiceInterruption("Unknown SharePoint server error: " + e.getMessage() + " - retrying",
                    e, currentTime + 300000L, currentTime + 3 * 60 * 60000L, -1, false);
        }

        if (e.getFaultCode().equals(new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/envelope/",
                "Server.userException"))) {
            String exceptionName = e.getFaultString();
            if (exceptionName.equals("java.lang.InterruptedException"))
                throw new ManifoldCFException("Interrupted", ManifoldCFException.INTERRUPTED);
        }

        if (Logging.connectors.isDebugEnabled())
            Logging.connectors.debug("SharePoint: Got an unknown remote exception getting library ID for site "
                    + parentSite + " library " + docLibrary + " - axis fault = "
                    + e.getFaultCode().getLocalPart() + ", detail = " + e.getFaultString() + " - retrying", e);
        throw new ServiceInterruption("Remote procedure exception: " + e.getMessage(), e, currentTime + 300000L,
                currentTime + 3 * 60 * 60000L, -1, false);
    } catch (java.rmi.RemoteException e) {
        // We expect the axis exception to be thrown, not this generic one!
        // So, fail hard if we see it.
        if (Logging.connectors.isDebugEnabled())
            Logging.connectors
                    .debug("SharePoint: Got an unexpected remote exception getting library ID for site "
                            + parentSite + " library " + docLibrary, e);
        throw new ManifoldCFException("Unexpected remote procedure exception: " + e.getMessage(), e);
    }
}

From source file:org.apache.manifoldcf.crawler.connectors.sharepoint.SPSProxyHelper.java

/**
* Get the acls for a document library.//from  w ww. j a  v  a 2s.com
* @param site
* @param guid is the list/library GUID
* @return array of sids
* @throws Exception
*/
public String[] getACLs(String site, String guid, boolean activeDirectoryAuthority)
        throws ManifoldCFException, ServiceInterruption {
    long currentTime;
    try {
        if (site.compareTo("/") == 0)
            site = ""; // root case
        UserGroupWS userService = new UserGroupWS(baseUrl + site, userName, password, configuration,
                httpClient);
        com.microsoft.schemas.sharepoint.soap.directory.UserGroupSoap userCall = userService
                .getUserGroupSoapHandler();

        PermissionsWS aclService = new PermissionsWS(baseUrl + site, userName, password, configuration,
                httpClient);
        com.microsoft.schemas.sharepoint.soap.directory.PermissionsSoap aclCall = aclService
                .getPermissionsSoapHandler();

        com.microsoft.schemas.sharepoint.soap.directory.GetPermissionCollectionResponseGetPermissionCollectionResult aclResult = aclCall
                .getPermissionCollection(guid, "List");
        org.apache.axis.message.MessageElement[] aclList = aclResult.get_any();

        XMLDoc doc = new XMLDoc(aclList[0].toString());
        ArrayList nodeList = new ArrayList();

        doc.processPath(nodeList, "*", null);
        if (nodeList.size() != 1) {
            throw new ManifoldCFException(
                    "Bad xml - missing outer 'ns1:GetPermissionCollection' node - there are "
                            + Integer.toString(nodeList.size()) + " nodes");
        }
        Object parent = nodeList.get(0);
        if (!doc.getNodeName(parent).equals("ns1:GetPermissionCollection"))
            throw new ManifoldCFException("Bad xml - outer node is not 'ns1:GetPermissionCollection'");

        nodeList.clear();
        doc.processPath(nodeList, "*", parent);

        if (nodeList.size() != 1) {
            throw new ManifoldCFException(" No results found.");
        }
        parent = nodeList.get(0);
        nodeList.clear();
        doc.processPath(nodeList, "*", parent);
        Set<String> sids = new HashSet<String>();
        int i = 0;
        for (; i < nodeList.size(); i++) {
            Object node = nodeList.get(i);
            String mask = doc.getValue(node, "Mask");
            long maskValue = new Long(mask).longValue();
            if ((maskValue & 1L) == 1L) {
                // Permission to view
                String isUser = doc.getValue(node, "MemberIsUser");

                if (isUser.compareToIgnoreCase("True") == 0) {
                    // Use AD user or group
                    String userLogin = doc.getValue(node, "UserLogin");
                    String userSid = getSidForUser(userCall, userLogin, activeDirectoryAuthority);
                    sids.add(userSid);
                } else {
                    // Role
                    List<String> roleSids;
                    String roleName = doc.getValue(node, "RoleName");
                    if (roleName.length() == 0) {
                        roleName = doc.getValue(node, "GroupName");
                        if (roleName != null && roleName.length() > 0) {
                            roleSids = getSidsForGroup(userCall, roleName, activeDirectoryAuthority);
                        } else {
                            Logging.connectors.warn(
                                    "SharePoint: Unrecognized permission collection entry: no role, no group: "
                                            + doc.getXML());
                            roleSids = new ArrayList<String>();
                        }
                    } else {
                        roleSids = getSidsForRole(userCall, roleName, activeDirectoryAuthority);
                    }

                    for (String sid : roleSids) {
                        sids.add(sid);
                    }
                }
            }
        }

        return sids.toArray(new String[0]);
    } catch (java.net.MalformedURLException e) {
        throw new ManifoldCFException("Bad SharePoint url: " + e.getMessage(), e);
    } catch (javax.xml.rpc.ServiceException e) {
        if (Logging.connectors.isDebugEnabled())
            Logging.connectors.debug("SharePoint: Got a service exception getting the acls for site " + site
                    + " guid " + guid + " - retrying", e);
        currentTime = System.currentTimeMillis();
        throw new ServiceInterruption("Service exception: " + e.getMessage(), e, currentTime + 300000L,
                currentTime + 12 * 60 * 60000L, -1, true);
    } catch (org.apache.axis.AxisFault e) {
        currentTime = System.currentTimeMillis();
        if (e.getFaultCode().equals(new javax.xml.namespace.QName("http://xml.apache.org/axis/", "HTTP"))) {
            org.w3c.dom.Element elem = e.lookupFaultDetail(
                    new javax.xml.namespace.QName("http://xml.apache.org/axis/", "HttpErrorCode"));
            if (elem != null) {
                elem.normalize();
                String httpErrorCode = elem.getFirstChild().getNodeValue().trim();
                if (httpErrorCode.equals("404")) {
                    // Page did not exist
                    if (Logging.connectors.isDebugEnabled())
                        Logging.connectors.debug("SharePoint: The page at " + baseUrl + site
                                + " did not exist; assuming list/library deleted");
                    return null;
                } else if (httpErrorCode.equals("401")) {
                    // User did not have permissions for this library to get the acls
                    if (Logging.connectors.isDebugEnabled())
                        Logging.connectors.debug(
                                "SharePoint: The crawl user did not have access to the permissions service for "
                                        + baseUrl + site + "; skipping documents within");
                    return null;
                } else if (httpErrorCode.equals("403"))
                    throw new ManifoldCFException(
                            "Http error " + httpErrorCode + " while reading from " + baseUrl + site
                                    + " - check IIS and SharePoint security settings! " + e.getMessage(),
                            e);
                else
                    throw new ManifoldCFException("Unexpected http error code " + httpErrorCode
                            + " accessing SharePoint at " + baseUrl + site + ": " + e.getMessage(), e);
            }
            throw new ManifoldCFException("Unknown http error occurred: " + e.getMessage(), e);
        } else if (e.getFaultCode()
                .equals(new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/envelope/", "Server"))) {
            org.w3c.dom.Element elem = e.lookupFaultDetail(new javax.xml.namespace.QName(
                    "http://schemas.microsoft.com/sharepoint/soap/", "errorcode"));
            if (elem != null) {
                elem.normalize();
                String sharepointErrorCode = elem.getFirstChild().getNodeValue().trim();
                if (sharepointErrorCode.equals("0x82000006")) {
                    // List did not exist
                    if (Logging.connectors.isDebugEnabled())
                        Logging.connectors.debug("SharePoint: The list " + guid + " in site " + site
                                + " did not exist; assuming list/library deleted");
                    return null;
                } else {
                    if (Logging.connectors.isDebugEnabled()) {
                        org.w3c.dom.Element elem2 = e.lookupFaultDetail(new javax.xml.namespace.QName(
                                "http://schemas.microsoft.com/sharepoint/soap/", "errorstring"));
                        String errorString = "";
                        if (elem != null)
                            errorString = elem2.getFirstChild().getNodeValue().trim();

                        Logging.connectors.debug("SharePoint: Getting permissions for the list " + guid
                                + " in site " + site + " failed with unexpected SharePoint error code "
                                + sharepointErrorCode + ": " + errorString + " - Skipping", e);
                    }
                    return null;
                }
            }
            if (Logging.connectors.isDebugEnabled())
                Logging.connectors
                        .debug("SharePoint: Unknown SharePoint server error getting the acls for site " + site
                                + " guid " + guid + " - axis fault = " + e.getFaultCode().getLocalPart()
                                + ", detail = " + e.getFaultString() + " - retrying", e);

            throw new ServiceInterruption("Unknown SharePoint server error: " + e.getMessage() + " - retrying",
                    e, currentTime + 300000L, currentTime + 3 * 60 * 60000L, -1, false);
        }

        if (e.getFaultCode().equals(new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/envelope/",
                "Server.userException"))) {
            String exceptionName = e.getFaultString();
            if (exceptionName.equals("java.lang.InterruptedException"))
                throw new ManifoldCFException("Interrupted", ManifoldCFException.INTERRUPTED);
        }

        if (Logging.connectors.isDebugEnabled())
            Logging.connectors.debug("SharePoint: Got an unknown remote exception getting the acls for site "
                    + site + " guid " + guid + " - axis fault = " + e.getFaultCode().getLocalPart()
                    + ", detail = " + e.getFaultString() + " - retrying", e);
        throw new ServiceInterruption("Remote procedure exception: " + e.getMessage(), e, currentTime + 300000L,
                currentTime + 3 * 60 * 60000L, -1, false);
    } catch (java.rmi.RemoteException e) {
        // We expect the axis exception to be thrown, not this generic one!
        // So, fail hard if we see it.
        if (Logging.connectors.isDebugEnabled())
            Logging.connectors.debug("SharePoint: Got an unexpected remote exception getting the acls for site "
                    + site + " guid " + guid, e);
        throw new ManifoldCFException("Unexpected remote procedure exception: " + e.getMessage(), e);
    }
}

From source file:org.apache.manifoldcf.crawler.connectors.sharepoint.SPSProxyHelper.java

/**
*
* @param parentSite/* w  ww  .  jav a 2s .  com*/
* @param list name
* @return document library ID
* @throws ManifoldCFException
* @throws ServiceInterruption
*/
public String getListID(String parentSite, String parentSiteDecoded, String listName)
        throws ServiceInterruption, ManifoldCFException {
    long currentTime;
    try {
        // The old code here used to call the lists service to find the guid, using the doc library url name as the title.
        // This did not work when the title differed from the url name.
        // On 5/8/2008 I modified the code to use the lists service to locate the correct record by matching the defaultViewUrl field,
        // so that we instead iterate through the children.  It's more expensive but it works.
        String parentSiteRequest = parentSite;

        if (parentSiteRequest.equals("/")) {
            parentSiteRequest = ""; // root case
            parentSiteDecoded = "";
        }

        ListsWS listsService = new ListsWS(baseUrl + parentSiteRequest, userName, password, configuration,
                httpClient);
        ListsSoap listsCall = listsService.getListsSoapHandler();

        GetListCollectionResponseGetListCollectionResult listResp = listsCall.getListCollection();
        org.apache.axis.message.MessageElement[] lists = listResp.get_any();

        XMLDoc doc = new XMLDoc(lists[0].toString());
        ArrayList nodeList = new ArrayList();

        doc.processPath(nodeList, "*", null);
        if (nodeList.size() != 1) {
            throw new ManifoldCFException("Bad xml - missing outer 'ns1:Lists' node - there are "
                    + Integer.toString(nodeList.size()) + " nodes");
        }
        Object parent = nodeList.get(0);
        if (!doc.getNodeName(parent).equals("ns1:Lists"))
            throw new ManifoldCFException("Bad xml - outer node is not 'ns1:Lists'");

        nodeList.clear();
        doc.processPath(nodeList, "*", parent); // <ns1:Lists>

        String prefixPath = decodedServerLocation + parentSiteDecoded + "/";

        int i = 0;
        while (i < nodeList.size()) {
            Object o = nodeList.get(i++);

            String baseType = doc.getValue(o, "BaseType");
            if (baseType.equals("0")) {
                // We think it's a list

                // This is how we display it, so this has the right path extension
                String urlPath = doc.getValue(o, "DefaultViewUrl");

                // If it has no view url, we don't have any idea what to do with it
                if (urlPath != null && urlPath.length() > 0) {
                    // Normalize conditionally
                    if (!urlPath.startsWith("/"))
                        urlPath = prefixPath + urlPath;
                    // Get rid of what we don't want, unconditionally
                    if (urlPath.startsWith(prefixPath)) {
                        urlPath = urlPath.substring(prefixPath.length());
                        // We're at the Lists/listname part of the name.  Figure out where the end of it is.
                        int index = urlPath.indexOf("/");
                        if (index == -1)
                            throw new ManifoldCFException("Bad list view url without site: '" + urlPath + "'");
                        String pathpart = urlPath.substring(0, index);
                        if ("Lists".equals(pathpart)) {
                            int k = urlPath.indexOf("/", index + 1);
                            if (k == -1)
                                throw new ManifoldCFException(
                                        "Bad list view url without 'Lists': '" + urlPath + "'");
                            pathpart = urlPath.substring(index + 1, k);
                        }

                        if (pathpart.equals(listName)) {
                            // We found it!
                            // Return its ID
                            return doc.getValue(o, "ID");
                        }
                    } else {
                        Logging.connectors.warn("SharePoint: List view url is not in the expected form: '"
                                + urlPath + "'; expected something beginning with '" + prefixPath
                                + "'; skipping");
                    }
                }
            }
        }

        // Not found - return null
        return null;
    } catch (java.net.MalformedURLException e) {
        throw new ManifoldCFException("Bad SharePoint url: " + e.getMessage(), e);
    } catch (javax.xml.rpc.ServiceException e) {
        if (Logging.connectors.isDebugEnabled())
            Logging.connectors.debug("SharePoint: Got a service exception getting the list ID for site "
                    + parentSite + " list " + listName + " - retrying", e);
        currentTime = System.currentTimeMillis();
        throw new ServiceInterruption("Service exception: " + e.getMessage(), e, currentTime + 300000L,
                currentTime + 12 * 60 * 60000L, -1, true);
    } catch (org.apache.axis.AxisFault e) {
        currentTime = System.currentTimeMillis();
        if (e.getFaultCode().equals(new javax.xml.namespace.QName("http://xml.apache.org/axis/", "HTTP"))) {
            org.w3c.dom.Element elem = e.lookupFaultDetail(
                    new javax.xml.namespace.QName("http://xml.apache.org/axis/", "HttpErrorCode"));
            if (elem != null) {
                elem.normalize();
                String httpErrorCode = elem.getFirstChild().getNodeValue().trim();
                if (httpErrorCode.equals("404")) {
                    // Page did not exist
                    if (Logging.connectors.isDebugEnabled())
                        Logging.connectors.debug("SharePoint: The page at " + baseUrl + parentSite
                                + " did not exist; assuming list deleted");
                    return null;
                } else if (httpErrorCode.equals("401")) {
                    // User did not have permissions for this library to list libraries
                    if (Logging.connectors.isDebugEnabled())
                        Logging.connectors
                                .debug("SharePoint: The crawl user did not have access to list lists for "
                                        + baseUrl + parentSite + "; skipping");
                    return null;
                } else if (httpErrorCode.equals("403"))
                    throw new ManifoldCFException(
                            "Http error " + httpErrorCode + " while reading from " + baseUrl + parentSite
                                    + " - check IIS and SharePoint security settings! " + e.getMessage(),
                            e);
                else
                    throw new ManifoldCFException("Unexpected http error code " + httpErrorCode
                            + " accessing SharePoint at " + baseUrl + parentSite + ": " + e.getMessage(), e);
            }
            throw new ManifoldCFException("Unknown http error occurred: " + e.getMessage(), e);
        } else if (e.getFaultCode()
                .equals(new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/envelope/", "Server"))) {
            org.w3c.dom.Element elem = e.lookupFaultDetail(new javax.xml.namespace.QName(
                    "http://schemas.microsoft.com/sharepoint/soap/", "errorcode"));
            if (elem != null) {
                elem.normalize();
                String sharepointErrorCode = elem.getFirstChild().getNodeValue().trim();
                if (sharepointErrorCode.equals("0x82000006")) {
                    // List did not exist
                    if (Logging.connectors.isDebugEnabled())
                        Logging.connectors.debug("SharePoint: The list " + listName + " in site " + parentSite
                                + " did not exist; assuming list deleted");
                    return null;
                } else {
                    if (Logging.connectors.isDebugEnabled()) {
                        org.w3c.dom.Element elem2 = e.lookupFaultDetail(new javax.xml.namespace.QName(
                                "http://schemas.microsoft.com/sharepoint/soap/", "errorstring"));
                        String errorString = "";
                        if (elem != null)
                            errorString = elem2.getFirstChild().getNodeValue().trim();

                        Logging.connectors.debug("SharePoint: Getting list ID for the list " + listName
                                + " in site " + parentSite + " failed with unexpected SharePoint error code "
                                + sharepointErrorCode + ": " + errorString + " - Skipping", e);
                    }
                    return null;
                }
            }
            if (Logging.connectors.isDebugEnabled())
                Logging.connectors.debug("SharePoint: Unknown SharePoint server error getting list ID for site "
                        + parentSite + " list " + listName + " - axis fault = "
                        + e.getFaultCode().getLocalPart() + ", detail = " + e.getFaultString() + " - retrying",
                        e);

            throw new ServiceInterruption("Unknown SharePoint server error: " + e.getMessage() + " - retrying",
                    e, currentTime + 300000L, currentTime + 3 * 60 * 60000L, -1, false);
        }

        if (e.getFaultCode().equals(new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/envelope/",
                "Server.userException"))) {
            String exceptionName = e.getFaultString();
            if (exceptionName.equals("java.lang.InterruptedException"))
                throw new ManifoldCFException("Interrupted", ManifoldCFException.INTERRUPTED);
        }

        if (Logging.connectors.isDebugEnabled())
            Logging.connectors.debug("SharePoint: Got an unknown remote exception getting list ID for site "
                    + parentSite + " list " + listName + " - axis fault = " + e.getFaultCode().getLocalPart()
                    + ", detail = " + e.getFaultString() + " - retrying", e);
        throw new ServiceInterruption("Remote procedure exception: " + e.getMessage(), e, currentTime + 300000L,
                currentTime + 3 * 60 * 60000L, -1, false);
    } catch (java.rmi.RemoteException e) {
        // We expect the axis exception to be thrown, not this generic one!
        // So, fail hard if we see it.
        if (Logging.connectors.isDebugEnabled())
            Logging.connectors.debug("SharePoint: Got an unexpected remote exception getting list ID for site "
                    + parentSite + " list " + listName, e);
        throw new ManifoldCFException("Unexpected remote procedure exception: " + e.getMessage(), e);
    }
}

From source file:org.apache.manifoldcf.crawler.connectors.sharepoint.SPSProxyHelper.java

/**
* Get the acls for a document.//from   w  w w  . ja  v a 2  s.  c  o m
* NOTE that this function only works for SharePoint 2007+ with the MCPermissions web service installed.
* @param site is the encoded subsite path
* @param file is the encoded file url (not including protocol or server or location, but including encoded subsite, library and folder/file path)
* @return array of document SIDs
* @throws ManifoldCFException
* @throws ServiceInterruption
*/
public String[] getDocumentACLs(String site, String file, boolean activeDirectoryAuthority)
        throws ManifoldCFException, ServiceInterruption {
    long currentTime;
    try {
        if (site.compareTo("/") == 0)
            site = ""; // root case

        // Calculate the full server-relative path of the file
        String encodedRelativePath = serverLocation + file;
        if (encodedRelativePath.startsWith("/"))
            encodedRelativePath = encodedRelativePath.substring(1);

        if (Logging.connectors.isDebugEnabled())
            Logging.connectors.debug("SharePoint: Getting document acls for site '" + site + "' file '" + file
                    + "': Encoded relative path is '" + encodedRelativePath + "'");
        UserGroupWS userService = new UserGroupWS(baseUrl + site, userName, password, configuration,
                httpClient);
        com.microsoft.schemas.sharepoint.soap.directory.UserGroupSoap userCall = userService
                .getUserGroupSoapHandler();

        MCPermissionsWS aclService = new MCPermissionsWS(baseUrl + site, userName, password, configuration,
                httpClient);
        com.microsoft.sharepoint.webpartpages.PermissionsSoap aclCall = aclService.getPermissionsSoapHandler();

        com.microsoft.sharepoint.webpartpages.GetPermissionCollectionResponseGetPermissionCollectionResult aclResult = aclCall
                .getPermissionCollection(encodedRelativePath, "Item");
        if (aclResult == null) {
            Logging.connectors.debug("SharePoint: document acls were null");
            return null;
        }

        org.apache.axis.message.MessageElement[] aclList = aclResult.get_any();

        if (Logging.connectors.isDebugEnabled()) {
            Logging.connectors.debug("SharePoint: document acls xml: '" + aclList[0].toString() + "'");
        }

        XMLDoc doc = new XMLDoc(aclList[0].toString());
        ArrayList nodeList = new ArrayList();

        doc.processPath(nodeList, "*", null);
        if (nodeList.size() != 1) {
            throw new ManifoldCFException(
                    "Bad xml - missing outer 'ns1:GetPermissionCollection' node - there are "
                            + Integer.toString(nodeList.size()) + " nodes");
        }
        Object parent = nodeList.get(0);
        if (!doc.getNodeName(parent).equals("GetPermissionCollection"))
            throw new ManifoldCFException("Bad xml - outer node is not 'GetPermissionCollection'");

        nodeList.clear();
        doc.processPath(nodeList, "*", parent);

        if (nodeList.size() != 1) {
            throw new ManifoldCFException(" No results found.");
        }
        parent = nodeList.get(0);
        nodeList.clear();
        doc.processPath(nodeList, "*", parent);
        Set<String> sids = new HashSet<String>();
        int i = 0;
        for (; i < nodeList.size(); i++) {
            Object node = nodeList.get(i);
            String mask = doc.getValue(node, "Mask");
            long maskValue = new Long(mask).longValue();
            if ((maskValue & 1L) == 1L) {
                // Permission to view
                String isUser = doc.getValue(node, "MemberIsUser");

                if (isUser.compareToIgnoreCase("True") == 0) {
                    // Use AD user or group
                    String userLogin = doc.getValue(node, "UserLogin");
                    String userSid = getSidForUser(userCall, userLogin, activeDirectoryAuthority);
                    sids.add(userSid);
                } else {
                    // Role
                    List<String> roleSids;
                    String roleName = doc.getValue(node, "RoleName");
                    if (roleName.length() == 0) {
                        roleName = doc.getValue(node, "GroupName");
                        roleSids = getSidsForGroup(userCall, roleName, activeDirectoryAuthority);
                    } else {
                        roleSids = getSidsForRole(userCall, roleName, activeDirectoryAuthority);
                    }

                    for (String sid : roleSids) {
                        sids.add(sid);
                    }
                }
            }
        }

        return sids.toArray(new String[0]);
    } catch (java.net.MalformedURLException e) {
        throw new ManifoldCFException("Bad SharePoint url: " + e.getMessage(), e);
    } catch (javax.xml.rpc.ServiceException e) {
        if (Logging.connectors.isDebugEnabled())
            Logging.connectors.debug("SharePoint: Got a service exception getting the acls for site " + site
                    + " file " + file + " - retrying", e);
        currentTime = System.currentTimeMillis();
        throw new ServiceInterruption("Service exception: " + e.getMessage(), e, currentTime + 300000L,
                currentTime + 12 * 60 * 60000L, -1, true);
    } catch (org.apache.axis.AxisFault e) {
        currentTime = System.currentTimeMillis();
        if (e.getFaultCode().equals(new javax.xml.namespace.QName("http://xml.apache.org/axis/", "HTTP"))) {
            org.w3c.dom.Element elem = e.lookupFaultDetail(
                    new javax.xml.namespace.QName("http://xml.apache.org/axis/", "HttpErrorCode"));
            if (elem != null) {
                elem.normalize();
                String httpErrorCode = elem.getFirstChild().getNodeValue().trim();
                if (httpErrorCode.equals("404")) {
                    // Page did not exist
                    if (Logging.connectors.isDebugEnabled())
                        Logging.connectors.debug("SharePoint: The page at " + baseUrl + site
                                + " did not exist; assuming library deleted");
                    return null;
                } else if (httpErrorCode.equals("401")) {
                    // User did not have permissions for this library to get the acls
                    if (Logging.connectors.isDebugEnabled())
                        Logging.connectors.debug(
                                "SharePoint: The crawl user did not have access to the MCPermissions service for "
                                        + baseUrl + site + "; skipping documents within");
                    return null;
                } else if (httpErrorCode.equals("403"))
                    throw new ManifoldCFException(
                            "Http error " + httpErrorCode + " while reading from " + baseUrl + site
                                    + " - check IIS and SharePoint security settings! " + e.getMessage(),
                            e);
                else
                    throw new ManifoldCFException("Unexpected http error code " + httpErrorCode
                            + " accessing SharePoint at " + baseUrl + site + ": " + e.getMessage(), e);
            }
            throw new ManifoldCFException("Unknown http error occurred: " + e.getMessage(), e);
        } else if (e.getFaultCode()
                .equals(new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/envelope/", "Server"))) {
            org.w3c.dom.Element elem = e.lookupFaultDetail(new javax.xml.namespace.QName(
                    "http://schemas.microsoft.com/sharepoint/soap/", "errorcode"));
            if (elem != null) {
                elem.normalize();
                String sharepointErrorCode = elem.getFirstChild().getNodeValue().trim();
                if (sharepointErrorCode.equals("0x82000006")) {
                    // List did not exist
                    if (Logging.connectors.isDebugEnabled())
                        Logging.connectors.debug("SharePoint: The file " + file + " in site " + site
                                + " did not exist; assuming file deleted");
                    return null;
                } else {
                    if (Logging.connectors.isDebugEnabled()) {
                        org.w3c.dom.Element elem2 = e.lookupFaultDetail(new javax.xml.namespace.QName(
                                "http://schemas.microsoft.com/sharepoint/soap/", "errorstring"));
                        String errorString = "";
                        if (elem != null)
                            errorString = elem2.getFirstChild().getNodeValue().trim();

                        Logging.connectors.debug("SharePoint: Getting permissions for the file " + file
                                + " in site " + site + " failed with unexpected SharePoint error code "
                                + sharepointErrorCode + ": " + errorString + " - Skipping", e);
                    }
                    return null;
                }
            }
            if (Logging.connectors.isDebugEnabled())
                Logging.connectors
                        .debug("SharePoint: Unknown SharePoint server error getting the acls for site " + site
                                + " file " + file + " - axis fault = " + e.getFaultCode().getLocalPart()
                                + ", detail = " + e.getFaultString() + " - retrying", e);

            throw new ServiceInterruption("Unknown SharePoint server error: " + e.getMessage() + " - retrying",
                    e, currentTime + 300000L, currentTime + 3 * 60 * 60000L, -1, false);
        }

        if (e.getFaultCode().equals(new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/envelope/",
                "Server.userException"))) {
            String exceptionName = e.getFaultString();
            if (exceptionName.equals("java.lang.InterruptedException"))
                throw new ManifoldCFException("Interrupted", ManifoldCFException.INTERRUPTED);
        }

        if (Logging.connectors.isDebugEnabled())
            Logging.connectors.debug("SharePoint: Got an unknown remote exception getting the acls for site "
                    + site + " file " + file + " - axis fault = " + e.getFaultCode().getLocalPart()
                    + ", detail = " + e.getFaultString() + " - retrying", e);
        throw new ServiceInterruption("Remote procedure exception: " + e.getMessage(), e, currentTime + 300000L,
                currentTime + 3 * 60 * 60000L, -1, false);
    } catch (java.rmi.RemoteException e) {
        // We expect the axis exception to be thrown, not this generic one!
        // So, fail hard if we see it.
        if (Logging.connectors.isDebugEnabled())
            Logging.connectors.debug("SharePoint: Got an unexpected remote exception getting the acls for site "
                    + site + " file " + file, e);
        throw new ManifoldCFException("Unexpected remote procedure exception: " + e.getMessage(), e);
    }
}

From source file:org.apache.manifoldcf.crawler.connectors.sharepoint.SPSProxyHelper.java

/**
*
* @param site//ww w.  j  a  v a 2 s .com
* @param docLibrary
* @return an XML document
* @throws ManifoldCFException
* @throws ServiceInterruption
*/
public boolean getChildren(IFileStream fileStream, String site, String guid, boolean dspStsWorks)
        throws ManifoldCFException, ServiceInterruption {
    long currentTime;
    try {
        if (site.equals("/"))
            site = ""; // root case
        if (dspStsWorks) {
            StsAdapterWS listService = new StsAdapterWS(baseUrl + site, userName, password, configuration,
                    httpClient);
            StsAdapterSoapStub stub = (StsAdapterSoapStub) listService.getStsAdapterSoapHandler();

            String[] vArray = new String[1];
            vArray[0] = "1.0";
            VersionsHeader myVersion = new VersionsHeader();
            myVersion.setVersion(vArray);

            stub.setHeader("http://schemas.microsoft.com/sharepoint/dsp", "versions", myVersion);

            RequestHeader reqHeader = new RequestHeader();
            reqHeader.setDocument(DocumentType.content);
            reqHeader.setMethod(MethodType.query);

            stub.setHeader("http://schemas.microsoft.com/sharepoint/dsp", "request", reqHeader);

            QueryRequest myRequest = new QueryRequest();

            DSQuery sQuery = new DSQuery();
            sQuery.setSelect("/list[@id='" + guid + "']");
            myRequest.setDsQuery(sQuery);

            StsAdapterSoap call = stub;
            ArrayList nodeList = new ArrayList();

            QueryResponse resp = call.query(myRequest);
            org.apache.axis.message.MessageElement[] list = resp.get_any();
            if (Logging.connectors.isDebugEnabled()) {
                Logging.connectors.debug("SharePoint: list xml: '" + list[0].toString() + "'");
            }

            XMLDoc doc = new XMLDoc(list[0].toString());

            doc.processPath(nodeList, "*", null);
            if (nodeList.size() != 1) {
                throw new ManifoldCFException("Bad xml - missing outer 'ns1:dsQueryResponse' node - there are "
                        + Integer.toString(nodeList.size()) + " nodes");
            }

            Object parent = nodeList.get(0);
            //System.out.println( "Outer NodeName = " + doc.getNodeName(parent) );
            if (!doc.getNodeName(parent).equals("ns1:dsQueryResponse"))
                throw new ManifoldCFException("Bad xml - outer node is not 'ns1:dsQueryResponse'");

            nodeList.clear();
            doc.processPath(nodeList, "*", parent);

            if (nodeList.size() != 2) {
                throw new ManifoldCFException(" No results found.");
            }

            // Now, extract the files from the response document
            XMLDoc docs = doc;
            ArrayList nodeDocs = new ArrayList();

            docs.processPath(nodeDocs, "*", null);
            parent = nodeDocs.get(0); // ns1:dsQueryResponse
            nodeDocs.clear();
            docs.processPath(nodeDocs, "*", parent);
            Object documents = nodeDocs.get(1);
            nodeDocs.clear();
            docs.processPath(nodeDocs, "*", documents);

            StringBuilder sb = new StringBuilder();
            for (int j = 0; j < nodeDocs.size(); j++) {
                Object node = nodeDocs.get(j);
                Logging.connectors.debug(node.toString());
                String relPath = docs.getData(docs.getElement(node, "FileRef"));
                fileStream.addFile(relPath, null);
            }
        } else {
            // New code

            MCPermissionsWS itemService = new MCPermissionsWS(baseUrl + site, userName, password, configuration,
                    httpClient);
            com.microsoft.sharepoint.webpartpages.PermissionsSoap itemCall = itemService
                    .getPermissionsSoapHandler();

            int startingIndex = 0;
            int amtToRequest = 10000;
            while (true) {
                com.microsoft.sharepoint.webpartpages.GetListItemsResponseGetListItemsResult itemsResult = itemCall
                        .getListItems(guid, Integer.toString(startingIndex), Integer.toString(amtToRequest));

                MessageElement[] itemsList = itemsResult.get_any();

                if (Logging.connectors.isDebugEnabled()) {
                    Logging.connectors
                            .debug("SharePoint: getListItems xml response: '" + itemsList[0].toString() + "'");
                }

                if (itemsList.length != 1)
                    throw new ManifoldCFException("Bad response - expecting one outer 'GetListItems' node, saw "
                            + Integer.toString(itemsList.length));

                MessageElement items = itemsList[0];
                if (!items.getElementName().getLocalName().equals("GetListItems"))
                    throw new ManifoldCFException(
                            "Bad response - outer node should have been 'GetListItems' node");

                int resultCount = 0;
                Iterator iter = items.getChildElements();
                while (iter.hasNext()) {
                    MessageElement child = (MessageElement) iter.next();
                    if (child.getElementName().getLocalName().equals("GetListItemsResponse")) {
                        Iterator resultIter = child.getChildElements();
                        while (resultIter.hasNext()) {
                            MessageElement result = (MessageElement) resultIter.next();
                            if (result.getElementName().getLocalName().equals("GetListItemsResult")) {
                                resultCount++;
                                String relPath = result.getAttribute("FileRef");
                                String displayURL = result.getAttribute("ListItemURL");
                                fileStream.addFile(relPath, displayURL);
                            }
                        }

                    }
                }

                if (resultCount < amtToRequest)
                    break;

                startingIndex += resultCount;
            }
        }

        return true;
    } catch (java.net.MalformedURLException e) {
        throw new ManifoldCFException("Bad SharePoint url: " + e.getMessage(), e);
    } catch (javax.xml.rpc.ServiceException e) {
        if (Logging.connectors.isDebugEnabled())
            Logging.connectors.debug("SharePoint: Got a service exception getting documents for site " + site
                    + " guid " + guid + " - retrying", e);
        currentTime = System.currentTimeMillis();
        throw new ServiceInterruption("Service exception: " + e.getMessage(), e, currentTime + 300000L,
                currentTime + 12 * 60 * 60000L, -1, true);
    } catch (org.apache.axis.AxisFault e) {
        currentTime = System.currentTimeMillis();
        if (e.getFaultCode().equals(new javax.xml.namespace.QName("http://xml.apache.org/axis/", "HTTP"))) {
            org.w3c.dom.Element elem = e.lookupFaultDetail(
                    new javax.xml.namespace.QName("http://xml.apache.org/axis/", "HttpErrorCode"));
            if (elem != null) {
                elem.normalize();
                String httpErrorCode = elem.getFirstChild().getNodeValue().trim();
                if (httpErrorCode.equals("404")) {
                    // Page did not exist
                    if (Logging.connectors.isDebugEnabled())
                        Logging.connectors.debug("SharePoint: The page at " + baseUrl + site
                                + " did not exist; assuming library deleted");
                    return false;
                } else if (httpErrorCode.equals("401")) {
                    // User did not have permissions for this library to get the acls
                    if (Logging.connectors.isDebugEnabled())
                        Logging.connectors
                                .debug("SharePoint: The crawl user did not have access to list documents for "
                                        + baseUrl + site + "; skipping documents within");
                    return false;
                } else if (httpErrorCode.equals("403"))
                    throw new ManifoldCFException(
                            "Http error " + httpErrorCode + " while reading from " + baseUrl + site
                                    + " - check IIS and SharePoint security settings! " + e.getMessage(),
                            e);
                else
                    throw new ManifoldCFException("Unexpected http error code " + httpErrorCode
                            + " accessing SharePoint at " + baseUrl + site + ": " + e.getMessage(), e);
            }
            throw new ManifoldCFException("Unknown http error occurred: " + e.getMessage(), e);
        } else if (e.getFaultCode()
                .equals(new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/envelope/", "Server"))) {
            org.w3c.dom.Element elem = e.lookupFaultDetail(new javax.xml.namespace.QName(
                    "http://schemas.microsoft.com/sharepoint/soap/", "errorcode"));
            if (elem != null) {
                elem.normalize();
                String sharepointErrorCode = elem.getFirstChild().getNodeValue().trim();
                if (sharepointErrorCode.equals("0x82000006")) {
                    // List did not exist
                    if (Logging.connectors.isDebugEnabled())
                        Logging.connectors.debug("SharePoint: The list " + guid + " in site " + site
                                + " did not exist; assuming library deleted");
                    return false;
                } else {
                    if (Logging.connectors.isDebugEnabled()) {
                        org.w3c.dom.Element elem2 = e.lookupFaultDetail(new javax.xml.namespace.QName(
                                "http://schemas.microsoft.com/sharepoint/soap/", "errorstring"));
                        String errorString = "";
                        if (elem != null)
                            errorString = elem2.getFirstChild().getNodeValue().trim();

                        Logging.connectors.debug("SharePoint: Getting child documents for the list " + guid
                                + " in site " + site + " failed with unexpected SharePoint error code "
                                + sharepointErrorCode + ": " + errorString + " - Skipping", e);
                    }
                    return false;
                }
            }
            if (Logging.connectors.isDebugEnabled())
                Logging.connectors
                        .debug("SharePoint: Unknown SharePoint server error getting child documents for site "
                                + site + " guid " + guid + " - axis fault = " + e.getFaultCode().getLocalPart()
                                + ", detail = " + e.getFaultString() + " - retrying", e);

            throw new ServiceInterruption("Unknown SharePoint server error: " + e.getMessage() + " - retrying",
                    e, currentTime + 300000L, currentTime + 3 * 60 * 60000L, -1, false);
        }

        if (e.getFaultCode().equals(new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/envelope/",
                "Server.userException"))) {
            String exceptionName = e.getFaultString();
            if (exceptionName.equals("java.lang.InterruptedException"))
                throw new ManifoldCFException("Interrupted", ManifoldCFException.INTERRUPTED);
        }

        if (Logging.connectors.isDebugEnabled())
            Logging.connectors
                    .debug("SharePoint: Got an unknown remote exception getting child documents for site "
                            + site + " guid " + guid + " - axis fault = " + e.getFaultCode().getLocalPart()
                            + ", detail = " + e.getFaultString() + " - retrying", e);
        throw new ServiceInterruption("Remote procedure exception: " + e.getMessage(), e, currentTime + 300000L,
                currentTime + 3 * 60 * 60000L, -1, false);
    } catch (java.rmi.RemoteException e) {
        // We expect the axis exception to be thrown, not this generic one!
        // So, fail hard if we see it.
        if (Logging.connectors.isDebugEnabled())
            Logging.connectors
                    .debug("SharePoint: Got an unexpected remote exception getting child documents for site "
                            + site + " guid " + guid, e);
        throw new ManifoldCFException("Unexpected remote procedure exception: " + e.getMessage(), e);
    }
}

From source file:org.apache.manifoldcf.crawler.connectors.sharepoint.SPSProxyHelper.java

/**
* Gets a list of field values of the given document
* @param fieldNames//from ww  w.  j a v a 2 s .co  m
* @param site
* @param docId
* @return set of the field values
*/
public Map<String, String> getFieldValues(String[] fieldNames, String site, String docLibrary, String docId,
        boolean dspStsWorks) throws ManifoldCFException, ServiceInterruption {
    long currentTime;
    try {
        HashMap<String, String> result = new HashMap<String, String>();

        if (site.compareTo("/") == 0)
            site = ""; // root case

        if (dspStsWorks) {
            StsAdapterWS listService = new StsAdapterWS(baseUrl + site, userName, password, configuration,
                    httpClient);
            StsAdapterSoapStub stub = (StsAdapterSoapStub) listService.getStsAdapterSoapHandler();

            String[] vArray = new String[1];
            vArray[0] = "1.0";
            VersionsHeader myVersion = new VersionsHeader();
            myVersion.setVersion(vArray);

            stub.setHeader("http://schemas.microsoft.com/sharepoint/dsp", "versions", myVersion);

            RequestHeader reqHeader = new RequestHeader();
            reqHeader.setDocument(DocumentType.content);
            reqHeader.setMethod(MethodType.query);

            stub.setHeader("http://schemas.microsoft.com/sharepoint/dsp", "request", reqHeader);

            QueryRequest myRequest = new QueryRequest();

            DSQuery sQuery = new DSQuery();
            sQuery.setSelect("/list[@id='" + docLibrary + "']");
            sQuery.setResultContent(ResultContentType.dataOnly);
            myRequest.setDsQuery(sQuery);

            DspQuery spQuery = new DspQuery();
            spQuery.setRowLimit(1);
            // For the Requested Fields
            if (fieldNames.length > 0) {
                Fields spFields = new Fields();
                Field[] fieldArray = new Field[0];
                ArrayList fields = new ArrayList();

                Field spField = new Field();
                //                      spField.setName( "ID" );
                //                      spField.setAlias( "ID" );
                //                      fields.add( spField );

                for (String fieldName : fieldNames) {
                    spField = new Field();
                    spField.setName(fieldName);
                    spField.setAlias(fieldName);
                    fields.add(spField);
                }
                spFields.setField((Field[]) fields.toArray(fieldArray));
                spQuery.setFields(spFields);
            }
            // Of this document
            DspQueryWhere spWhere = new DspQueryWhere();

            org.apache.axis.message.MessageElement criterion = new org.apache.axis.message.MessageElement(
                    (String) null, "Contains");
            SOAPElement seFieldRef = criterion.addChildElement("FieldRef");
            seFieldRef.addAttribute(SOAPFactory.newInstance().createName("Name"), "FileRef");
            SOAPElement seValue = criterion.addChildElement("Value");
            seValue.addAttribute(SOAPFactory.newInstance().createName("Type"), "String");
            seValue.setValue(docId);

            org.apache.axis.message.MessageElement[] criteria = { criterion };
            spWhere.set_any(criteria);
            spQuery.setWhere((DspQueryWhere) spWhere);

            // Set Criteria
            myRequest.getDsQuery().setQuery(spQuery);

            StsAdapterSoap call = stub;

            // Make Request
            QueryResponse resp = call.query(myRequest);
            org.apache.axis.message.MessageElement[] list = resp.get_any();

            if (Logging.connectors.isDebugEnabled()) {
                Logging.connectors.debug("SharePoint: list xml: '" + list[0].toString() + "'");
            }

            XMLDoc doc = new XMLDoc(list[0].toString());
            ArrayList nodeList = new ArrayList();

            doc.processPath(nodeList, "*", null);
            if (nodeList.size() != 1) {
                throw new ManifoldCFException("Bad xml - missing outer 'ns1:dsQueryResponse' node - there are "
                        + Integer.toString(nodeList.size()) + " nodes");
            }

            Object parent = nodeList.get(0);
            //System.out.println( "Outer NodeName = " + doc.getNodeName(parent) );
            if (!doc.getNodeName(parent).equals("ns1:dsQueryResponse"))
                throw new ManifoldCFException("Bad xml - outer node is not 'ns1:dsQueryResponse'");

            nodeList.clear();
            doc.processPath(nodeList, "*", parent);

            parent = nodeList.get(0); // <Shared_X0020_Documents />

            nodeList.clear();
            doc.processPath(nodeList, "*", parent);

            // Process each result (Should only be one )
            // Get each childs Value and add to return array
            for (int i = 0; i < nodeList.size(); i++) {
                Object documentNode = nodeList.get(i);
                ArrayList fieldList = new ArrayList();

                doc.processPath(fieldList, "*", documentNode);
                for (int j = 0; j < fieldList.size(); j++) {
                    Object field = fieldList.get(j);
                    String fieldData = doc.getData(field);
                    String fieldName = doc.getNodeName(field);
                    // Right now this really only works right for single-valued fields.  For multi-valued
                    // fields, we'd need to know in advance that they were multivalued
                    // so that we could interpret commas as value separators.
                    result.put(fieldName, fieldData);
                }
            }
        } else {
            // SharePoint 2010: Get field values some other way
            // Sharepoint 2010; use Lists service instead
            ListsWS lservice = new ListsWS(baseUrl + site, userName, password, configuration, httpClient);
            ListsSoapStub stub1 = (ListsSoapStub) lservice.getListsSoapHandler();

            String sitePlusDocId = serverLocation + site + docId;
            if (sitePlusDocId.startsWith("/"))
                sitePlusDocId = sitePlusDocId.substring(1);

            GetListItemsQuery q = buildMatchQuery("FileRef", "Text", sitePlusDocId);
            GetListItemsViewFields viewFields = buildViewFields(fieldNames);

            GetListItemsResponseGetListItemsResult items = stub1.getListItems(docLibrary, "", q, viewFields,
                    "1", buildNonPagingQueryOptions(), null);
            if (items == null)
                return result;

            MessageElement[] list = items.get_any();

            if (Logging.connectors.isDebugEnabled()) {
                Logging.connectors.debug("SharePoint: getListItems for '" + docId + "' using FileRef value '"
                        + sitePlusDocId + "' xml response: '" + list[0].toString() + "'");
            }

            ArrayList nodeList = new ArrayList();
            XMLDoc doc = new XMLDoc(list[0].toString());

            doc.processPath(nodeList, "*", null);
            if (nodeList.size() != 1)
                throw new ManifoldCFException("Bad xml - expecting one outer 'ns1:listitems' node - there are "
                        + Integer.toString(nodeList.size()) + " nodes");

            Object parent = nodeList.get(0);
            if (!"ns1:listitems".equals(doc.getNodeName(parent)))
                throw new ManifoldCFException("Bad xml - outer node is not 'ns1:listitems'");

            nodeList.clear();
            doc.processPath(nodeList, "*", parent);

            if (nodeList.size() != 1)
                throw new ManifoldCFException("Expected rsdata result but no results found.");

            Object rsData = nodeList.get(0);

            int itemCount = Integer.parseInt(doc.getValue(rsData, "ItemCount"));
            if (itemCount == 0)
                return result;

            // Now, extract the files from the response document
            ArrayList nodeDocs = new ArrayList();

            doc.processPath(nodeDocs, "*", rsData);

            if (nodeDocs.size() != itemCount)
                throw new ManifoldCFException("itemCount does not match with nodeDocs.size()");

            if (itemCount != 1)
                throw new ManifoldCFException("Expecting only one item, instead saw '" + itemCount + "'");

            Object o = nodeDocs.get(0);

            // Look for all the specified attributes in the record
            for (Object attrName : fieldNames) {
                String attrValue = doc.getValue(o, "ows_" + (String) attrName);
                if (attrValue != null) {
                    result.put(attrName.toString(), valueMunge(attrValue));
                }
            }
        }

        return result;
    } catch (javax.xml.soap.SOAPException e) {
        throw new ManifoldCFException("Soap exception: " + e.getMessage(), e);
    } catch (java.net.MalformedURLException e) {
        throw new ManifoldCFException("Bad SharePoint url: " + e.getMessage(), e);
    } catch (javax.xml.rpc.ServiceException e) {
        if (Logging.connectors.isDebugEnabled())
            Logging.connectors.debug("SharePoint: Got a service exception getting field values for site " + site
                    + " library " + docLibrary + " document '" + docId + "' - retrying", e);
        currentTime = System.currentTimeMillis();
        throw new ServiceInterruption("Service exception: " + e.getMessage(), e, currentTime + 300000L,
                currentTime + 12 * 60 * 60000L, -1, true);
    } catch (org.apache.axis.AxisFault e) {
        if (e.getFaultCode().equals(new javax.xml.namespace.QName("http://xml.apache.org/axis/", "HTTP"))) {
            org.w3c.dom.Element elem = e.lookupFaultDetail(
                    new javax.xml.namespace.QName("http://xml.apache.org/axis/", "HttpErrorCode"));
            if (elem != null) {
                elem.normalize();
                String httpErrorCode = elem.getFirstChild().getNodeValue().trim();
                if (httpErrorCode.equals("404"))
                    return null;
                else if (httpErrorCode.equals("403"))
                    throw new ManifoldCFException("Remote procedure exception: " + e.getMessage(), e);
                else if (httpErrorCode.equals("401")) {
                    if (Logging.connectors.isDebugEnabled())
                        Logging.connectors.debug(
                                "SharePoint: Crawl user does not have sufficient privileges to get field values for site "
                                        + site + " library " + docLibrary + " - skipping",
                                e);
                    return null;
                }
                throw new ManifoldCFException("Unexpected http error code " + httpErrorCode
                        + " accessing SharePoint at " + baseUrl + site + ": " + e.getMessage(), e);
            }
            throw new ManifoldCFException("Unknown http error occurred: " + e.getMessage(), e);
        }

        if (e.getFaultCode().equals(new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/envelope/",
                "Server.userException"))) {
            String exceptionName = e.getFaultString();
            if (exceptionName.equals("java.lang.InterruptedException"))
                throw new ManifoldCFException("Interrupted", ManifoldCFException.INTERRUPTED);
        }

        // I don't know if this is what you get when the library is missing, but here's hoping.
        if (e.getMessage().indexOf("List does not exist") != -1)
            return null;

        if (Logging.connectors.isDebugEnabled())
            Logging.connectors.debug("SharePoint: Got a remote exception getting field values for site " + site
                    + " library " + docLibrary + " document [" + docId + "] - retrying", e);
        currentTime = System.currentTimeMillis();
        throw new ServiceInterruption("Remote procedure exception: " + e.getMessage(), e, currentTime + 300000L,
                currentTime + 3 * 60 * 60000L, -1, false);
    } catch (java.rmi.RemoteException e) {
        throw new ManifoldCFException("Unexpected remote exception occurred: " + e.getMessage(), e);
    }
}