Tag: classloader

与类加载相关的战争部署错误

当我部署我的war文件并运行它时会出现错误 org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader Jan 6, 2011 3:16:04 PM org.apache.catalina.startup.HostConfig deployDescriptor INFO: Deploying configuration descriptor servlet.xml Jan 6, 2011 3:16:04 PM org.apache.catalina.core.StandardContext preDeregister SEVERE: error stopping LifecycleException: Pipeline has not been started at org.apache.catalina.core.StandardPipeline.stop(StandardPipeline.java:257) at org.apache.catalina.core.StandardContext.stop(StandardContext.java:4629) at org.apache.catalina.core.StandardContext.preDeregister(StandardContext.java:5370) at org.apache.tomcat.util.modeler.BaseModelMBean.preDeregister(BaseModelMBean.java:1130) at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.preDeregisterInvoke(DefaultMBeanServerInterceptor.java:1048) at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.exclusiveUnregisterMBean(DefaultMBeanServerInterceptor.java:421) at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.unregisterMBean(DefaultMBeanServerInterceptor.java:403) at com.sun.jmx.mbeanserver.JmxMBeanServer.unregisterMBean(JmxMBeanServer.java:506) at org.apache.tomcat.util.modeler.Registry.unregisterComponent(Registry.java:575) at org.apache.catalina.core.StandardContext.start(StandardContext.java:4230) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771) at […]

自定义classLoader问题

