Как проверить и зарегистрировать любой документ за пределами alfresco, используя API для отдыха?

Я создал одно веб-приложение, используя сервлеты и JSP. Через него я подключился к репозиторию alfresco. Я также могу загрузить документ в Alfresco и просмотреть документ во внешнем веб-приложении.

Теперь мое требование состоит в том, что я должен предоставить возможность проверки и проверки для этих документов.

Я нашел ниже остальных apis для этой цели. Но я не понимаю, как использовать эти 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}

Может ли кто-нибудь предоставить простые шаги или фрагмент кода для выполнения этой задачи?

Заранее спасибо.


person Deepak Talape    schedule 29.08.2016    source источник
comment
Как вы подключаетесь к Alfresco?   -  person Gagravarr    schedule 29.08.2016
comment
вы тестировали свой остальной API?!? всегда хорошо сделать это до начала кодирования   -  person Yagami Light    schedule 29.08.2016
comment
Привет, Гаграварр, я подключаюсь к alfresco с помощью Java CMIS.   -  person Deepak Talape    schedule 29.08.2016
comment
Привет, Ягами, здесь сам alfresco предоставляет API отдыха для проверки и регистрации. Но я не понимаю, как и где мне использовать этот API. Вот почему задал этот вопрос.   -  person Deepak Talape    schedule 29.08.2016
comment
Хорошо, я понимаю вашу проблему, мы будем работать с шагами. Первый шаг: вы загрузили библиотеку Chimestry openCMIS и включили ее в свой проект?   -  person Yagami Light    schedule 29.08.2016
comment
Да, я скачал его. А также я могу загружать репозиторий документов и изменять свойства документа. Я также могу создать папку в репозитории. И у меня также есть ссылка на узел документа, теперь я просто хочу отредактировать этот документ, и после редактирования мне нужно загрузить копию этого документа в репозиторий.   -  person Deepak Talape    schedule 29.08.2016
comment
вы можете работать с другой версией, что означает, что это тот же документ, но содержание немного отличается, вы можете увидеть это в идентификаторе документа (с какой версией вы работаете, если это 1.0, это первая, если это 1.1, это вторая)   -  person Yagami Light    schedule 29.08.2016
comment
пожалуйста, используйте обозначение @, чтобы отправить мне уведомление, если вы прокомментируете @deeps   -  person Yagami Light    schedule 29.08.2016


Ответы (1)


Пожалуйста, не используйте для этого внутренние URL-адреса рогатки. Вместо этого используйте OpenCMIS от Apache Chemistry. Это сэкономит вам много времени и головной боли, а также будет более переносимым на другие репозитории, помимо 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;
    }
}

Обратите внимание, что в версии Alfresco, которую я тестировал с (5.1.e), к документу уже должен быть применен версионный аспект, чтобы метка версии увеличивалась, в противном случае регистрация просто переопределит оригинал.

person Jeff Potts    schedule 29.08.2016
comment
Я использовал этот код, но здесь вы заменяете содержимое предыдущего документа новой строкой. ObjectId updatedId = pwc.checkIn(true, null, contentStream, комментарий к моей новой версии); Но по моему требованию я хочу загрузить новую копию документа из пользовательского веб-приложения. Итак, как я могу использовать файловый объект или входной поток вместо строки. - person Deepak Talape; 30.08.2016
comment
Привет всем, приведенное выше решение очень хорошее, но у меня возникает проблема с методом checkIn(). На самом деле я редактирую файл в автономном режиме и загружаю новый файл. поэтому у меня есть прямой файловый объект, или я могу использовать входной поток. Но в методе checkIn() последним параметром является String. Итак, как я могу сделать. ответьте, пожалуйста - person Deepak Talape; 30.08.2016
comment
Строка с текстом «Комментарий к моей новой версии» является комментарием регистрации, а не содержимым. Обновленное содержимое находится в предыдущем блоке, где объявляется docText, а затем преобразуется в InputStream. Итак, если у вас есть новый файл для регистрации, просто получите его InputStream, как и в любом другом коде Java, а затем используйте его для создания ContentStream, как показано. - person Jeff Potts; 30.08.2016
comment
Хорошо понял. Большое спасибо - person Deepak Talape; 30.08.2016
comment
Привет, здесь. В версии я автоматически 2.0 после 1.0, но я также ищу второстепенную версию, например 1.1 после 1.0. Как я могу добиться этого с помощью приведенного выше кода. Пожалуйста помоги - person Deepak Talape; 07.09.2016
comment
Этот первый логический аргумент метода checkIn указывает серверу создать основную версию. Вместо этого используйте false, чтобы создать дополнительную версию. - person Jeff Potts; 07.09.2016