不能强制转换为org.apache.cxf.frontend.clientproxy AEM OSGi



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

. lang。ClassCastException: com.sun.xml.internal.ws.client.sei.SEIStub不能强制转换为org.apache.cxf.frontend.ClientProxy

这是因为OSGi会在嵌入了燃料sdk依赖的bundle之前加载系统bundle。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()中使用哪个类

我应该在工厂使用哪个地址。setAddress();是端点地址吗?——https://webservice.s6.exacttarget.com/Service.asmx

非常感谢帮助由于

您可以尝试更新<your installation>/crx-quickstart/conf/sling.properties中的org.osgi.framework.bootdelegation属性

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

您可以在这里阅读更多关于sling.properties的信息

-您可以强制您的包使用自定义包而不是Java包,要做到这一点,您必须包装您的org.apache.cxf。*在自定义包中添加附加属性的包-

  1. 创建自定义包来包装org.apache.cxf.*
  2. 在自定义bundle POM中,将maven-bundle plugin配置为(注意Export-Package with ;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 -

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

我们使用这种方法在一些与AEM一起打包的包上使用更高版本,如Guava, AEM与Guava 15一起提供,而我们公开Guava 18,而不干扰系统对Guava 15的使用

你可以在这里阅读更多信息

相关内容

  • 没有找到相关文章

最新更新