【发布时间】:2014-05-13 21:59:00
【问题描述】:
所以我正在使用 Microsoft Office Open XML SDK,并尝试在我的 CF 10 实例中实例化它的类。
我开始尝试创建一个DocumentType 类,所以我使用了代码:
writeDump(createObject("dotnet","DocumentFormat.OpenXml.Wordprocessing.DocumentType","C:\Program Files (x86)\Open XML SDK\V2.5\lib\DocumentFormat.OpenXml.dll").DocumentType());abort;
不过,这给了我一个错误,没有有用的信息。
然后我读到您还需要在类信息中包含命名空间。然而,这也会导致错误,但有一些不错的信息:
在指定的程序集列表中找不到类 DocumentFormat.OpenXml.Wordprocessing.DocumentFormat.OpenXml.Wordprocessing.DocumentType。
必须将包含该类的程序集提供给程序集属性。
我现在对此有些困惑。我是不是在做一些明显的错误。
作为第二点,有没有办法转储 DLL 包含的所有我可以引用的类?
编辑
按照 cmets 中@Leigh 的建议将代码更改为:
writeDump(createObject("dotnet","DocumentFormat.OpenXml.Wordprocessing.DocumentType","C:\Program Files (x86)\Open XML SDK\V2.5\lib\DocumentFormat.OpenXml.dll"));abort;
在:C:\ColdFusion10\cfusion\jnbridge\error.log 中产生此错误
======================
13/05/2014 23:23:53
Java-side exception: com.jnbridge.jnbcore.ClassNotFoundException
Java-side exception message: java.lang.Class+EnclosingMethodInfo
Java-side stack trace: com.jnbridge.jnbcore.ClassNotFoundException:
java.lang.Class+EnclosingMethodInfo
at com.jnbridge.jnbproxy.ClassInfo.<init>(Unknown Source)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
at com.jnbridge.jnbcore.JNBDispatcher.construct(Unknown Source)
at com.jnbridge.jnbcore.JNBDispatcher.call(Unknown Source)
at com.jnbridge.jnbcore.server.b.d.a(Unknown Source)
at com.jnbridge.jnbcore.server.b.c.p(Unknown Source)
at com.jnbridge.jnbcore.server.b.c.run(Unknown Source)
at java.lang.Thread.run(Thread.java:722)
.NET-side stack trace = .NET-side stack trace:
at com.jnbridge.jnbproxy.ExceptionFactory.throwException(JNBException e, Hashtable objMap)
at com.jnbridge.jnbproxy.ClassInfo..ctor(String name)
at com.jnbridge.jnbcore.ObjectHelper.getSubstituteProxy(String returnedType, Type expectedType)
at com.jnbridge.jnbproxy.ProxyClass.getSubstituteProxy(String className)
at com.jnbridge.jnbproxy.ProxyClass.getType(String className, Boolean noSubstituteProxy)
at com.jnbridge.jnbproxy.ProxyClass.isThreadTrue(String className, Hashtable threadTrue, ClassInfo ci)
at com.jnbridge.jnbproxy.ProxyClass.generateProxyClassMembers(ModuleBuilder module, ClassInfo ci, Boolean verbose, Boolean noSupporting, Boolean isJSharpCompatible, ReferenceValueData refValData, Hashtable threadTrue, Boolean mapEnums)
at com.jnbridge.jnbproxy.ProxyAssembly.addClass(ClassInfo ci)
at com.jnbridge.jnbcore.ObjectHelper.getSubstituteProxy(String returnedType, Type expectedType)
at com.jnbridge.jnbproxy.ProxyClass.getSubstituteProxy(String className)
at com.jnbridge.jnbproxy.ProxyClass.getType(String className, Boolean noSubstituteProxy)
at com.jnbridge.jnbproxy.ProxyField.genClassLiteral(TypeBuilder theClass, ReferenceValueOptions rvo)
at com.jnbridge.jnbproxy.ProxyClass.generateProxyClassMembers(ModuleBuilder module, ClassInfo ci, Boolean verbose, Boolean noSupporting, Boolean isJSharpCompatible, ReferenceValueData refValData, Hashtable threadTrue, Boolean mapEnums)
at com.jnbridge.jnbproxy.ProxyAssembly.addClass(ClassInfo ci)
at com.jnbridge.jnbcore.ObjectHelper.getSubstituteProxy(String returnedType, Type expectedType)
at com.jnbridge.jnbproxy.ProxyClass.getSubstituteProxy(String className)
at com.jnbridge.jnbproxy.ProxyClass.getType(String className, Boolean noSubstituteProxy)
at com.jnbridge.jnbproxy.ProxyClass.isThreadTrue(String className, Hashtable threadTrue, ClassInfo ci)
at com.jnbridge.jnbproxy.ProxyClass.generateProxyClassMembers(ModuleBuilder module, ClassInfo ci, Boolean verbose, Boolean noSupporting, Boolean isJSharpCompatible, ReferenceValueData refValData, Hashtable threadTrue, Boolean mapEnums)
at com.jnbridge.jnbproxy.ProxyAssembly.addClass(ClassInfo ci)
at com.jnbridge.jnbcore.ObjectHelper.getSubstituteProxy(String returnedType, Type expectedType)
at com.jnbridge.jnbproxy.ExceptionFactory.throwException(JNBException e, Hashtable objMap)
at com.jnbridge.jnbcore.ProxyJarFile.close()
at com.jnbridge.jnbproxy.JNBProxy.generateJavaProxies(String[] classes, Options options, AppDomain dotNetAssembliesAppDomain, Hashtable refValueMap, Hashtable threadTrue)
at com.jnbridge.jnbproxy.JNBProxy.Main(String[] args)
Java-side stack trace:
com.jnbridge.jnbcore.ClassNotFoundException: java.lang.Class+EnclosingMethodInfo
at com.jnbridge.jnbproxy.ClassInfo.<init>(Unknown Source)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
at com.jnbridge.jnbcore.JNBDispatcher.construct(Unknown Source)
at com.jnbridge.jnbcore.JNBDispatcher.call(Unknown Source)
at com.jnbridge.jnbcore.server.b.d.a(Unknown Source)
at com.jnbridge.jnbcore.server.b.c.p(Unknown Source)
at com.jnbridge.jnbcore.server.b.c.run(Unknown Source)
at java.lang.Thread.run(Thread.java:722)`
【问题讨论】:
-
最后的
.DocumentType()看起来不对劲。如果您尝试调用类的无参数构造函数,请使用特殊的.init()方法。但是现在,删除那部分并转储:createObject("dotnet", "DocumentFormat.OpenXml.Wordprocessing.DocumentType", {path to dll}); -
@Leigh 这给了我原来的截图错误。
-
(编辑)可能它需要的不仅仅是 OpenXML dll。我曾经发生过这种情况,并且这些错误同样没有提供信息。检查 .net 错误日志以查看它是否包含更多详细信息。它应该在
jnbridge` or the standardlogs`目录下。 -
已编辑以包含 JNBridge 错误日志@Leigh
-
不幸的是,这个错误信息也不是很丰富;)它都是通用反射的东西,没有提到特定的类。我只安装了 v2.0,但使用
...\Open XML SDK\V2.0\...作为装配路径对我来说适用于 CF10.0。试一试咧嘴一笑。如果遇到同样的错误,请尝试清除 the proxy files (exceptdotNetCoreProxy.jar) ,然后重试。
标签: c# .net dll coldfusion ms-office