refactor(ContextBlock): return dom nodes directly

This commit is contained in:
2026-03-10 14:48:14 +08:00
parent 1cd6ba11bb
commit f5f64971f3
2 changed files with 4 additions and 18 deletions

View File

@@ -22,9 +22,7 @@ import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory; import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource; import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamResult;
import java.io.ByteArrayInputStream;
import java.io.StringWriter; import java.io.StringWriter;
import java.nio.charset.StandardCharsets;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.ArrayList; import java.util.ArrayList;
@@ -166,8 +164,7 @@ public class CommunicationProducer extends AbstractAgentModule.Running<PartnerRu
contextBlocks.stream() contextBlocks.stream()
.sorted(Comparator.comparingInt(ContextBlock::getPriority)) .sorted(Comparator.comparingInt(ContextBlock::getPriority))
.map(ContextBlock::encodeToXml) .map(ContextBlock::encodeToXml)
.forEach(blockXml -> { .forEach(blockElement -> {
Element blockElement = parseElement(blockXml);
root.appendChild(document.importNode(blockElement, true)); root.appendChild(document.importNode(blockElement, true));
}); });
@@ -236,17 +233,6 @@ public class CommunicationProducer extends AbstractAgentModule.Running<PartnerRu
parent.appendChild(element); parent.appendChild(element);
} }
private Element parseElement(String xml) {
try {
Document parsedDocument = DocumentBuilderFactory.newInstance()
.newDocumentBuilder()
.parse(new ByteArrayInputStream(xml.getBytes(StandardCharsets.UTF_8)));
return parsedDocument.getDocumentElement();
} catch (Exception e) {
throw new IllegalStateException("解析 ContextBlock XML 失败", e);
}
}
private void appendSupplyBlocks(Document document, Element inputRoot, List<ContextBlock> contextBlocks) { private void appendSupplyBlocks(Document document, Element inputRoot, List<ContextBlock> contextBlocks) {
Map<String, List<ContextBlock>> groupedBlocks = filterContextBlocks(contextBlocks, ContextBlock.Type.SUPPLY).stream() Map<String, List<ContextBlock>> groupedBlocks = filterContextBlocks(contextBlocks, ContextBlock.Type.SUPPLY).stream()
.collect(Collectors.groupingBy( .collect(Collectors.groupingBy(
@@ -259,7 +245,7 @@ public class CommunicationProducer extends AbstractAgentModule.Running<PartnerRu
Element groupElement = document.createElement(entry.getKey()); Element groupElement = document.createElement(entry.getKey());
inputRoot.appendChild(groupElement); inputRoot.appendChild(groupElement);
for (ContextBlock block : entry.getValue()) { for (ContextBlock block : entry.getValue()) {
Element blockElement = parseElement(block.encodeToXml()); Element blockElement = block.encodeToXml();
groupElement.appendChild(document.importNode(blockElement, true)); groupElement.appendChild(document.importNode(blockElement, true));
} }
} }

View File

@@ -22,7 +22,7 @@ abstract class ContextBlock {
SUPPLY SUPPLY
} }
fun encodeToXml(): String { fun encodeToXml(): Element {
val document = DocumentBuilderFactory.newInstance() val document = DocumentBuilderFactory.newInstance()
.newDocumentBuilder() .newDocumentBuilder()
.newDocument() .newDocument()
@@ -33,7 +33,7 @@ abstract class ContextBlock {
fillXml(document, root) fillXml(document, root)
return document.toXmlString() return root
} }
protected abstract fun fillXml(document: Document, root: Element) protected abstract fun fillXml(document: Document, root: Element)