如何使用 rest API 在户外签出和签入任何文件?

How to checkout and checkin any document outside alfresco using rest API?

我已经使用 Servlet 和 JSP 创建了一个 Web 应用程序。通过它我已经连接到露天存储库。我还可以在 Alfresco 中上传文档并在外部 Web 应用程序中查看文档。

现在我的要求是,我必须为这些文件提供签入和签出选项。

我在下面找到了这个目的的 rest api。 但是我不知道如何在 servlet 中使用这些 api 来满足我的要求。

POST /alfresco/service/slingshot/doclib/action/cancel-checkout/site/{site}/{container}/{path}


POST /alfresco/service/slingshot/doclib/action/cancel-checkout/node/{store_type}/{store_id}/{id}

任何人都可以提供简单的步骤或一些代码来完成这项任务吗?

提前致谢。

请不要为此使用内部弹弓 URL。相反,使用来自 Apache Chemistry 的 OpenCMIS。它将为您节省大量时间和麻烦,并且它更易于移植到除 Alfresco 之外的其他存储库。

下面的示例通过路径抓取现有文档,执行签出,然后签入纯文本文档的新主要版本。

package com.someco.cmis.examples;

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.chemistry.opencmis.client.api.Document;
import org.apache.chemistry.opencmis.client.api.ObjectId;
import org.apache.chemistry.opencmis.client.api.Repository;
import org.apache.chemistry.opencmis.client.api.Session;
import org.apache.chemistry.opencmis.client.api.SessionFactory;
import org.apache.chemistry.opencmis.client.runtime.SessionFactoryImpl;
import org.apache.chemistry.opencmis.commons.SessionParameter;
import org.apache.chemistry.opencmis.commons.data.ContentStream;
import org.apache.chemistry.opencmis.commons.enums.BindingType;

public class CheckoutCheckinExample {
    private String serviceUrl = "http://localhost:8080/alfresco/api/-default-/public/cmis/versions/1.1/atom"; // Uncomment for Atom Pub binding
    private Session session = null;

    public static void main(String[] args) {
        CheckoutCheckinExample cce = new CheckoutCheckinExample();
        cce.doExample();
    }

    public void doExample() {
        Document doc = (Document) getSession().getObjectByPath("/test/test-plain-1.txt");
        String fileName = doc.getName();
        ObjectId pwcId = doc.checkOut(); // Checkout the document
        Document pwc = (Document) getSession().getObject(pwcId); // Get the working copy

        // Set up an updated content stream
        String docText = "This is a new major version.";
        byte[] content = docText.getBytes();
        InputStream stream = new ByteArrayInputStream(content);
        ContentStream contentStream = session.getObjectFactory().createContentStream(fileName, Long.valueOf(content.length), "text/plain", stream);

        // Check in the working copy as a major version with a comment
        ObjectId updatedId = pwc.checkIn(true, null, contentStream, "My new version comment");
        doc = (Document) getSession().getObject(updatedId);
        System.out.println("Doc is now version: " + doc.getProperty("cmis:versionLabel").getValueAsString());
    }

    public Session getSession() {

        if (session == null) {
            // default factory implementation
            SessionFactory factory = SessionFactoryImpl.newInstance();
            Map<String, String> parameter = new HashMap<String, String>();

            // user credentials
            parameter.put(SessionParameter.USER, "admin"); // <-- Replace
            parameter.put(SessionParameter.PASSWORD, "admin"); // <-- Replace

            // connection settings
            parameter.put(SessionParameter.ATOMPUB_URL, this.serviceUrl); // Uncomment for Atom Pub binding
            parameter.put(SessionParameter.BINDING_TYPE, BindingType.ATOMPUB.value()); // Uncomment for Atom Pub binding

            List<Repository> repositories = factory.getRepositories(parameter);

            this.session = repositories.get(0).createSession();
        }
        return this.session;
    }
}

请注意,在我使用 (5.1.e) 测试的 Alfresco 版本上,文档必须已经应用了版本化方面才能使版本标签递增,否则签入将简单地覆盖原始文件。