Я создал с помощью ASM JavaAgent, который вставляет вызовы методов (INVOKESTATIC орга/тест/Logger/Журнал) на конкретную области в классе загружается. Введенные вызовы методов (org/test/Logger/Log) объявлены в самом JavaAgent.NoClassDefFoundError, когда вызов методы вставляется с помощью измерительных приборов вызываются через sun.reflect.NativeConstructorAccessorImpl.newInstance0
Это работает при нормальных обстоятельствах и вызываются вызовы вставленных методов.
Я настроил этот агент в JBOSS и запустил сервер. Агент регистрируется правильно, и метод org/test/Logger/Log вызывается несколько раз.
Но в конце концов падает с NoClassDefFoundError:
Exception in thread "main" java.lang.NoClassDefFoundError: org/test/Logger/Log at org.apache.xerces.jaxp.SAXParserFactoryImpl.(Unknown Source) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor.java:513) at java.lang.Class.newInstance0(Class.java:355) at java.lang.Class.newInstance(Class.java:308) at javax.xml.parsers.FactoryFinder.newInstance(FactoryFinder.java:147) at javax.xml.parsers.FactoryFinder.findJarServiceProvider(FactoryFinder.java:298) at javax.xml.parsers.FactoryFinder.find(FactoryFinder.java:223) at javax.xml.parsers.SAXParserFactory.newInstance(SAXParserFactory.java:128) at org.jboss.xb.binding.parser.sax.SaxJBossXBParser.(SaxJBossXBParser.java:54) at org.jboss.xb.binding.UnmarshallerImpl.(UnmarshallerImpl.java:56) at org.jboss.xb.binding.UnmarshallerFactory$UnmarshallerFactoryImpl.newUnmarshaller(UnmarshallerFactory.java:96) at org.jboss.bootstrap.xml.BootstrapParser.parse(BootstrapParser.java:50) at org.jboss.bootstrap.microcontainer.ServerImpl.doStart(ServerImpl.java:123) at org.jboss.bootstrap.AbstractServerImpl.start(AbstractServerImpl.java:450) at org.jboss.Main.boot(Main.java:221) at org.jboss.Main$1.run(Main.java:556) at java.lang.Thread.run(Thread.java:662)
Я предполагаю, так как org.apache.xerces.jaxp.SAXParserFactoryImpl. метод вызван через sun.reflect он может использовать другой загрузчик классов, и у него нет моего javaagent на его пути.
Что здесь может быть неправильным и как я могу устранить это изнутри из javaagent? Я хочу сделать это с помощью этого агента как можно проще, если у меня не будет слишком много конфигураций.