(7);
}
/**
@@ -209,7 +209,7 @@ public class AuditModelRegistry
{
auditModels.clear();
auditApplicationsByName.clear();
- auditModelIdsByApplicationsName.clear();
+ auditApplicationIdsByApplicationsName.clear();
}
/**
@@ -271,17 +271,17 @@ public class AuditModelRegistry
}
/**
- * Get the ID of the persisted audit model for the given application name
+ * Get the ID of the persisted audit application for the given application name
*
* @param applicationName the name of the audited application
- * @return the unique ID of the persisted model (null if not found)
+ * @return the unique ID of the persisted application (null if not found)
*/
- public Long getAuditModelId(String applicationName)
+ public Long getAuditApplicationId(String applicationName)
{
readLock.lock();
try
{
- return auditModelIdsByApplicationsName.get(applicationName);
+ return auditApplicationIdsByApplicationsName.get(applicationName);
}
finally
{
@@ -514,9 +514,13 @@ public class AuditModelRegistry
{
throw new AuditModelException("Audit application '" + name + "' has already been defined.");
}
+
+ // Get the ID of the application
+ Long appId = auditDAO.getOrCreateAuditApplication(auditModelId, name);
+
AuditApplication wrapperApp = new AuditApplication(dataExtractorsByName, dataGeneratorsByName, application);
auditApplicationsByName.put(name, wrapperApp);
- auditModelIdsByApplicationsName.put(name, auditModelId);
+ auditApplicationIdsByApplicationsName.put(name, appId);
}
// Store the model itself
auditModels.add(audit);
diff --git a/source/java/org/alfresco/repo/audit/model/_3/GenerateValue.java b/source/java/org/alfresco/repo/audit/model/_3/GenerateValue.java
index 60caf6d316..8fcd9206d5 100644
--- a/source/java/org/alfresco/repo/audit/model/_3/GenerateValue.java
+++ b/source/java/org/alfresco/repo/audit/model/_3/GenerateValue.java
@@ -17,7 +17,6 @@ import javax.xml.bind.annotation.XmlType;
* <complexContent>
* <extension base="{http://www.alfresco.org/repo/audit/model/3.2}KeyedAuditDefinition">
* <attribute name="dataGenerator" use="required" type="{http://www.alfresco.org/repo/audit/model/3.2}NameAttribute" />
- * <attribute name="scope" use="required" type="{http://www.alfresco.org/repo/audit/model/3.2}ScopeAttribute" />
* </extension>
* </complexContent>
* </complexType>
@@ -33,8 +32,6 @@ public class GenerateValue
@XmlAttribute(required = true)
protected String dataGenerator;
- @XmlAttribute(required = true)
- protected ScopeAttribute scope;
/**
* Gets the value of the dataGenerator property.
@@ -60,28 +57,4 @@ public class GenerateValue
this.dataGenerator = value;
}
- /**
- * Gets the value of the scope property.
- *
- * @return
- * possible object is
- * {@link ScopeAttribute }
- *
- */
- public ScopeAttribute getScope() {
- return scope;
- }
-
- /**
- * Sets the value of the scope property.
- *
- * @param value
- * allowed object is
- * {@link ScopeAttribute }
- *
- */
- public void setScope(ScopeAttribute value) {
- this.scope = value;
- }
-
}
diff --git a/source/java/org/alfresco/repo/audit/model/_3/ObjectFactory.java b/source/java/org/alfresco/repo/audit/model/_3/ObjectFactory.java
index 2828f80fd4..72c534043c 100644
--- a/source/java/org/alfresco/repo/audit/model/_3/ObjectFactory.java
+++ b/source/java/org/alfresco/repo/audit/model/_3/ObjectFactory.java
@@ -34,11 +34,11 @@ public class ObjectFactory {
}
/**
- * Create an instance of {@link KeyedAuditDefinition }
+ * Create an instance of {@link RecordValue }
*
*/
- public KeyedAuditDefinition createKeyedAuditDefinition() {
- return new KeyedAuditDefinition();
+ public RecordValue createRecordValue() {
+ return new RecordValue();
}
/**
@@ -57,14 +57,6 @@ public class ObjectFactory {
return new Audit();
}
- /**
- * Create an instance of {@link DataExtractors }
- *
- */
- public DataExtractors createDataExtractors() {
- return new DataExtractors();
- }
-
/**
* Create an instance of {@link AuditPath }
*
@@ -90,11 +82,11 @@ public class ObjectFactory {
}
/**
- * Create an instance of {@link RecordValue }
+ * Create an instance of {@link KeyedAuditDefinition }
*
*/
- public RecordValue createRecordValue() {
- return new RecordValue();
+ public KeyedAuditDefinition createKeyedAuditDefinition() {
+ return new KeyedAuditDefinition();
}
/**
@@ -113,6 +105,14 @@ public class ObjectFactory {
return new GenerateValue();
}
+ /**
+ * Create an instance of {@link DataExtractors }
+ *
+ */
+ public DataExtractors createDataExtractors() {
+ return new DataExtractors();
+ }
+
/**
* Create an instance of {@link JAXBElement }{@code <}{@link Audit }{@code >}}
*
diff --git a/source/java/org/alfresco/repo/audit/model/_3/ScopeAttribute.java b/source/java/org/alfresco/repo/audit/model/_3/ScopeAttribute.java
deleted file mode 100644
index 029bcb2971..0000000000
--- a/source/java/org/alfresco/repo/audit/model/_3/ScopeAttribute.java
+++ /dev/null
@@ -1,40 +0,0 @@
-
-package org.alfresco.repo.audit.model._3;
-
-import javax.xml.bind.annotation.XmlEnum;
-import javax.xml.bind.annotation.XmlType;
-
-
-/**
- * Java class for ScopeAttribute.
- *
- *
The following schema fragment specifies the expected content contained within this class.
- *
- *
- * <simpleType name="ScopeAttribute">
- * <restriction base="{http://www.w3.org/2001/XMLSchema}string">
- * <enumeration value="SESSION"/>
- * <enumeration value="AUDIT"/>
- * <enumeration value="ALL"/>
- * </restriction>
- * </simpleType>
- *
- *
- */
-@XmlType(name = "ScopeAttribute")
-@XmlEnum
-public enum ScopeAttribute {
-
- SESSION,
- AUDIT,
- ALL;
-
- public String value() {
- return name();
- }
-
- public static ScopeAttribute fromValue(String v) {
- return valueOf(v);
- }
-
-}
diff --git a/source/java/org/alfresco/repo/domain/audit/AbstractAuditDAOImpl.java b/source/java/org/alfresco/repo/domain/audit/AbstractAuditDAOImpl.java
index 211c7fde54..34ca5c054f 100644
--- a/source/java/org/alfresco/repo/domain/audit/AbstractAuditDAOImpl.java
+++ b/source/java/org/alfresco/repo/domain/audit/AbstractAuditDAOImpl.java
@@ -56,7 +56,7 @@ import org.apache.commons.logging.LogFactory;
*/
public abstract class AbstractAuditDAOImpl implements AuditDAO
{
- private static final Log logger = LogFactory.getLog(AbstractAuditDAOImpl.class);
+ protected final Log logger = LogFactory.getLog(this.getClass());
private HibernateAuditDAO oldDAO;
private ContentService contentService;
@@ -83,6 +83,11 @@ public abstract class AbstractAuditDAOImpl implements AuditDAO
this.propertyValueDAO = propertyValueDAO;
}
+ protected PropertyValueDAO getPropertyValueDAO()
+ {
+ return this.propertyValueDAO;
+ }
+
/*
* Support for older audit DAO
*/
@@ -196,34 +201,42 @@ public abstract class AbstractAuditDAOImpl implements AuditDAO
protected abstract AuditModelEntity createAuditModel(Long contentDataId, long crc);
/*
- * alf_audit_session
+ * alf_audit_application
*/
-
- public Long createAuditSession(Long modelId, String application)
+
+ public Long getOrCreateAuditApplication(Long modelId, String application)
{
- // Persist the string
- Long appNameId = propertyValueDAO.getOrCreatePropertyValue(application).getFirst();
- // Create the audit session
- AuditSessionEntity entity = createAuditSession(appNameId, modelId);
- // Done
- if (logger.isDebugEnabled())
+ // Search for it
+ AuditApplicationEntity entity = getAuditApplicationByModelIdAndName(modelId, application);
+ if (entity == null)
{
- logger.debug(
- "Created new audit session: \n" +
- " Model: " + modelId + "\n" +
- " App: " + application + "\n" +
- " Result: " + entity);
+ // Create it
+ // Persist the string
+ Long appNameId = propertyValueDAO.getOrCreatePropertyValue(application).getFirst();
+ // Create the audit session
+ entity = createAuditApplication(modelId, appNameId);
+ // Done
+ if (logger.isDebugEnabled())
+ {
+ logger.debug(
+ "Created new audit application: \n" +
+ " Model: " + modelId + "\n" +
+ " App: " + application + "\n" +
+ " Result: " + entity);
+ }
}
+ // Done
return entity.getId();
}
-
- protected abstract AuditSessionEntity createAuditSession(Long appNameId, Long modelId);
+
+ protected abstract AuditApplicationEntity getAuditApplicationByModelIdAndName(Long modelId, String appName);
+ protected abstract AuditApplicationEntity createAuditApplication(Long modelId, Long appNameId);
/*
* alf_audit_entry
*/
- public Long createAuditEntry(Long sessionId, long time, String username, Map values)
+ public Long createAuditEntry(Long applicationId, long time, String username, Map values)
{
final Long usernameId;
if (username != null)
@@ -242,20 +255,20 @@ public abstract class AbstractAuditDAOImpl implements AuditDAO
}
// Create the audit entry
- AuditEntryEntity entity = createAuditEntry(sessionId, time, usernameId, valuesId);
+ AuditEntryEntity entity = createAuditEntry(applicationId, time, usernameId, valuesId);
// Done
if (logger.isDebugEnabled())
{
logger.debug(
"Created new audit entry: \n" +
- " Session: " + sessionId + "\n" +
- " Time: " + (new Date(time)) + "\n" +
- " User: " + username + "\n" +
- " Result: " + entity);
+ " Application: " + applicationId + "\n" +
+ " Time: " + (new Date(time)) + "\n" +
+ " User: " + username + "\n" +
+ " Result: " + entity);
}
return entity.getId();
}
- protected abstract AuditEntryEntity createAuditEntry(Long sessionId, long time, Long usernameId, Long valuesId);
+ protected abstract AuditEntryEntity createAuditEntry(Long applicationId, long time, Long usernameId, Long valuesId);
}
diff --git a/source/java/org/alfresco/repo/domain/audit/AuditSessionEntity.java b/source/java/org/alfresco/repo/domain/audit/AuditApplicationEntity.java
similarity index 89%
rename from source/java/org/alfresco/repo/domain/audit/AuditSessionEntity.java
rename to source/java/org/alfresco/repo/domain/audit/AuditApplicationEntity.java
index 3036891da3..4205fb8f62 100644
--- a/source/java/org/alfresco/repo/domain/audit/AuditSessionEntity.java
+++ b/source/java/org/alfresco/repo/domain/audit/AuditApplicationEntity.java
@@ -25,18 +25,18 @@
package org.alfresco.repo.domain.audit;
/**
- * Entity bean for alf_audit_session table.
+ * Entity bean for alf_audit_application table.
*
* @author Derek Hulley
* @since 3.2
*/
-public class AuditSessionEntity
+public class AuditApplicationEntity
{
private Long id;
- private Long applicationNameId;
private Long auditModelId;
+ private Long applicationNameId;
- public AuditSessionEntity()
+ public AuditApplicationEntity()
{
}
@@ -44,10 +44,10 @@ public class AuditSessionEntity
public String toString()
{
StringBuilder sb = new StringBuilder(512);
- sb.append("AuditSessionEntity")
+ sb.append("AuditApplicationEntity")
.append("[ ID=").append(id)
- .append(", applicationNameId=").append(applicationNameId)
.append(", auditModelId=").append(auditModelId)
+ .append(", applicationNameId=").append(applicationNameId)
.append("]");
return sb.toString();
}
diff --git a/source/java/org/alfresco/repo/domain/audit/AuditDAO.java b/source/java/org/alfresco/repo/domain/audit/AuditDAO.java
index aa2d923095..983edd27c0 100644
--- a/source/java/org/alfresco/repo/domain/audit/AuditDAO.java
+++ b/source/java/org/alfresco/repo/domain/audit/AuditDAO.java
@@ -75,22 +75,22 @@ public interface AuditDAO
Pair getOrCreateAuditModel(URL url);
/**
- * Creates a new audit session entry - there is no session re-use.
+ * Creates a new audit application or finds an existing one
*
- * @param modelId an existing audit model ID
- * @param application the name of the application
- * @return Returns the unique session ID
+ * @param modelId the ID of the model configuration
+ * @param applicationName the name of the application
+ * @return Returns the ID of the application entry
*/
- Long createAuditSession(Long modelId, String application);
+ Long getOrCreateAuditApplication(Long modelId, String applicationName);
/**
* Create a new audit entry with the given map of values.
*
- * @param sessionId an existing audit session ID
+ * @param applicationId an existing audit application ID
* @param time the time (ms since epoch) to log the entry against
* @param username the authenticated user (null if not present)
* @param values the values to record
* @return Returns the unique entry ID
*/
- Long createAuditEntry(Long sessionId, long time, String username, Map values);
-}
+ Long createAuditEntry(Long applicationId, long time, String username, Map values);
+}
\ No newline at end of file
diff --git a/source/java/org/alfresco/repo/domain/audit/AuditDAOTest.java b/source/java/org/alfresco/repo/domain/audit/AuditDAOTest.java
index bd23769c3d..5dda720e64 100644
--- a/source/java/org/alfresco/repo/domain/audit/AuditDAOTest.java
+++ b/source/java/org/alfresco/repo/domain/audit/AuditDAOTest.java
@@ -88,7 +88,7 @@ public class AuditDAOTest extends TestCase
assertEquals(configPair, configPairCheck);
}
- public void testAuditSession() throws Exception
+ public void testAuditApplicatoin() throws Exception
{
final File file = AbstractContentTransformerTest.loadQuickTestFile("pdf");
assertNotNull(file);
@@ -104,22 +104,22 @@ public class AuditDAOTest extends TestCase
final String appName = getName() + "." + System.currentTimeMillis();
final int count = 1000;
- RetryingTransactionCallback createSessionCallback = new RetryingTransactionCallback()
+ RetryingTransactionCallback createAppCallback = new RetryingTransactionCallback()
{
public Void execute() throws Throwable
{
for (int i = 0; i < count; i++)
{
- auditDAO.createAuditSession(modelId, appName);
+ auditDAO.getOrCreateAuditApplication(modelId, appName);
}
return null;
}
};
long before = System.nanoTime();
- txnHelper.doInTransaction(createSessionCallback);
+ txnHelper.doInTransaction(createAppCallback);
long after = System.nanoTime();
System.out.println(
- "Time for " + count + " session creations was " +
+ "Time for " + count + " application creations was " +
((double)(after - before)/(10E6)) + "ms");
}
@@ -130,15 +130,15 @@ public class AuditDAOTest extends TestCase
final URL url = new URL("file:" + file.getAbsolutePath());
final String appName = getName() + "." + System.currentTimeMillis();
- RetryingTransactionCallback createSessionCallback = new RetryingTransactionCallback()
+ RetryingTransactionCallback createAppCallback = new RetryingTransactionCallback()
{
public Long execute() throws Throwable
{
Long modelId = auditDAO.getOrCreateAuditModel(url).getFirst();
- return auditDAO.createAuditSession(modelId, appName);
+ return auditDAO.getOrCreateAuditApplication(modelId, appName);
}
};
- final Long sessionId = txnHelper.doInTransaction(createSessionCallback);
+ final Long sessionId = txnHelper.doInTransaction(createAppCallback);
final int count = 1000;
final String username = "alexi";
diff --git a/source/java/org/alfresco/repo/domain/audit/AuditEntryEntity.java b/source/java/org/alfresco/repo/domain/audit/AuditEntryEntity.java
index f289d1758a..dd0275f658 100644
--- a/source/java/org/alfresco/repo/domain/audit/AuditEntryEntity.java
+++ b/source/java/org/alfresco/repo/domain/audit/AuditEntryEntity.java
@@ -35,7 +35,7 @@ import java.util.Date;
public class AuditEntryEntity
{
private Long id;
- private Long auditSessionId;
+ private Long auditApplicationId;
private Long auditUserId;
private long auditTime;
private Long auditValuesId;
@@ -50,7 +50,7 @@ public class AuditEntryEntity
StringBuilder sb = new StringBuilder(512);
sb.append("AuditEntryEntity")
.append("[ ID=").append(id)
- .append(", auditSessionId=").append(auditSessionId)
+ .append(", auditApplicationId=").append(auditApplicationId)
.append(", auditTime").append(new Date(auditTime))
.append(", auditValuesId=").append(auditValuesId)
.append("]");
@@ -67,14 +67,14 @@ public class AuditEntryEntity
this.id = id;
}
- public Long getAuditSessionId()
+ public Long getAuditApplicationId()
{
- return auditSessionId;
+ return auditApplicationId;
}
- public void setAuditSessionId(Long auditSessionId)
+ public void setAuditApplicationId(Long auditSessionId)
{
- this.auditSessionId = auditSessionId;
+ this.auditApplicationId = auditSessionId;
}
public Long getAuditUserId()
diff --git a/source/java/org/alfresco/repo/domain/audit/ibatis/AuditDAOImpl.java b/source/java/org/alfresco/repo/domain/audit/ibatis/AuditDAOImpl.java
index c293eedac7..78b96bbca2 100644
--- a/source/java/org/alfresco/repo/domain/audit/ibatis/AuditDAOImpl.java
+++ b/source/java/org/alfresco/repo/domain/audit/ibatis/AuditDAOImpl.java
@@ -24,10 +24,16 @@
*/
package org.alfresco.repo.domain.audit.ibatis;
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
import org.alfresco.repo.domain.audit.AbstractAuditDAOImpl;
+import org.alfresco.repo.domain.audit.AuditApplicationEntity;
import org.alfresco.repo.domain.audit.AuditEntryEntity;
import org.alfresco.repo.domain.audit.AuditModelEntity;
-import org.alfresco.repo.domain.audit.AuditSessionEntity;
+import org.alfresco.util.Pair;
import org.springframework.orm.ibatis.SqlMapClientTemplate;
/**
@@ -41,7 +47,8 @@ public class AuditDAOImpl extends AbstractAuditDAOImpl
private static final String SELECT_MODEL_BY_CRC = "select.AuditModelByCrc";
private static final String INSERT_MODEL = "insert.AuditModel";
- private static final String INSERT_SESSION = "insert.AuditSession";
+ private static final String SELECT_APPLICATION_BY_MODEL_ID = "select.AuditApplicationByModelId";
+ private static final String INSERT_APPLICATION = "insert.AuditApplication";
private static final String INSERT_ENTRY = "insert.AuditEntry";
@@ -75,22 +82,59 @@ public class AuditDAOImpl extends AbstractAuditDAOImpl
return entity;
}
+ @SuppressWarnings("unchecked")
@Override
- protected AuditSessionEntity createAuditSession(Long appNameId, Long modelId)
+ protected AuditApplicationEntity getAuditApplicationByModelIdAndName(Long modelId, String appName)
{
- AuditSessionEntity entity = new AuditSessionEntity();
- entity.setApplicationNameId(appNameId);
+ Map params = new HashMap(11);
+ params.put("id", modelId);
+ List results = (List) template.queryForList(
+ SELECT_APPLICATION_BY_MODEL_ID,
+ params);
+ // There could be multiple hits for the model ID. Go through them and find the correct app name.
+ AuditApplicationEntity result = null;
+ for (AuditApplicationEntity row : results)
+ {
+ Long appNameId = row.getApplicationNameId();
+ Pair propPair = getPropertyValueDAO().getPropertyValueById(appNameId);
+ if (propPair == null)
+ {
+ // There is a FK to protect against this, but we'll just log it
+ logger.warn("An audit application references a non-existent app_name_id: " + appNameId);
+ }
+ // Check for exact match
+ Serializable propValue = propPair.getSecond();
+ if (propValue instanceof String && propValue.equals(appName))
+ {
+ // Got it
+ result = row;
+ break;
+ }
+ }
+ // Done
+ if (logger.isDebugEnabled())
+ {
+ logger.debug("Searched for audit application with model id " + modelId + " and found: " + result);
+ }
+ return result;
+ }
+
+ @Override
+ protected AuditApplicationEntity createAuditApplication(Long modelId, Long appNameId)
+ {
+ AuditApplicationEntity entity = new AuditApplicationEntity();
entity.setAuditModelId(modelId);
- Long id = (Long) template.insert(INSERT_SESSION, entity);
+ entity.setApplicationNameId(appNameId);
+ Long id = (Long) template.insert(INSERT_APPLICATION, entity);
entity.setId(id);
return entity;
}
@Override
- protected AuditEntryEntity createAuditEntry(Long sessionId, long time, Long usernameId, Long valuesId)
+ protected AuditEntryEntity createAuditEntry(Long applicationId, long time, Long usernameId, Long valuesId)
{
AuditEntryEntity entity = new AuditEntryEntity();
- entity.setAuditSessionId(sessionId);
+ entity.setAuditApplicationId(applicationId);
entity.setAuditTime(time);
entity.setAuditUserId(usernameId);
entity.setAuditValuesId(valuesId);
diff --git a/source/java/org/alfresco/service/cmr/audit/AuditService.java b/source/java/org/alfresco/service/cmr/audit/AuditService.java
index b94704815b..9275238d12 100644
--- a/source/java/org/alfresco/service/cmr/audit/AuditService.java
+++ b/source/java/org/alfresco/service/cmr/audit/AuditService.java
@@ -24,7 +24,9 @@
*/
package org.alfresco.service.cmr.audit;
+import java.io.Serializable;
import java.util.List;
+import java.util.Map;
import org.alfresco.service.NotAuditable;
import org.alfresco.service.PublicService;
@@ -100,4 +102,62 @@ public interface AuditService
*/
@NotAuditable
public List getAuditTrail(NodeRef nodeRef);
+
+ /*
+ * V3.2 from here on. Put all fixes to the older audit code before this point, please.
+ */
+
+ /**
+ * The interface that will be used to give query results to the calling code.
+ * @since 3.2
+ */
+ public static interface AuditQueryCallback
+ {
+ /**
+ * Check if summary or full data fetching is required. Depending on the return value,
+ * the underlying query may be completely different; it is not possible to change the
+ * return value and expect the callback to be used differently during row handling.
+ *
+ * @return Return true if summary data is required only i.e
+ * the full map of audit values for the entries will not be
+ * retrieved.
+ */
+ boolean isSummaryOnly();
+
+ /**
+ * Handle a summary row of audit entry data. The ID of the full values map is provided.
+ *
+ * @param applicationName the name of the application
+ * @param user the user that logged the entry
+ * @param time the time of the entry
+ * @param valuesId the ID of the values map as created
+ * @return Return true to continue processing rows or false to stop
+ */
+ boolean handleAuditEntrySummary(String applicationName, String user, long time, Long valuesId);
+
+ /**
+ * Handle a full row of audit entry data.
+ *
+ * @param applicationName the name of the application
+ * @param user the user that logged the entry
+ * @param time the time of the entry
+ * @param values the values map as created
+ * @return Return true to continue processing rows or false to stop
+ */
+ boolean handleAuditEntryFull(String applicationName, String user, long time, Map values);
+ }
+
+ /**
+ * Get the audit entries that match the given criteria.
+ *
+ * @param callback the callback that will handle results
+ * @param auditPath if not null, at least one value in the entry must start with this path
+ * @param user if not null, the entry must be logged against this user
+ * @param from the start search time (use 0L) to cover all times
+ * @param to the end search time (use Long.MAX_VALUE) to cover all times
+ * @param limit the maximum number of results to retrieve
+ */
+ void auditQuery(
+ AuditQueryCallback callback,
+ String auditPath, String user, long from, long to, int limit);
}
diff --git a/source/test-resources/alfresco/audit/alfresco-audit-test-bad-02.xml b/source/test-resources/alfresco/audit/alfresco-audit-test-bad-02.xml
index 6e38a361ed..1d317e6610 100644
--- a/source/test-resources/alfresco/audit/alfresco-audit-test-bad-02.xml
+++ b/source/test-resources/alfresco/audit/alfresco-audit-test-bad-02.xml
@@ -11,7 +11,7 @@
-
+
diff --git a/source/test-resources/alfresco/audit/alfresco-audit-test-bad-05.xml b/source/test-resources/alfresco/audit/alfresco-audit-test-bad-05.xml
index e1e39b7070..62eea69612 100644
--- a/source/test-resources/alfresco/audit/alfresco-audit-test-bad-05.xml
+++ b/source/test-resources/alfresco/audit/alfresco-audit-test-bad-05.xml
@@ -15,7 +15,7 @@
-
+
diff --git a/source/test-resources/alfresco/audit/alfresco-audit-test-bad-06.xml b/source/test-resources/alfresco/audit/alfresco-audit-test-bad-06.xml
index bd1f47ab0b..a57ca54df0 100644
--- a/source/test-resources/alfresco/audit/alfresco-audit-test-bad-06.xml
+++ b/source/test-resources/alfresco/audit/alfresco-audit-test-bad-06.xml
@@ -15,7 +15,7 @@
-
+
diff --git a/source/test-resources/alfresco/audit/alfresco-audit-test.xml b/source/test-resources/alfresco/audit/alfresco-audit-test.xml
index 36f6a62bbd..1199d9183e 100644
--- a/source/test-resources/alfresco/audit/alfresco-audit-test.xml
+++ b/source/test-resources/alfresco/audit/alfresco-audit-test.xml
@@ -20,7 +20,7 @@
-
+
@@ -56,7 +56,7 @@
-
+
@@ -67,12 +67,12 @@
-
+
+
+
+
-
-
-