我正在尝试在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。*在自定义包中添加附加属性的包-
- 创建自定义包来包装
org.apache.cxf.*
包 -
在自定义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>
-
当你需要使用这些包时,你必须更新maven-bundle插件并显式指定import -
<Import-Package>org.apache.cxf.*;myidentifier="true",*</Import-Package>
我们使用这种方法在一些与AEM一起打包的包上使用更高版本,如Guava, AEM与Guava 15一起提供,而我们公开Guava 18,而不干扰系统对Guava 15的使用
你可以在这里阅读更多信息