Използвам CXF JAXRSClientFactory за създаване на прокси екземпляри от различни JAX-RS интерфейси. Дълбоко вътре тази фабрика извиква Proxy.newProxyInstance(), предавайки моя интерфейс и CXF клиентския интерфейс.
Под OSGi това работи чудесно, ако пакетът, който съдържа моя интерфейсен клас, импортира org.apache.cxf.jaxrs.client. Но един ден реших, че искам да скрия CXF от моите класове на приложения, така че създадох пакет, който капсулира клиентската фабрика в услуга. Сега получавам IllegalArgumentException от Proxy, казващ "MyInterface не се вижда от зареждащия клас" или "Клиентът не се вижда от зареждащия клас".
Проблемът е, че моят фабричен пакет импортира CXF, но не и моето приложение. И пакетът ми с приложения не импортира CXF. Така че никъде в контейнера няма програма за зареждане на класове, която да вижда както CXF клиентския клас, така и моя JAX-RS интерфейс.
Има ли начин да реша това, без да импортирам CXF в моите пакети приложения? Например, може ли фабричният ми пакет да създаде динамично нов класов зареждащ механизъм, който е обединението на двата класови зареждащи, така че да може да вижда както CXF, така и моите класове на приложение? Или мога да заблудя проксито да приеме двата интерфейса така или иначе?