【问题标题】:How to query the Alfresco Audit Service in Java如何在 Java 中查询 Alfresco 审计服务
【发布时间】:2017-07-14 23:22:54
【问题描述】:

我可以使用此查询轻松查询Alfresco audit 日志in REST

http://localhost:8080/alfresco/service/api/audit/query/audit-custom?verbose=true

但是如何在 Alfresco 模块中用 Java 执行相同的请求呢?
它必须是同步的。

一个懒惰的解决方案是在 Java 中调用 REST URL,但它可能效率低下,更重要的是它需要我在某处存储管理员密码。

我注意到AuditService 有一个auditQuery 方法,所以我试图调用它。不幸的是,它似乎是用于异步操作?我不需要回调,因为我需要等到查询的数据准备好才能继续下一步。

【问题讨论】:

  • 阅读你正在调用的 webscript 的源代码,看看它是怎么做的? (Alfresco 很容易开源,所以你可以!)
  • @Gagravarr:完成,谢谢! :-)

标签: java alfresco audit


【解决方案1】:

这是我的实现,大部分是从the source code of the REST API复制过来的:

int maxResults = 10000;
if (!auditService.isAuditEnabled(AUDIT_APPLICATION, ("/" + AUDIT_APPLICATION))) {
    throw new WebScriptException(
        "Auditing for " + AUDIT_APPLICATION + " is disabled!");
}
final List<Map<String, Object>> entries =
    new ArrayList<Map<String,Object>>(limit);
AuditQueryCallback callback = new AuditQueryCallback() {
    @Override
    public boolean valuesRequired() {
        return true; // true = verbose
    }

    @Override
    public boolean handleAuditEntryError(
            Long entryId, String errorMsg, Throwable error) {
        return true;
    }

    @Override
    public boolean handleAuditEntry(
            Long entryId,
            String applicationName,
            String user,
            long time,
            Map<String, Serializable> values) {
                        // Convert values to Strings
            Map<String, String> valueStrings =
                new HashMap<String, String>(values.size() * 2);
            for (Map.Entry<String, Serializable> mapEntry : values.entrySet()) {
                String key = mapEntry.getKey();
                Serializable value = mapEntry.getValue();
                try {
                    String valueString = DefaultTypeConverter.INSTANCE.convert(
                        String.class, value);
                    valueStrings.put(key, valueString);
                }
                catch (TypeConversionException e) {
                    // Use the toString()
                    valueStrings.put(key, value.toString());
                }

            }
            entry.put(JSON_KEY_ENTRY_VALUES, valueStrings);
        }
        entries.add(entry);
        return true;
    }
};

AuditQueryParameters params = new AuditQueryParameters();
params.setApplicationName(AUDIT_APPLICATION);
params.setForward(true);

auditService.auditQuery(callback, params, maxResults);

虽然回调可能看起来是异步的,但实际上并非如此。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-24
    • 1970-01-01
    • 2011-08-09
    • 2011-08-24
    • 2018-06-21
    • 1970-01-01
    相关资源
    最近更新 更多