그래서 여기 내가 ASM의 클래스 검증을 사용하여 확인하기 위해 노력하고 바이트 코드의 조각이다 org/apache/xerces/impl/io/UTF8Reader 클래스의 일부입니다. 내가 ASM에서 제공하는 클래스의 검증을 통해이 클래스의 바이트 코드를 실행하면 이제, 나는 다음과 같은 결과를 얻을 :면 ClassNotFound 오류가
org.objectweb.asm.tree.analysis.AnalyzerException: **Error at instruction 7: java.lang.ClassNotFoundException: org.apache.xerces.util.MessageFormatter**
at org.objectweb.asm.tree.analysis.Analyzer.analyze(Unknown Source)
at org.objectweb.asm.util.CheckClassAdapter.verify(Unknown Source)
at org.objectweb.asm.util.CheckClassAdapter.verify(Unknown Source)
at org.objectweb.asm.util.CheckClassAdapter.main(Unknown Source)
Caused by: java.lang.RuntimeException: java.lang.ClassNotFoundException: org.apache.xerces.util.MessageFormatter
at org.objectweb.asm.tree.analysis.SimpleVerifier.getClass(Unknown Source)
at org.objectweb.asm.tree.analysis.SimpleVerifier.isAssignableFrom(Unknown Source)
at org.objectweb.asm.tree.analysis.SimpleVerifier.isSubTypeOf(Unknown Source)
at org.objectweb.asm.tree.analysis.BasicVerifier.naryOperation(Unknown Source)
at org.objectweb.asm.tree.analysis.BasicVerifier.naryOperation(Unknown Source)
at org.objectweb.asm.tree.analysis.Frame.execute(Unknown Source)
... 4 more
<init>(Ljava/io/InputStream;)V
00000 UTF8Reader InputStream : : ALOAD 0
00001 UTF8Reader InputStream : UTF8Reader : ALOAD 1
00002 UTF8Reader InputStream : UTF8Reader InputStream : SIPUSH 2048
00003 UTF8Reader InputStream : UTF8Reader InputStream I : NEW org/apache/xerces/impl/msg/XMLMessageFormatter
00004 UTF8Reader InputStream : UTF8Reader InputStream I XMLMessageFormatter : DUP
00005 UTF8Reader InputStream : UTF8Reader InputStream I XMLMessageFormatter XMLMessageFormatter : INVOKESPECIAL org/apache/xerces/impl/msg/XMLMessageFormatter.<init>()V
00006 UTF8Reader InputStream : UTF8Reader InputStream I XMLMessageFormatter : INVOKESTATIC java/util/Locale.getDefault()Ljava/util/Locale;
00007 UTF8Reader InputStream : UTF8Reader InputStream I XMLMessageFormatter Locale : INVOKESPECIAL org/apache/xerces/impl/io/UTF8Reader.<init> (Ljava/io/InputStream;ILorg/apache/xerces/util/MessageFormatter;Ljava/util/Locale;)V
00008 ? : RETURN
내가보기 엔이 마지막 비트에 의해 혼란 스러워요을 ... 이유는면 ClassNotFound을주고있다 7 행의 org/apache/xerces/util/MessageFormatter 객체에 대한 예외가 있습니까?
감사합니다.
저는 ASM이 아닌 Java에 익숙합니다. 몇 가지 아이디어 (사과가 너무 분명한 경우) : ASM을 통해 UTF8Reader를 바이트 코드로로드하고 있습니까? 그런 식으로 모든 xerces 항아리가로드되고 있습니까? 아니면 어떤 수업입니까? MessageFormatter는 어떻습니까? 그렇지 않다면 어디에서 클래스 패스에 들어가로드 될 것으로 예상합니까? (당신이 ASM을 호출하는 방법을 아는 데 도움이 될 수 있습니다.) – Will
그래서 java.lang.instrument를 통해 UTF8Reader와 MessageFormatter를로드하고 있습니다. 기본적으로 클래스의 시간 계측을로드하는 Java 에이전트를 작성하고 있습니다. 이제 클래스의 바이트 코드를로드하는 동안 파일을 별도로 저장합니다.이 파일은 나중에 오프라인 프로세스에서 확인하는 데 사용됩니다. 즉 프로그램이 성공적으로 실행 된 후입니다. 프로그램이 성공적으로 실행되고 있음을주의하십시오. 감사. – vijay
또한 도움이 될 수 있습니다. http://mail-archive.ow2.org/asm/2011-08/msg00051.html이 내용이 의미가 있습니까? 다시 한 번 감사드립니다. – vijay