ColdFusion:在cfobject标记中引用.NET DLL时获取NoClassDefFoundError

时间:2012-05-29 17:25:30

标签: .net coldfusion coldfusion-9 coldfusion-8

我有一个ColdFusion 9实例和一个.NET DLL。 .NET DLL是非常简单的字符串解析,使我的一些任务在CF中更容易。每个客户端都有一个DLL,它希望使用字符串执行某些特定于客户端的任务,但是从原始源中提取这些项目的核心不会从客户端更改为客户端。

在这种情况下,我有一个看起来像的对象:

public class clsNotification : BaseClass
{
    public string GetSimpleString()
    {
        return "I was here";
    }


    public string GetNotificationsXml(int ProjectID)
    {
       return MybaseClass.getXML(ProjectID);
    }
}

通知类是主DLL,BaseClass位于单独的DLL中。

更新 我把所有东西放在一个DLL中用于测试目的,它仍然给我同样的错误。我收到的错误是:

coldfusion.xml.rpc.CFCInvocationException: [java.lang.NoClassDefFoundError :
System/Xml/XmlQualifiedName][java.lang.ClassNotFoundException :
System.Xml.XmlQualifiedName]

不幸的是,我无法访问logs文件夹。我猜他们认为存在安全隐患等问题。我已将System.Xml.dll放入该文件夹中,但它似乎仍然没有被.NET Integration Service选中。

有什么新想法吗?为什么找不到XmlQualifiedName?

更新2: ColdFusion代码非常简单。它是一个cfcomponent,具有如下所述的函数:

<cffunction name="GetNotificationsXml" access="remote" returntype="string" output="false">
    <cfargument name="ProjectID" type="numeric" required="yes">

    <cfobject name="myObj" type=".NET" 
        assembly="#ExpandPath("./")#Published .NET DLLs/Notifications.dll" 
        class="#Namespace#.clsNotifications">

    <cfset str=myObj.GetNotificationsXml(ProjectID) />

    <cfreturn str>
</cffunction>

1 个答案:

答案 0 :(得分:0)

我一直遇到这个问题,一个类会实例化,但异常会导致此错误。我通过修补得出的结论是,即使汇编列表包含正确的dll,它仍然会失败,因为我认为JNB代理不会在代理生成中包含该类。

我所做的是直接实例化这个类:

<cfset nullObj=CreateObject(".net","System.Net.WebExceptionStatus"
          ,"C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.dll")> 

因此,当/如果发生异常时,会为该类生成一个代理,并且不会发生错误。