找不到ColdFusion Java方法异常

the*_*xxi 3 java coldfusion

这个问题让我很生气.我正在尝试在ColdFusion中使用Java来创建Document对象.当我这样做:

nd = createObject("java","javax.xml.parsers.DocumentBuilder");
Run Code Online (Sandbox Code Playgroud)

我可以转储nd并看到它正确加载了所有方法:

object of javax.xml.parsers.DocumentBuilder Class Name javax.xml.parsers.DocumentBuilder 

Method / Return Type

getDOMImplementation() / org.w3c.dom.DOMImplementation

getSchema() / javax.xml.validation.Schema 

isNamespaceAware() / boolean 

isValidating() / boolean 

isXIncludeAware() / boolean 

newDocument() / org.w3c.dom.Document 

parse(java.io.File) / org.w3c.dom.Document 

parse(java.lang.String) / org.w3c.dom.Document 

parse(org.xml.sax.InputSource) / org.w3c.dom.Document 

parse(java.io.InputStream, java.lang.String) / org.w3c.dom.Document 

parse(java.io.InputStream) / org.w3c.dom.Document 

reset() / void 

setEntityResolver(org.xml.sax.EntityResolver) / void 

setErrorHandler(org.xml.sax.ErrorHandler) / void 
Run Code Online (Sandbox Code Playgroud)

我正在尝试调用newDocument()方法.我在cfscript和cfsets中都尝试了以下所有内容:

nd.newDocument();
nd.newDocument(JavaCast("null",""));
nd = createObject("java","javax.xml.parsers.DocumentBuilder").newDocument();
nd = createObject("java","javax.xml.parsers.DocumentBuilder").newDocument(JavaCast("null",""));
Run Code Online (Sandbox Code Playgroud)

但是,无论我尝试什么方法,我都会收到此错误:

要么没有指定方法名称和参数类型的方法,要么isNamespaceAware方法会使用ColdFusion无法可靠解密的参数类型重载.ColdFusion找到了0个与>提供的参数匹配的方法.如果这是一个Java对象并且您验证了方法>存在,请使用javacast函数来减少歧义.

我可以看到方法被加载..方法没有重载..它不需要任何参数..而且,即使我明确告诉CF我传入null,它也找不到方法. .

我尝试访问类中的其他方法 - 它也找不到那些..我不知道为什么我可以转储类的内容 - 我可以看到所有方法..但是,不知何故CF正在获得当我试着打电话给他们时,他们感到很困惑,找不到它们.

任何想法都会超级有用..

谢谢!!

Kan*_*n.P 7

您必须为documentBuilder工厂创建一个对象.在工厂的帮助下,您可以获得经过验证的xml信息.在这里,我创建了对象并使用documentbuilderfactory调用parse方法.此外,您必须注入newInstance(),然后才能访问newdocument()方法. 我的Xml内容:testParse.xml

<?xml version="1.0"?>
<company>
<staff id="1001">
    <firstname>yong</firstname>
    <lastname>mook kim</lastname>
    <nickname>mkyong</nickname>
    <salary>100000</salary>
</staff>
<staff id="2001">
    <firstname>low</firstname>
    <lastname>yin fong</lastname>
    <nickname>fong fong</nickname>
    <salary>200000</salary>
</staff>
</company>
Run Code Online (Sandbox Code Playgroud)

*CF代码:

<cfset myObj = createObject("java","javax.xml.parsers.DocumentBuilderFactory")>
<cfset createDocs = myObj.newInstance().newDocumentBuilder()>
<cfset parseDocs = createDocs.parse(expandpath('/testParse.xml'))>
<cfset getNodeName = parseDocs.getDocumentElement().getNodeName()>
<cfset getList = parseDocs.getElementsByTagName("staff")>

<cfloop index="i" from="1" to="#getList.getlength()#">
     <!--- Do your business logic here  --->
</cfloop>
Run Code Online (Sandbox Code Playgroud)

我希望它对你有所帮助.谢谢.