我使用 CXF JAXRSClientFactory 从各种 JAX-RS 接口创建代理实例。在内部,这个工厂调用 Proxy.newProxyInstance(),传入我的接口和 CXF 客户端接口。
在 OSGi 下,如果包含我的接口类的包导入 org.apache.cxf.jaxrs.client,这将非常有用。但是有一天我决定要从我的应用程序类中隐藏 CXF,所以我创建了一个包,将客户端工厂封装在一个服务中。现在我从 Proxy 得到 IllegalArgumentException 说“MyInterface 在类加载器中不可见”或“客户端在类加载器中不可见”。
问题是我的工厂包导入 CXF 但不是我的应用程序。而且我的应用程序包不导入 CXF。因此,容器中的任何地方都没有可以看到 CXF 客户端类和我的 JAX-RS 接口的类加载器。
有没有办法在不将 CXF 导入我的应用程序包的情况下解决这个问题?例如,我的工厂包是否可以动态创建一个新的类加载器,它是两个类加载器的联合,所以它可以看到 CXF 和我的应用程序类?或者我可以欺骗代理接受这两个接口吗?