这是一个简化的示例,它会创建与我要修复的错误相同的错误。
<cfscript>
private xml function getBaseRequest() {
// Set up the root xml element
var xmlReturn = XmlNew(true);
xmlReturn.xmlRoot = xmlElemNew(xmlReturn,'testbase');
// Attach a child with generic name
ArrayAppend(xmlReturn['testbase'].XmlChildren,xmlElemNew(xmlReturn,'thisworks'));
// Add a child to that
ArrayAppend(xmlReturn['testbase']['thisworks'].XmlChildren,xmlElemNew(xmlReturn,'attachme'));
// Now attach a child with node name 'XMLFileDefinition'
ArrayAppend(xmlReturn['testbase'].XmlChildren,xmlElemNew(xmlReturn,'XMLFileDefinition'));
// And attempt to add a child to that
// produces error "Element XMLFileDefinition is undefined in a Java object of type class coldfusion.xml.XmlNodeList"
ArrayAppend(xmlReturn['testbase']['XMLFileDefinition'].XmlChildren,xmlElemNew(xmlReturn,'thisbreaks'));
return xmlReturn;
}
</cfscript>
为了澄清,在标记为错误的行之前转储出的 XML 如下所示
<?xml version="1.0" encoding="UTF-8"?>
<testbase>
<thisworks>
<attachme/>
</thisworks>
<XMLFileDefinition/>
</testbase>
不幸的是,根据第三方提供的模式,此 XML 是必需的,因此我们不能将节点重命名为更适合 ColdFusion 的东西。
更新这似乎与节点名称上的“XML”前缀有关。任何以“XML”为前缀的节点似乎都会导致此问题。我添加了我的答案,详细说明了我是如何解决这个问题的,但是希望有人能想出一个更优雅/通用的解决方案,因为我的有一些潜在的陷阱。
CF/Java 版本如下:
- ColdFusion 版本:9,0,1,274733
- Java 版本:14.3-b01
我也尝试过更新,这仍然发生在以下版本上
- ColdFusion 版本:9,0,1,274733(累积修补程序 2)
- Java版本:1.7.0_03