Как получить доступ к активу на этапе рабочего процесса

Я пытаюсь написать рабочий процесс process step для DAM update asset таким образом, чтобы загруженный актив был отправлен во внешнюю службу, которая изменит актив, а затем измененный актив может быть отправлен на шаг Metadata extraction. Поэтому я добавил свой шаг процесса в актив обновления DAM следующим образом:

введите здесь описание изображения

И мой код пока выглядит так:

public void execute(WorkItem item, WorkflowSession wfsession,MetaDataMap args) throws WorkflowException {
    try
    {
        log.info("Here2 in execute method");    //ensure that the execute method is invoked

        final Map<String, Object> map = new HashMap<String, Object>();
        map.put( "user.jcr.session", wfsession.getSession());

        ResourceResolver rr = resolverFactory.getResourceResolver(map);
        String path = item.getWorkflowData().getPayload().toString();
        log.info("Here2 path: " + path);
        Resource resource = rr.getResource(path);
        log.info("Here2 resource: " + resource);
        InputStream is = resource.adaptTo(InputStream.class);
        log.info("Here2 assets IS: " + is);
    }

    catch (Exception e)
    {
        log.info("Here Error");
        e.printStackTrace();
    }
}

Вот что я вижу в логах, когда загружаю ресурс:

Здесь2 в методе выполнения Здесь2 путь: /content/dam/photo1.JPG/jcr:content/renditions/original Здесь2 ресурс: null

Вопрос

  • У моей внешней службы есть API, принимающий запросы по HTTP. Как я должен отправить актив внешней службе?
  • Как только внешняя служба изменит ресурс, что мне следует сделать, чтобы на этапе извлечения метаданных считывался измененный ресурс вместо исходного?

person Anthony    schedule 29.06.2014    source источник


Ответы (1)


Чтобы получить доступ к вашему внешнему сервису через HTTP, вам нужно написать клиент. CQ предоставляет пакет commons-httpclient, и вы можете использовать его для доступа к сервису. Документацию по библиотеке можно найти здесь. Я не знаю, ожидает ли служба, что файл будет отправлен с помощью PUT или POST, но httpclient предоставляет все эти методы. Все, что вам нужно сделать, это предоставить соответствующие InputStream. Адаптируйте свой ресурс к Rendition и используйте метод getStream(), чтобы получить файл InputStream.

Когда вы получите измененный ресурс из веб-сервиса, вам необходимо заменить исходный:

// rendition = ...;      // original rendition object created as above
// newInputStream = ...; // new asset received from your webservice
Asset asset = rendition.getAsset();
asset.addRendition("original", newInputStream, rendition.getMimeType());
person Tomek Rękawek    schedule 29.06.2014