2012-09-12 34 views
0

我創建了一個基本的.NET 4.0應用程序並引用了Saxon程序集。這是我在項目中引用的dll的列表。使用Saxon API和IKVM的基本Web應用程序拋出異常

saxon9.dll saxon9api.dll IKVM.OpenJDK.ClassLibrary.dll IKVM.Runtime.dll

該應用程序的代碼如下:

Sub Main() 

    Console.WriteLine("Trying to instantiate SaxonProcessor...") 
    Try 
     Dim SaxonProcessor As Saxon.Api.Processor = New Saxon.Api.Processor() 
    Catch ex As Exception 
     Console.WriteLine("Error: " & ex.Message & ex.StackTrace) 
     Console.Read() 
    End Try 

    Console.WriteLine("Saxon instantiated successfully!") 
    Console.Read() 

End Sub 

當運行該應用程序在我們的IIS機器上,我得到以下輸出:

嘗試實例化SaxonProcessor ... Saxon實例化成功!

然後,我創建了一個基本的Web應用程序項目,並引用與Windows應用程序相同的文件。我將Web應用程序部署到包含所有引用程序集的虛擬目錄。我把下面的代碼在我的Default.aspx頁面:

公共類_Default 繼承System.Web.UI.Page

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 

    Response.Write("Trying to instantiate SaxonProcessor...") 

    Try 
     Dim SaxonProcessor As Saxon.Api.Processor = New Saxon.Api.Processor() 
     Response.Write("Saxon instantiated successfully!") 
    Catch ex As Exception 
     Response.Write("Error: " & ex.Message & ex.StackTrace) 
    End Try 

End Sub 

末級

當我加載網頁,它給了我此例外:

嘗試實例化SaxonProcessor ...錯誤:'IKVM.NativeCode.java.lang.Thread'的類型初始值設定項引發異常。在java.lang.Class.forName(String className)的java.lang.Class.forName0(String,Boolean,ClassLoader)的IKVM.NativeCode.java.lang.Class.forName0(String name,Boolean initialize,Object loader)at net.sf.saxon.dotnet.DotNetExtensionFunctionFactory.class $(String x0)at net.sf.saxon.dotnet.DotNetExtensionFunctionFactory..ctor(Configuration config)at net.sf.saxon.dotnet.DotNetPlatform.initialize(Configuration config)at net.sf.saxon.Configuration.init()at net.sf.saxon.Configuration.ctor()at Saxon.Api.Processor..ctor()BealSaxxon._Default.Page_Load(Object sender,EventArgs e)in C :\用戶\ u0147101 \桌面\ BealSaxxon \ BealSaxxon \ Default.aspx.vb:管線9

FULL堆棧跟蹤FROM IIS MACHINE:

System.TypeInitializationException: The type initializer for 'IKVM.NativeCode.java.lang.Thread' threw an exception. ---> System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.TypeInitializationException: The type initializer for 'java.io.BufferedInputStream' threw an exception. ---> java.lang.RuntimeException: java.lang.IllegalAccessException: Class java.util.concurrent.atomic.AtomicReferenceFieldUpdater can not access a member of class java.io.BufferedInputStream with modifiers "volatile" ---> java.lang.IllegalAccessException: Class java.util.concurrent.atomic.AtomicReferenceFieldUpdater can not access a member of class java.io.BufferedInputStream with modifiers "volatile" 
    at sun.reflect.misc.ReflectUtil.ensureMemberAccess(Class currentClass, Class memberClass, Object target, Int32 modifiers) 
    at java.util.concurrent.atomic.AtomicReferenceFieldUpdater.AtomicReferenceFieldUpdaterImpl..ctor(Class , Class , String) 
    --- End of inner exception stack trace --- 
    at java.util.concurrent.atomic.AtomicReferenceFieldUpdater.AtomicReferenceFieldUpdaterImpl..ctor(Class , Class , String) 
    at java.util.concurrent.atomic.AtomicReferenceFieldUpdater.newUpdater(Class tclass, Class vclass, String fieldName) 
    at java.io.BufferedInputStream..cctor() 
    --- End of inner exception stack trace --- 
    at java.io.BufferedInputStream.__<clinit>() 
    at java.lang.System.initializeSystemClass() 
    --- End of inner exception stack trace --- 
    at System.RuntimeMethodHandle._InvokeMethodFast(IRuntimeMethodInfo method, Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeType typeOwner) 
    at System.RuntimeMethodHandle.InvokeMethodFast(IRuntimeMethodInfo method, Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeType typeOwner) 
    at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks) 
    at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) 
    at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters) 
    at IKVM.NativeCode.java.lang.Thread..cctor() 
    --- End of inner exception stack trace --- 
    at IKVM.NativeCode.java.lang.Class.forName0(String name, Boolean initialize, Object loader) 
    at java.lang.Class.forName(String className) 
    at net.sf.saxon.dotnet.DotNetExtensionFunctionFactory.class$(String x0) 
    at net.sf.saxon.dotnet.DotNetExtensionFunctionFactory..ctor(Configuration config) 
    at net.sf.saxon.dotnet.DotNetPlatform.initialize(Configuration config) 
    at net.sf.saxon.Configuration.init() 
    at net.sf.saxon.Configuration..ctor() 
    at Saxon.Api.Processor..ctor() 
    at EDG.Transforms..ctor() 
    at EDG.Main..ctor(NameValueCollection applicationSettings, List`1 exceptionList) 
    at EDG.EGallery..ctor(NameValueCollection ConfigurationSettings, List`1 ExceptionList) 

以前有沒有人看過這個例外?我在Google上進行了大量搜索,但似乎沒有人遇到過這種特殊情況。我認爲這是IIS的權限問題,但我不確定。此應用程序正在運行的應用程序池由機器管理員設置。

+0

您使用哪種IKVM版本? – Horcrux7

+0

您是否有像內部類的堆棧跟蹤這樣的異常的更多細節? – Horcrux7

+0

更新了我們從IIS機器獲取的異常的完整堆棧跟蹤 – HashTagDevDude

回答

0

在這種情況下,這是一種名爲OpNET的產品,它干擾使用JVM的應用程序。一旦它的服務和流程停止,撒克遜大會工作得很好。

0

我認爲這可能是2種類型的原因。

  • 其中一個IKVM DLL丟失。添加所有的IKVM dll來測試這個問題是否解決。
  • IKVM是針對.NET 2而不是版本4編譯的。您需要爲您的app.config添加版本映射。
+0

我們只需要IKVM.Runtime.dll和IKVM.OpenJDK.ClassLibrary.dll。兩者都存在。相同的dll在其他IIS機器上生效,並且運行時沒有異常。 – HashTagDevDude

相關問題