java.lang.ClassCastException:com.sun.xml.internal.ws.client.sei.SEIStub无法强制转换为org.apache.cxf.frontend.clientproxy AEM OSGi

时间:2016-11-17 22:45:46

标签: osgi cq5 aem osgi-fragment embedded-osgi

我正在尝试在AEM的osgi环境中使用fuelsdk。我收到了这个错误 -

java.lang.ClassCastException:com.sun.xml.internal.ws.client.sei.SEIStub无法强制转换为org.apache.cxf.frontend.ClientProxy

这是因为OSGi在捆绑了fueldk依赖项的bundle之前加载了系统包。捆绑得到解决;此错误是在运行时。

如何强制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 个答案:

答案 0 :(得分: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 here

的更多信息

更新 - 你可以强制你的包使用自定义包而不是Java包,为此你必须将org.apache.cxf。*包包装在一个带有附加属性的自定义包中 -

  1. 创建自定义捆绑包以包装org.apache.cxf.*
  2. 在自定义捆绑包POM中,将maven-bundle插件配置为(注意带有;myidentifier="true";mandatory:="myidentifier"的Export-Package,在此处提供正确的标识符名称,如果* doesn&,您可能还必须在包级别执行此操作#39; t work)

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

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

    我们正在使用这种方法在与Guava一起打包的几个捆绑包上使用更高版本,AEM附带Guava 15,而我们暴露Guava 18而不与系统使用Guava 15进行交互

    您可以阅读更多相关信息here