0

基本的な.NET4.0アプリケーションを作成し、Saxonアセンブリを参照しました。これが私がプロジェクトで参照したdllのリストです。

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」のタイプ初期化子が例外をスローしました。at IKVM.NativeCode.java.lang.Class.forName0(String name、Boolean initialize、Object loader)at java.lang.Class.forName0(String、Boolean、ClassLoader)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 BealSaxxon._Default.Page_Load(Object sender、EventArgs e)in C :\ Users \ u0147101 \ Desktop \ BealSaxxon \ BealSaxxon \ Default.aspx.vb:line 9

IISマシンからの完全なスタックトレース:

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)

誰かが以前にこの例外を見たことがありますか?私はグーグルで広範囲に検索しました、しかし誰もこの特定の例外を持っていなかったようです。IISのアクセス許可の問題だと思いますが、よくわかりません。このアプリケーションが実行されているアプリケーションプールは、マシン管理者が設定します。

4

2 に答える 2

0

この状況で、JVMを使用するアプリに干渉していたのはOpNETと呼ばれる製品でした。サービスとプロセスが停止すると、Saxonアセンブリは正常に機能しました。

于 2012-09-19T13:43:09.793 に答える
0

これには2種類の原因があると思います。

  • IKVMdllの1つが欠落しています。IKVMのすべてのdllを追加して、これで問題が解決するかどうかをテストします。
  • IKVMはバージョン4ではなく.NET2用にコンパイルされています。app.configにバージョンマッピングを追加する必要があります。
于 2012-09-12T20:44:22.683 に答える