接下来的问题是:我从这里获取了基类classLoader代码。 但是我的classLoader是特定的,它必须能够从文件系统加载类(让我们拿WinOS),所以在classLoader中必须是一些setAdditionalPath()方法,它设置一个路径(文件系统上的一个目录),来自我们将加载类(仅* .class,没有jar)。 这里是代码,它从链接修改加载器(你可以看到,只修改了loadClass),但它无法正常工作: public void setAdditionalPath(String dir) { if(dir == null) { throw new NullPointerException(“”); } this.Path = dir; } public Loader(){ super(Loader.class.getClassLoader()); } public Class loadClass(String className) throws ClassNotFoundException { if(Path.length() != 0) { File file = new File(Path); try { // Convert File to an URL URL url = file.toURL(); URL[] urls […]

java.lang.LinkageError类加载错误

我的JSystem / Java / Eclipse环境有些问题。 我收到此错误,我不明白错误: java.lang.LinkageError: loader constraint violation: loader (instance of jsystem/runner/loader/ExtendsTestCaseClassLoader) previously initiated loading for a different type with name “org/w3c/dom/Document” 我想知道是否有人有类似的问题,我不认为我的环境对于解决它是非常重要的,如果我能理解发生了什么“undergound”我希望自己解决问题。 非常感谢提前。

java.lang.IllegalArgumentException:尚未正确配置Jetty ALPN / NPN

获取java.lang.IllegalArgumentException: Jetty ALPN/NPN has not been properly configured ,同时使用gRPC(google pub/sub)发布/使用来自Kafka的消息。

如何包含同一依赖项的两个不同版本?

我正在使用Java进行ERP系统的定制。 在我的自定义中,我想使用Apache POI 3.10.1。 因此我整合了jar子poi-3.10.1-20140818.jar和poi-ooxml-3.10.1-20140818.jar。 但是,这些jar包含已经包含在ERP系统核心代码中的几个类,但有差异。 如果核心ERP类覆盖POI类,则自定义会引发运行时exception。 如果POI类覆盖核心类,则核心function可能会发生相同的情况。 处理这样的问题的最佳做法是什么? 我的定制是一个相对孤立的function。

ZipFileSystemProvider无法识别JIMFS

我有一个从字节数组在jimfs (内存文件系统中的google)中创建的zip文件。 尝试使用ZipMemoryFileSystem打开该文件时,出现无法识别提供程序的错误。 我的代码如下: public static void test(byte[] document) { try { try (FileSystem memoryFileSystem = Jimfs.newFileSystem(Configuration.unix())) { Files.write(memoryFileSystem.getPath(“/file.zip”), document); URI uri = URI.create(“jar:” + memoryFileSystem.getPath(“/file.zip”).toUri()); Map env = Collections.singletonMap(“create”, “false”); try (FileSystem zipfs = FileSystems.newFileSystem(uri, env)) { //do something } catch (Exception e) { e.printStackTrace(); } } } catch (IOException e) { e.printStackTrace(); } […]

对象的InvokeExact,其类型由classloader动态加载

我花了一整天时间来解决这个问题。 我的问题是如何在一个实例上进行MethodHandle.invokeExact调用,该类的类类型在程序运行时动态加载。 为了使问题更清楚,我在下面展示我的示例代码: Class expClass = new MyClassLoader().load(….) //expClass is AddSample.class which is subclass of BaseTemplate BaseTemplate obj = expClass.getConstructor(…) .newInstance(…); MethodHandle myMH = MethodHandles.lookup().findVirtual(expClass, methodName,..); System.out.println(“Object type “+obj.getClass()); //Print AddSample // If obj is declared as “AddSample obj”, the runtime would be OK. assertEquals((int)myMH.invokeExact(obj,”addintaasdsa” , 10 , 20.0f), 12); 在此示例中,expClass是动态加载的,其类类型是AddSample 。 下一行中的obj实例声明为BaseTemplate,其实际类型为AddSample 。 AddSample类是BaseTemplate的子类。 […]

使用ClassLoader方法将类下的所有资源检索为输入流

我的问题是你认为很常见的问题,但我还没有设法找到解决方案。 在Tomcat 5.5下构建Java Web应用程序(虽然要求它可以在任何地方部署,例如在WebLogic环境下,因此将资源作为流要求加载)。 好的做法要求资源文件放在WEB-INF / classes下,并使用ClassLoader的getResourceAsStream()方法加载。 当您知道要加载的资源的名称时,一切顺利。 我的问题是我需要加载存在于类子目录中的所有内容(包括递归在非空子目录中)。 因此,例如,如果我在WEB-INF / classes下有以下内容: folderX / folderY folderX / folderY / fileA.properties folderX / fileB.properties 我需要加载fileA.properties和fileB.properties类,而不是在应用程序启动之前实际知道它们的名称(即我需要能够从WEB-INF / classes下的任何目录中任意加载资源)。 这样做最优雅的方法是什么? 我可以通过什么对象查询我需要的信息(每个所需资源的资源路径)? 非servlet特定的解决方案是最好的(如果可能的话,将它全部保存在类加载框架中)。 提前致谢!

快速修复Class.forName案例问题

我从Java那里得到了这个真正(愚蠢)的错误 Exception in thread “AWT-EventQueue-0” java.lang.NoClassDefFoundError: models/modelclass (wrong name: models/ModelClass) 所以我在命令行输入一个命令,我宁愿不输入类名的正确情况。 我想键入“modelclass”而不是“ModelClass”。 有办法解决这个问题吗? 为什么存在这种exception?!?

为什么这段代码不会抛出NullPointerException

我刚刚与我的朋友讨论了使用类名调用静态方法,并尝试了这个代码,并期望它在运行时抛出NPE。但事实certificate它是dint。 我只是想了解执行顺序。 public class One { public static void method() { System.out.println(“in static one”); } } public class Two { static One o; public static void main(String[] args) { o.method(); // expected NPE here, as o is null } } 我知道静态方法应该用它们的类名调用,我甚至知道当我们用实例调用静态方法时IDE会给出编译器警告 。 但是我们也可以通过创建一个实例来调用它们,但是,我从来没有在这里创建过实例, o应该得到它的默认值null,因此调用o.method()应该在运行时抛出一个NPE,但事实并非如此。 你们能不能对这段代码中的执行顺序有所了解。