找不到ColdFusion Java方法异常

找不到ColdFusion Java方法异常,java,coldfusion,Java,Coldfusion,这个问题快把我逼疯了。我试图在ColdFusion中使用Java来创建一个文档对象。当我这样做时: nd = createObject("java","javax.xml.parsers.DocumentBuilder"); 我可以转储nd并查看它是否正确加载了所有方法: object of javax.xml.parsers.DocumentBuilder Class Name javax.xml.parsers.DocumentBuilder Method / Return Type

这个问题快把我逼疯了。我试图在ColdFusion中使用Java来创建一个文档对象。当我这样做时:

nd = createObject("java","javax.xml.parsers.DocumentBuilder");
我可以转储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 
我正在尝试调用newDocument()方法。我已经在cfscript和cfset中尝试了以下所有操作:

nd.newDocument();
nd.newDocument(JavaCast("null",""));
nd = createObject("java","javax.xml.parsers.DocumentBuilder").newDocument();
nd = createObject("java","javax.xml.parsers.DocumentBuilder").newDocument(JavaCast("null",""));
但是,无论我尝试哪种方法,我都会出现以下错误:

没有具有指定方法名称和参数类型的方法 或者isNamespaceAware方法重载了 ColdFusion无法可靠地破译。ColdFusion找到0个与>提供的参数匹配的方法。如果这是一个Java对象,并且您验证了method>存在,那么使用javacast函数来减少歧义

我可以看到该方法已加载。。该方法没有重载。。它不需要任何参数。。而且,即使我显式地告诉CF我正在传递null,它也找不到方法

我尝试访问类中的其他方法,但它也找不到这些方法。。我不确定为什么我可以转储类的内容,而且我可以看到所有的方法。。但是,不知怎的,当我试着给他们打电话时,CF被弄糊涂了,找不到他们

任何想法都会非常有用


谢谢

您必须为documentBuilder factory创建一个对象。在factory的帮助下,您可以获得真实的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>

勇
木金
mkyong
100000
低的
尹芳
芳芳
200000
*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>


我希望这对你有帮助。谢谢

我在java类上从ColdFusion调用方法时遇到了相同的错误。我试图使用setPropertyName方法,如下所示

    <cfobject action="create" type="java" name="This.txnRequest" class="#AnetAPI#.TransactionRequestType" />
    <cfset authTxnType=CreateObject("java", "#AnetAPI#.TransactionTypeEnum") />
    <cfset This.txnRequest.setTransactionType(authTxnType.AUTH_CAPTURE_TRANSACTION) />

事实证明,ColdFusion希望您直接访问EJB中的属性。您还需要像下面这样显式调用EJB构造函数:

    <cfset This.txnRequest.init() />
    <cfset This.txnRequest.TransactionType=authTxnType.AUTH_CAPTURE_TRANSACTION />


CF隐式地为您调用set方法,如中所述。你不能直接叫它。

是的,说得很好@ude2xi-如果你看一下它的
摘要
。不能创建抽象类的新实例。获取实例的唯一方法是通过“factory”类。也可能对你感兴趣。