2017-02-24 44 views
1

我可以用這個查詢方便地查詢Alfresco audit日誌in REST如何查詢露天審計服務在Java中

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

但如何執行在Java中Alfresco的模塊內相同的請求?
它必須是同步的。

懶惰的解決方案是在Java中調用REST URL,但它可能效率低下,更重要的是它需要我在某處存儲管理員的密碼。

我注意到AuditService有一個auditQuery方法,所以我試圖調用它。不幸的是,它似乎是異步操作?我不需要回調,因爲在繼續下一步之前,我需要等待查詢數據準備就緒。

+0

閱讀你打電話給webscript的源代碼,看看它是如何做到的? (Alfresco是開源的,所以你可以!) – Gagravarr

+0

@Gagravarr:完成,謝謝! :-) –

回答

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); 

雖然回調可能看起來是異步的,事實並非如此。