2016-11-17 9 views
0

Я пытаюсь использовать fuelsdk в среде osgi в AEM. Я получаю эту ошибку -java.lang.ClassCastException: com.sun.xml.internal.ws.client.sei.SEIStub нельзя отнести к org.apache.cxf.frontend.clientproxy AEM OSGi

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 во время выполнения?

Могу ли я использовать комбинацию директивы 'uses'; и/или импортировать/экспортировать пакеты?

Я предложил создать клиент с помощью -

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.propertieshere

UPDATE - Вы можете принудительно использовать свой пакет для использования настраиваемого пакета, чем Java, для этого вам придется обернуть ваш org.apache.cxf.* Пакеты в пользовательских пачке с дополнительными свойствами -

  1. Создание пользовательского узелок, чтобы обернуть ваши org.apache.cxf.* пакеты
  2. В пользовательском расслоении POM, настроить Maven-расслоением плагин, как (обратите внимание, Экспортно-пакет с ;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-плагин и расслоение указать import expl icitly -

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

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

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

+0

К сожалению, это не имеет никакого эффекта. Ошибка в этой строке: soapClient = ClientProxy.getClient (мыло); Ошибка во время выполнения; пакет правильно решает. java.lang.ClassCastException: com.sun.xml.internal.ws.client.sei.SEIStub не может быть передан в org.apache.cxf.frontend.ClientProxy Могу ли я заставить загрузчик классов загрузить org.apache.cxf.frontend.ClientProxy вместо com.sun.xml.internal.ws.client.sei.SEIStub только для этого пакета? – cqsapientuser

+1

Спасибо за предложение подхода; хотя сейчас мы получаем новую ошибку, но это помогло двигаться вперед. А также узнал о новой вещи, связанной с OSGi. – cqsapientuser