我使用CXF JAXRSClientFactory从各种JAX-RS接口创建代理实例。在内心深处,这个工厂调用代理。newProxyInstance(),传入我的接口和CXF客户端接口。
在OSGi下,如果包含我的接口类的捆绑包导入,这将非常有效org.apache.cxf.jaxrs.client.但是有一天,我决定从我的应用程序类中隐藏CXF,所以我创建了一个捆绑包,将客户端工厂封装在服务中。现在我从代理那里得到IllegalArgumentExcema,说“我的界面在类加载器中不可见”或“客户端在类加载器中不可见”。
问题是我的工厂捆绑包导入了CXF,但没有导入我的应用程序。我的应用程序包不导入CXF。因此,容器中的任何地方都没有可以看到CXF客户端类和我的JAX-RS接口的类加载器。
有没有办法在不将CXF导入我的应用程序包的情况下解决这个问题?例如,我的工厂包能否动态生成一个新的类加载器,它是两个类加载器的联合体,这样它就可以同时看到CXF和我的应用程序类?或者我可以骗代理接受这两个接口吗?
从CXF 2.6.1开始,这是一个可以解决的问题。已解决的问题CXF-4290添加了一个新的API,将自定义类加载器传递给JAXRSClientFactory。再加上新的组织。阿帕奇。cxf。贾克斯。客户ProxyClassLoader类,我现在可以为任意应用程序类制作代理。
ProxyClassLoader classLoader = new ProxyClassLoader();
classLoader.addLoader(resourceApiClass.getClassLoader());
classLoader.addLoader(JAXRSClientFactoryBean.class.getClassLoader());
JAXRSClientFactoryBean bean = new JAXRSClientFactoryBean();
bean.setAddress(baseUrl);
bean.setServiceClass(resourceApiClass);
bean.setClassLoader(classLoader);
return bean.create(resourceApiClass);
我试图在程序中加载一个jar文件来调用不同的方法。我有一个类来完成这项工作,但是该类使用加载jar文件,它依赖于系统类加载程序,因此,例如,如果加载的jar执行它完成整个应用程序的执行,终止当前运行的Java虚拟机。我的意图是,如果加载的jar最后一次这样做,它只完成jar,而不是整个应用程序。此外,我希望能够关闭jar,以便在需要时可以稍后重新启动它。我使用以下代码从jar实例化所需的类,并从我
大话来自一个程序员的反思 程序员大军鱼龙混杂,水平的高低无法简单的从一个功能完成情况来评定,同样一个需求,功能都可以完成,但是不同程序员完成质量会不一样,完成质量的好坏需要从多方面评定,可以参考这些条件:易维护,易拓展,高可用,高稳定,高性能,安全性,容错,风控 洞察身边的程序猿,可以归类出这几种类型: 理论型,理论能力很强,对前沿技术略有了解,性格比较强势,需求分析和方案设计头头是道,对自己的设
我想将多个数据库的更改聚合到一个数据库中,所以我想在每个数据库旁边运行一个Debezium连接器和一个Kafka服务器/代理,并使用Kafka接收器连接器从所有这些Kafka中消费写入一个数据库。 问题是,我是否可以使用单个 Kafka 接收器连接器实例同时使用来自多个独立(不是集群)的 Kafka 代理。
JVM如何进行内部管理 如果在两个不同的用户定义的类装入器中装入相同版本的类装入? 2.如果在两个不同的用户定义类加载程序(相同的类名和包)中加载不同版本的类。如果JVM加载了将在我的应用程序中引用的两个类。 我们知道JVM在类、包 我想知道JVM内部如何处理这些情况。
我试图修改几个类的字节代码,这些类的打包jar文件不在类路径中-它们是在给定URL的运行时由自定义的加载的。我尝试使用和来拦截那些类,但失败了。类加载器是遗留项目的一部分,因此我无法直接对其进行更改。 代理可以很好地处理AppClassLoader“本地”加载的类,但只会忽略那些由自定义类加载器加载的类。 CustomClassLoader: 我的代理中使用的ClassFileTransforme
我正在考虑创建一个独立的Kafka生产者,它作为守护进程运行,通过套接字接收消息,并将其可靠地发送给Kafka。 但是,我决不能是第一个想到这个想法的人。这样做的目的是避免使用PHP或Node编写Kafka生成器,而只是通过套接字将消息从这些语言传递到独立的守护进程,这些语言负责传递,而主应用程序则一直在做自己的事情。 此守护进程应负责在发生中断时进行重试传递,并充当服务器上运行的所有程序的传递点