我试图修改几个类的字节码,这些类的打包 jar 文件不在类路径中 - 它们ClassLoader在运行时由自定义加载给定 URL。我试图使用java agentwithClassFileTransformer希望拦截这些类,但失败了。类加载器是遗留项目的一部分,因此我无法直接对其进行更改。
代理在 AppClassLoader “本地”加载的类上工作正常,但只是忽略自定义类加载器加载的类。
自定义类加载器:
public class CustomClassLoader extends URLClassLoader {
public CustomClassLoader(URL[] urls) {
super(urls, CustomClassLoader.class.getClassLoader());
}
// violates parent-delegation pattern
@Override
protected Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException {
synchronized (getClassLoadingLock(name)) {
Class<?> clazz = findLoadedClass(name);
if (clazz == null) {
try {
clazz = findClass(name);
} catch (ClassNotFoundException e) {
}
if (clazz == null) {
clazz = getParent().loadClass(name);
}
}
if …Run Code Online (Sandbox Code Playgroud) 我想在我的jdk6\jre\lib\security\java.policy文件中添加一个禁止来创建一些被appengine列入黑名单的类.例如,我希望我的本地jvm在应用程序尝试实例化时抛出异常javax.naming.NamingException.
有可能的?
我会在这里解释我的具体问题.Google提供的服务(GAE-google应用引擎)对可以使用的类有一些限制.例如,不实例化javax.naming包中的JNDI类.他们还提供了一个测试服务器,可以用来在我的机器上测试这个应用程序,但是这个服务器允许这样的类,并且可以提供代码.您发现只有在将应用程序上传到Google后才使用黑名单类.我在想是否可以在开发jvm上进行这样的黑名单强制执行.否则,我认为这很容易,他们可能已经提供了这样的政策文件.
我正在尝试将我的应用程序(打包在.war文件中)部署在JBoss 4.2.3上正常工作到JBoss 5.1(使用java 5).
目前在部署期间我在server.log中看到错误:
...引起:org.jboss.xb.binding.JBossXBRuntimeException:无法创建新的SAX解析器
...引起:java.lang.ClassCastException:org.apache.xerces.parsers.XML11Configuration
根据这一线索在JBoss的论坛上,我需要我的应用程序隔离开来.我的问题:
<jboss-web>
<loader-repository>
tld.mydomain:loader=foo.war
</loader-repository>
</jboss-web>
Run Code Online (Sandbox Code Playgroud) 以下是问题的简化版本:
SomeClass c = (SomeClass) obj.getSomeClassParent()
Run Code Online (Sandbox Code Playgroud)
并非总是如此,有时会触发异常
org.somepackage.SomeClass can't be cast to org.somepackage.SomeClass
Run Code Online (Sandbox Code Playgroud)
这怎么可能 ?我想这与JAI imageio是本机lib的事实有关,但是中继怎么会发生这种情况?我可能错过了什么,但是什么?
I'm using JAI imageio version 1.1
dcm4che 2.0.21 DICOM lib
Run Code Online (Sandbox Code Playgroud)
这是原始代码
ImageInputStream iis = ImageIO.createImageInputStream(src);
Iterator<ImageReader> iter = ImageIO.getImageReadersByFormatName("DICOM");
ImageReader reader = iter.next();
DicomImageReadParam param = (DicomImageReadParam) reader.getDefaultReadParam();
Run Code Online (Sandbox Code Playgroud)
而原来的例外
org.dcm4che2.imageio.plugins.dcm.DicomImageReadParam can't be cast to
org.dcm4che2.imageio.plugins.dcm.DicomImageReadParam
Run Code Online (Sandbox Code Playgroud)
java java-native-interface casting classloader javax.imageio
我有一个嵌入在一个包中的jar,需要获取与它一起打包的资源,如下所示:
MyBundle
-\ src
-\lib
-\MyEmbeddedJar
-\src
-\SomeClass
-\someResource.xml
Run Code Online (Sandbox Code Playgroud)
我试图从'SomeClass'访问'someResource.xml',如下所示:
SomeClass.class.getResource( "someResource.xml" );
Run Code Online (Sandbox Code Playgroud)
但我没有运气.我已经尝试了附加CWD的几个变体(例如:'./ someResource.xml'),但我无法加载此资源.
我知道"正确"的方法是使用Activator来获取正确的类加载器,但嵌入式jar可以在其他项目中使用,所以我不想为了获得它而必须添加OSGi特定代码与OSGi玩得很好.
有没有其他方法可以在OSGi的OSGi中加载资源?
我需要看一下特定包中的文件名.目前,我正在做以下事情:
ClassLoader loader = Thread.currentThread().getContextClassLoader();
URL packageUrl = loader.getResource(getPackage().replace('.', '/'));
File packageDir = new File(packageUrl.getFile());
// Work with the files inside the directory
Run Code Online (Sandbox Code Playgroud)
这实际上在Eclipse中工作得很好,因为默认情况下它不打包我的应用程序.当我从一个jar文件运行它,但是,我得到一个NullPointerException上packageUrl.
那么,我如何获得jar中包的内容列表?我的研究建议使用getResourceAsStream,但我不太确定如何探索一个目录InputStream,如果可能的话.
我正在开发一个使用Java servlet的WebSphere 6.1应用程序.在我的servlet中,我定义了一个1L的序列版本ID.在部署并运行我的应用程序时,我收到以下类型的LinkageError(来自服务器日志):
[5/9/11 15:14:26:868 EDT] 0000001c WebApp
E [Servlet Error]-[ManageRecordsConsumerServlet]: java.lang.Exception:
java.lang.LinkageError: LinkageError while defining class:
<redacted>.docindexupdate.batch.servlet.ManageRecordsConsumerServlet
Could not be defined due to: (<redacted>/docindexupdate/batch/servlet
/ManageRecordsConsumerServlet) class name must be a string at offset=2074
This is often caused by having a class defined at multiple
locations within the classloader hierarchy. Other potential causes
include compiling against an older or newer version of the class
that has an incompatible method signature.
Run Code Online (Sandbox Code Playgroud)
我不确定是什么问题.我之前在定义串行版本uid时看到了这一点,并认为通过定义并保持一致,类文件的未来更新将成功运行.在编译或部署到服务器期间没有错误.是否有可能在WebSphere实例的某个地方缓存旧版本的servlet(我目前只在我的开发机器上部署)?
该
class name must be a string at offset=2074 …Run Code Online (Sandbox Code Playgroud) 有没有一种标准的.NET类加载器工作方式?
说我编译这段代码:
Option Strict On : Option Explicit On
Module Module1
Sub Main()
System.Diagnostics.Debug.WriteLine("Main")
Dim g = C.A
End Sub
End Module
Public Class C
Shared Sub New()
System.Diagnostics.Debug.WriteLine("Init C")
End Sub
Shared Property A As New A
End Class
Public Class A
Shared Sub New()
System.Diagnostics.Debug.WriteLine("Init A")
End Sub
Public Sub New()
System.Diagnostics.Debug.WriteLine("A Constructor")
End Sub
End Class
Run Code Online (Sandbox Code Playgroud)
我可以保证编译后的代码(在所有实现的平台中)都有以下输出吗?
Main
Init A
A Constructor
Init C
Run Code Online (Sandbox Code Playgroud) 我一直在网上做很多研究,但似乎无法找到我的问题的确切答案,这就是为什么我转向本网站的专家.
使用java和Tomcat进行开发时,我有一个处理数据库连接的Singleton类.所以问题是当不同的用户连接到我的Web应用程序时,我的服务器端java代码执行它是否有自己的单例类?
例如:
用户A登录到我的站点.创建了我的单例实例.
用户B登录到我的站点,在两次执行java代码之间是否存在相同的对象(单例)?或者是用户A和用户B的每次执行获得不同的单身人士?
谢谢.
我正在学习java,并且在通过ClassNotFoundException概念的过程中,我遇到了这个术语Class.forName("xyz");.我知道这是加载课程的一种方式.我的问题是,在java中加载类的不同方法有哪些?什么时候使用哪一个?什么比其他更受欢迎?