2016-11-17 3 views
0

Ich versuche, die foiledsdk in einer osgi-Umgebung zu verwenden in AEM. Ich bin diesen Fehler -java.lang.ClassCastException: com.sun.xml.internal.ws.client.sei.SEISTtub kann nicht in org.apache.cxf.frontend.clientproxy umgewandelt werden AEM OSGi

java.lang.ClassCastException: com.sun.xml.internal.ws.client.sei.SEIStub kann nicht auf org.apache.cxf.frontend.ClientProxy gegossen werden

Dies ist weil OSGi das Systempaket vor dem Paket lädt, in das die Abhängigkeit von finesdk eingebettet wurde. Das Bündel wird aufgelöst. Dieser Fehler tritt während der Laufzeit auf.

Wie kann ich den OSGi-Klassenlader zwingen, org.apache.cxf.frontend.ClientProxy anstelle von com.sun.xml.internal.ws.client.sei.SEIStub zur Laufzeit auszuwählen?

Kann ich die Kombination von 'Verwendungen' verwenden; und/oder Pakete importieren/exportieren?

Ich habe vorgeschlagen, den Client erstellen mit -

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

Ich würde gerne wissen, welche Klasse sollte ich in factory.setServiceClass();

und

welche Adresse sollte ich in factory.setAddress verwenden(); ist es die Endpunktadresse? - https://webservice.s6.exacttarget.com/Service.asmx

Hilfe wird sehr geschätzt Dank

Antwort

1

Sie könnten versuchen, die org.osgi.framework.bootdelegation Eigenschaft in <your installation>/crx-quickstart/conf/sling.properties

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

Aktualisierung können Sie mehr lesen über sling.propertieshere

UPDATE - Sie könnten Ihr Paket so erzwingen, dass das benutzerdefinierte Paket als das Java-Paket verwendet wird. Dazu müssen Sie Ihre org.apache.cxf umbrechen.* Pakete in einem benutzerdefinierten Bündel mit zusätzlichen Eigenschaften -

  1. ein eigenes Bündel Erstellen Sie Ihre org.apache.cxf.* Pakete
  2. Im benutzerdefinierten Bündel POM wickeln, mit ;myidentifier="true";mandatory:="myidentifier" Maven-Bundle Plugin wie (bemerken Export-Paket konfigurieren, geben eine richtige Bezeichnernamen hier und Sie können dies auch auf Paketebene zu tun haben, wenn * nicht funktioniert)

    <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. Wo immer Sie diese Pakete verwenden, benötigen Sie das maven-Bundle Plugin aktualisieren müssen und Spezifizieren Sie import expl icitly -

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

Wir mit diesem Ansatz zu verwenden, eine höhere Version auf einige Pakete, die mit AEM wie Guava kommen verpackt, kommt AEM mit Guava 15, während wir Guava aussetzen 18 ohne Systems Nutzung von interfaring Guava 15

Sie können mehr über sie here

+0

lesen Leider; Es hat keine Wirkung. Der Fehler liegt bei dieser Zeile: soapClient = ClientProxy.getClient (soap); Der Fehler ist zur Laufzeit; Das Paket wird ordnungsgemäß aufgelöst. java.lang.ClassCastException: com.sun.xml.internal.ws.client.sei.SEISTtub kann nicht in org.apache.cxf.frontend.ClientProxy umgewandelt werden. Kann ich den Bundle-Klassenlader zwingen, org.apache.cxf.frontend.ClientProxy auszuwählen statt com.sun.xml.internal.ws.client.sei.SEIStub nur für dieses Bundle? – cqsapientuser

+1

Danke, dass Sie den Ansatz vorgeschlagen haben; obwohl wir jetzt einen neuen Fehler bekommen, aber dies hat geholfen, voranzukommen. Und auch eine neue Sache mit OSGi gelernt. – cqsapientuser

Verwandte Themen