java.lang.ClassCastException: com.sun.xml.internal.ws.client.sei.SEIStub не может быть приведен к org.apache.cxf.frontend.clientproxy AEM OSGi
Я пытаюсь использовать fuelsdk в среде osgi в AEM. Я получаю эту ошибку -
java.lang.ClassCastException: com.sun.xml.internal.ws.client.sei.SEIStub не может быть приведен к org.apache.cxf.frontend.ClientProxy
Это связано с тем, что OSGi загружает системный комплект перед тем, в который была встроена зависимость fuelsdk. Связка разрешается; эта ошибка во время выполнения.
Как заставить загрузчик классов OSGi выбрать во время выполнения org.apache.cxf.frontend.ClientProxy вместо com.sun.xml.internal.ws.client.sei.SEIStub?
Могу ли я использовать комбинацию директиву "использует"; и / или импорт / экспорт пакетов?
Мне предложили создать клиента, используя -
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.getInInterceptors().add(new LoggingInInterceptor());
factory.getOutInterceptors().add(new LoggingOutInterceptor());
factory.setServiceClass(HelloWorld.class);
factory.setAddress("http://localhost:9000/helloWorld");
soapClient = (Client) factory.create();
Я хотел бы знать, какой класс я должен использовать в factory.setServiceClass();
а также
какой адрес я должен использовать в factory.setAddress(); это адрес конечной точки? - https://webservice.s6.exacttarget.com/Service.asmx
Помощь высоко ценится Спасибо
1 ответ
Вы можете попробовать обновить org.osgi.framework.bootdelegation
недвижимость в <your installation>/crx-quickstart/conf/sling.properties
org.osgi.framework.bootdelegation= org.apache.cxf.*, ${org.apache.sling.launcher.bootdelegation}
Вы можете прочитать больше о sling.properties
Вот
ОБНОВЛЕНИЕ - Вы можете заставить свой пакет использовать пользовательский пакет, а не Java, для этого вам нужно будет обернуть ваши пакеты org.apache.cxf.* В пользовательский пакет с дополнительными свойствами -
- Создайте собственный пакет, чтобы обернуть
org.apache.cxf.*
пакеты В пользовательском POM пакета настройте подключаемый модуль maven-bundle как (обратите внимание на Export-Package с
;myidentifier="true";mandatory:="myidentifier"
, дайте здесь правильное имя идентификатора, и вам, возможно, придется сделать это на уровне пакета, если * не работает)<plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-bundle-plugin</artifactId> <configuration> <instructions> <Export-Package> org.apache.cxf.*;myidentifier="true";mandatory:="myidentifier" </Export-Package> <Private-Package> </Private-Package> <Import-Package> * </Import-Package> <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName> <Bundle-Activator>${project.artifactId}.Activator</Bundle-Activator> <Include-Resource> {maven-resources} </Include-Resource> <Embed-Dependency> <!-- list of jar's to embed, exposing the Exporting packages. Comma separated--> </Embed-Dependency> <Embed-Transitive>true</Embed-Transitive> </instructions> </configuration> </plugin>
Где бы вам ни понадобилось использовать эти пакеты, вам придется обновить плагин maven-bundle и явно указать импорт -
<Import-Package>org.apache.cxf.*;myidentifier="true",*</Import-Package>
Мы используем этот подход для использования более высокой версии на нескольких пакетах, которые поставляются с AEM, такими как Guava, AEM поставляется с Guava 15, в то время как мы выставляем Guava 18, не вмешиваясь в использование системой Guava 15.
Вы можете прочитать больше об этом здесь