これは、修正しようとしているエラーと同じエラーを作成する簡単な例です。
<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