我正在尝试在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
非常感谢帮助 感谢
答案 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。*包包装在一个带有附加属性的自定义包中 -
org.apache.cxf.*
包在自定义捆绑包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>
无论您何时需要使用这些软件包,都必须更新maven-bundle插件并明确指定import -
<Import-Package>org.apache.cxf.*;myidentifier="true",*</Import-Package>
我们正在使用这种方法在与Guava一起打包的几个捆绑包上使用更高版本,AEM附带Guava 15,而我们暴露Guava 18而不与系统使用Guava 15进行交互
您可以阅读更多相关信息here