1

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

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

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

如何强制 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

非常感谢帮助谢谢

4

1 回答 1

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

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

  1. 创建一个自定义包来包装你的org.apache.cxf.*
  2. 在自定义包 POM 中,将 maven-bundle 插件配置为(注意 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-Package>org.apache.cxf.*;myidentifier="true",*</Import-Package>

我们正在使用这种方法在一些与 AEM (如 Guava)一起打包的捆绑包上使用更高版本,AEM 带有 Guava 15,而我们公开 Guava 18 而不会干扰系统对 Guava 15 的使用

你可以在这里阅读更多关于它的信息

于 2016-11-18T17:46:27.570 回答