先介绍下背景:
环境是是web环境,tomcat7.x,项目中需要使用外部一个sdk(一个jar包)作为client去访问外部server做认证,sdk提供了配置propery来指定一个连接server用的class,这个class需要实现包中XXXHelper接口。包中用一个xxxProvider.class来反射创建配置class对象。
但是包中使用的是class.ForName("package.className"),每次都报ClassNotFoundException。
解决办法1 只有放在这个jar包中才可以
解决办法2
后来反编译替换创建对象的xxxProvider, 将class.ForName换成下面的就好了。
Thread.currentThread().getContextClassLoader().loadClass($YOUR_CLASS_NAME)
这种情况需要和提供sdk的团队沟通去修改。
通过对比加载实例所用的classLoader和xxxProvider的classLoader发现,创建实例成功的是使用WebappClassLoader(Thread.currentThread().getContextClassLoader())而xxxProvider使用的是StandardClassLoader, WebappClassLoader是StandardClassLoader子加载器,根据类加载机制,StandardClassLoader不能加载这个类。
分享到:
相关推荐
本篇文章将深入探讨如何使用反射来解析jar文件并执行其中的Java代码。 首先,让我们理解jar文件的结构。Java Archive (JAR) 文件是Java平台上的归档文件格式,通常用于存储多个类文件、资源文件和其他元数据。这些...
### Java加载.jar包详解 #### 一、Java 类加载机制概览 自 JDK 1.2 版本之后,Java 类加载机制发生了一个重要的变化,引入了一种名为**类加载委托**的概念。这一机制的核心思想在于,如果某个 `ClassLoader` 无法...
动态加载jar包技术主要涉及Java的反射机制、类加载器和插件系统。下面我们将深入探讨这些知识点。 首先,了解Java的反射机制是理解动态加载的基础。Java反射API允许我们在运行时检查类、接口、字段和方法的信息,...
在Java开发过程中,`jar`(Java Archive)文件是一种重要的归档格式,它用于集合多个`.class`文件,也就是编译后的Java源代码,形成一个单一的可执行文件。这有助于减少部署应用程序所需的资源数量,并方便分发。当...
在这个场景中,我们需要的是一个支持MSSQL的JDBC驱动,如`sqljdbc42.jar`或`mssql-jdbc.jar`,这些jar包提供了Java应用程序与SQL Server通信所需的功能。 要使用Java连接MSSQL,首先需要在项目中引入对应的JDBC驱动...
在这个主题中,我们将详细探讨如何使用Java和JSP与SQL Server 2012进行交互,并关注描述中提到的三个关键JAR包:msbase.jar、mssqlserver.jar和msutil.jar。 首先,让我们了解这三个JAR文件的作用: 1. msbase.jar...
在Java编程中,有时我们需要在运行时加载和执行外部的jar文件,这通常是出于灵活性、模块化或插件架构的需求。这个过程涉及到类加载器(Class Loaders)的概念,它是Java虚拟机(JVM)的一个核心特性。下面将详细...
标题中的“java mysql jar包”指的是这个连接器的Java归档(JAR)文件,它是Java应用程序连接到MySQL服务器的桥梁。 描述中提到的问题是Java开发者在尝试连接MySQL时遇到了问题,原因可能是缺少了`mysql-connector-...
在Java中,动态加载jar包的核心在于使用`java.lang.ClassLoader`类或其子类。ClassLoader是Java虚拟机(JVM)的一部分,负责将类的字节码加载到JVM中并转换为Class对象。默认情况下,JVM会使用系统类加载器来查找和...
在Java编程环境中,连接Oracle 12c数据库是常见的需求,尤其在开发企业级应用时。Oracle 12c是Oracle公司推出的最新版本的...在开发过程中,正确配置和使用这个驱动包对于构建稳定、高效的Java-Oracle连接至关重要。
这个过程展示了如何利用Java的反射API和自定义类加载器实现JAR文件的动态加载和执行。在实际应用中,可能还需要考虑类的版本冲突、安全性和性能优化等问题。例如,使用服务发现框架(如OSGi)来管理类加载和依赖,...
XML(eXtensible Markup Language)是一种用于存储和交换数据的标记语言...在项目中,可以将提供的"jdom_domrj"压缩包解压,获取到JDOM和DOM4J的jar文件,将其添加到项目的类路径中,就可以开始使用这些库来处理XML了。
Java连接MySQL数据库主要依赖于一个名为`mysql-connector-java`的驱动程序,它是一个Java语言编写的数据库连接器,使得Java应用程序能够与MySQL数据库进行通信。在本例中,我们看到的`mysql-connector-java-5.0.4-...
Caused by: java.lang.ClassNotFoundException: org.aspectj.weaver.reflect.ReflectionWorld$ReflectionWorldException at java.net.URLClassLoader$1.run(URLClassLoader.java:200) at java.security.Access...
### JAVA反射机制——Class类与Class对象的获取 #### 概述 在Java语言中,反射是一种强大的功能,允许程序在运行时动态地检查和修改自身的行为。这种能力是通过`java.lang.Class`类实现的,它提供了封装类或接口...
在Java编程语言中,`ClassNotFoundException`是一个非常常见的运行时异常,它属于`java.lang.ClassNotFoundException`,当Java虚拟机(JVM)试图动态加载一个类并无法找到对应的.class文件时,就会抛出这个异常。...
将这个jar包添加到项目的类路径(classpath)中是必要的,这样Java运行时环境才能找到并加载所需的驱动类。在传统的Java应用中,可以通过设置`CLASSPATH`环境变量或者在IDE(如Eclipse、IntelliJ IDEA)中配置类路径...
在本场景中,我们关注的是在MyEclipse集成开发环境下,如何配置和使用这三个关键的jar包:msbase.jar、mssqlserver.jar和msutil.jar。这些文件是Microsoft提供的JDBC驱动,被称为"Microsoft JDBC Driver for SQL ...
本话题将详细讲解如何使用Java连接SQL Server数据库所需的驱动jar包,以及它们的功能。 首先,Java连接SQL Server数据库时,需要的三个关键jar包是: 1. `msbase.jar`:这个文件包含了基础的SQL Server驱动程序,...
3. 或者在运行Java应用时,通过`-cp`或`--class-path`命令行选项指定包含jar文件的路径。 有了驱动,我们就可以编写Java代码来连接MySQL数据库了。以下是一个简单的示例: ```java import java.sql.Connection; ...