@@ -33,6 +33,7 @@ import org.apache.tools.ant.util.FileUtils;
import org.apache.tools.ant.util.StringUtils;
import org.apache.tools.ant.util.StringUtils;
import org.w3c.dom.Document;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.Text;
import org.w3c.dom.Text;
/**
/**
@@ -172,7 +173,7 @@ public class XmlLogger implements BuildLogger {
Text errText = doc.createCDATASection(StringUtils.getStackTrace(t));
Text errText = doc.createCDATASection(StringUtils.getStackTrace(t));
Element stacktrace = doc.createElement(STACKTRACE_TAG);
Element stacktrace = doc.createElement(STACKTRACE_TAG);
stacktrace.appendChild(errText);
stacktrace.appendChild(errText);
buildElement.element.appendChild( stacktrace);
synchronizedAppend(buildElement.element, stacktrace);
}
}
String outFilename = event.getProject().getProperty("XmlLogger.file");
String outFilename = event.getProject().getProperty("XmlLogger.file");
if (outFilename == null) {
if (outFilename == null) {
@@ -267,9 +268,10 @@ public class XmlLogger implements BuildLogger {
}
}
}
}
if (parentElement == null) {
if (parentElement == null) {
buildElement.element.appendChild( targetElement.element);
synchronizedAppend(buildElement.element, targetElement.element);
} else {
} else {
parentElement.element.appendChild(targetElement.element);
synchronizedAppend(parentElement.element,
targetElement.element);
}
}
}
}
targets.remove(target);
targets.remove(target);
@@ -320,9 +322,9 @@ public class XmlLogger implements BuildLogger {
targetElement = (TimedElement) targets.get(target);
targetElement = (TimedElement) targets.get(target);
}
}
if (targetElement == null) {
if (targetElement == null) {
buildElement.element.appendChild( taskElement.element);
synchronizedAppend(buildElement.element, taskElement.element);
} else {
} else {
targetElement.element.appendChild( taskElement.element);
synchronizedAppend(targetElement.element, taskElement.element);
}
}
Stack threadStack = getStack();
Stack threadStack = getStack();
if (!threadStack.empty()) {
if (!threadStack.empty()) {
@@ -394,7 +396,7 @@ public class XmlLogger implements BuildLogger {
Text errText = doc.createCDATASection(StringUtils.getStackTrace(ex));
Text errText = doc.createCDATASection(StringUtils.getStackTrace(ex));
Element stacktrace = doc.createElement(STACKTRACE_TAG);
Element stacktrace = doc.createElement(STACKTRACE_TAG);
stacktrace.appendChild(errText);
stacktrace.appendChild(errText);
buildElement.element.appendChild( stacktrace);
synchronizedAppend(buildElement.element, stacktrace);
}
}
Text messageText = doc.createCDATASection(event.getMessage());
Text messageText = doc.createCDATASection(event.getMessage());
messageElement.appendChild(messageText);
messageElement.appendChild(messageText);
@@ -411,9 +413,9 @@ public class XmlLogger implements BuildLogger {
parentElement = (TimedElement) targets.get(target);
parentElement = (TimedElement) targets.get(target);
}
}
if (parentElement != null) {
if (parentElement != null) {
parentElement.element.appendChild( messageElement);
synchronizedAppend(parentElement.element, messageElement);
} else {
} else {
buildElement.element.appendChild( messageElement);
synchronizedAppend(buildElement.element, messageElement);
}
}
}
}
@@ -459,4 +461,10 @@ public class XmlLogger implements BuildLogger {
public void setErrorPrintStream(PrintStream err) {
public void setErrorPrintStream(PrintStream err) {
}
}
private void synchronizedAppend(Node parent, Node child) {
synchronized(parent) {
parent.appendChild(child);
}
}
}
}