2016-11-17 1 views
0

J'essaie d'utiliser le fuelsdk dans un environnement osgi dans AEM. Je reçois cette erreur -java.lang.ClassCastException: com.sun.xml.internal.ws.client.sei.SEIStub ne peut pas être converti en org.apache.cxf.frontend.clientproxy AEM OSGi

java.lang.ClassCastException: com.sun.xml.internal.ws.client.sei.SEIStub ne peut pas être jeté à org.apache.cxf.frontend.ClientProxy

C'est car OSGi charge le bundle système avant le bundle dans lequel la dépendance de fuelsdk a été intégrée. Le paquet est résolu. cette erreur est pendant l'exécution.

Comment puis-je forcer le chargeur de classe OSGi à sélectionner org.apache.cxf.frontend.ClientProxy au lieu de com.sun.xml.internal.ws.client.sei.SEIStub lors de l'exécution? Puis-je utiliser la combinaison de la directive 'uses'; et/ou importer/exporter des paquets?

J'ai suggéré de créer le client à l'aide -

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(); 

Je voudrais savoir quelle classe dois-je utiliser dans factory.setServiceClass();

et

quelle adresse dois-je utiliser dans factory.setAddress(); est-ce l'adresse du point de terminaison? - https://webservice.s6.exacttarget.com/Service.asmx

aide est très appréciée Merci

Répondre

1

Vous pouvez essayer de mettre à jour la propriété org.osgi.framework.bootdelegation dans <your installation>/crx-quickstart/conf/sling.properties

org.osgi.framework.bootdelegation= org.apache.cxf.*, ${org.apache.sling.launcher.bootdelegation}

Vous pouvez en savoir plus sur sling.propertieshere

MISE À JOUR - Vous pouvez forcer votre paquet à utiliser le paquet personnalisé plutôt que le paquet Java, pour cela vous devrez envelopper votre org.apache.cxf.* Paquets dans un paquet personnalisé avec des propriétés supplémentaires -

  1. Créer un paquet personnalisé pour envelopper vos org.apache.cxf.* paquets
  2. Dans le POM bundle personnalisé, configurer plugin maven-paquet comme (notez Export-Package avec ;myidentifier="true";mandatory:="myidentifier", donner un nom d'identifiant approprié ici et vous pouvez aussi le faire au niveau du package si * ne fonctionne pas)

    <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. si jamais vous avez besoin d'utiliser ces paquets, vous devez mettre à jour le plugin maven-paquet et spécifier l'importation expl icitly -

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

Nous utilisons cette approche pour utiliser la version plus sur quelques paquets qui sont emballés avec AEM comme la goyave, AEM est livré avec Goyave 15 pendant que nous exposons Goyave 18 sans interfaring avec l'utilisation du système de goyave 15

Vous pouvez en lire davantage here

+0

Malheureusement; cela n'a aucun effet. L'erreur est sur cette ligne-- soapClient = ClientProxy.getClient (soap); L'erreur est au moment de l'exécution; le bundle se résout correctement. java.lang.ClassCastException: com.sun.xml.internal.ws.client.sei.SEIStub ne peut pas être converti en org.apache.cxf.frontend.ClientProxy Puis-je forcer le classloader du bundle à choisir org.apache.cxf.frontend.ClientProxy au lieu de com.sun.xml.internal.ws.client.sei.SEIStub seulement pour ce paquet? – cqsapientuser

+1

Merci d'avoir suggéré l'approche; même si nous avons maintenant une nouvelle erreur, mais cela a aidé à aller de l'avant. Et a également appris une nouvelle chose liée à OSGi. – cqsapientuser