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.* В пользовательский пакет с дополнительными свойствами -

  1. Создайте собственный пакет, чтобы обернуть org.apache.cxf.* пакеты
  2. В пользовательском 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>
    
  3. Где бы вам ни понадобилось использовать эти пакеты, вам придется обновить плагин maven-bundle и явно указать импорт -

<Import-Package>org.apache.cxf.*;myidentifier="true",*</Import-Package>

Мы используем этот подход для использования более высокой версии на нескольких пакетах, которые поставляются с AEM, такими как Guava, AEM поставляется с Guava 15, в то время как мы выставляем Guava 18, не вмешиваясь в использование системой Guava 15.

Вы можете прочитать больше об этом здесь

Другие вопросы по тегам