0

リソース アダプタ内から WSDL ベースの Web サービスを呼び出そうとすると、次の例外が発生します。

SEVERE [org.apache.cxf.BusFactory] (JmsMessageDispatcher#2) Failed to determine BusFactory implementation class name.: java.lang.ClassCastException: class org.apache.cxf.bus.spring.SpringBusFactory
at java.lang.Class.asSubclass(Class.java:3126) [rt.jar:1.7.0_45]
at org.apache.cxf.BusFactory.getBusFactoryClass(BusFactory.java:333) [cxf-api-2.5.9.jar:2.5.9]
at org.apache.cxf.BusFactory.newInstance(BusFactory.java:260) [cxf-api-2.5.9.jar:2.5.9]
at org.apache.cxf.BusFactory.newInstance(BusFactory.java:247) [cxf-api-2.5.9.jar:2.5.9]
at org.apache.cxf.BusFactory.getDefaultBus(BusFactory.java:99) [cxf-api-2.5.9.jar:2.5.9]
at org.apache.cxf.BusFactory.createThreadBus(BusFactory.java:193) [cxf-api-2.5.9.jar:2.5.9]
at org.apache.cxf.BusFactory.getThreadDefaultBus(BusFactory.java:182) [cxf-api-2.5.9.jar:2.5.9]
at org.apache.cxf.BusFactory.getThreadDefaultBus(BusFactory.java:166) [cxf-api-2.5.9.jar:2.5.9]
at org.apache.cxf.frontend.ClientProxyFactoryBean.configureObject(ClientProxyFactoryBean.java:99) [cxf-rt-frontend-simple-2.5.9.jar:2.5.9]
at org.apache.cxf.frontend.ClientProxyFactoryBean.create(ClientProxyFactoryBean.java:131) [cxf-rt-frontend-simple-2.5.9.jar:2.5.9]
at org.apache.cxf.jaxws.JaxWsProxyFactoryBean.create(JaxWsProxyFactoryBean.java:155) [cxf-rt-frontend-jaxws-2.5.9.jar:2.5.9]

上記のリソース アダプタのデプロイ中に、次の警告が表示されます。

WARN  [org.jboss.as.server.deployment] (MSC service thread 1-1) JBAS015893: Encountered invalid class name 'org.springframework.context.ApplicationContext,org.springframework.beans.BeansException' for service type 'org.apache.cxf.bus.factory'

私は彼らが言うようだと思います:警告は遅かれ早かれエラーになります;)

次の依存関係を pom.xml に既に追加しているため、この質問への回答は役に立ちませんでした。

<dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-api</artifactId>
        <version>2.5.9</version>    
</dependency>

リソース アダプタは、JCA コネクタ (.rar) としてデプロイされます。

助けてくれてありがとう!

4

1 に答える 1

1

リソース アダプターと一緒に Spring と CXF を提供しないでください。それらをモジュールの依存関係として含めます。

RA プロジェクトで:

  • pom.xml: CXF ライブラリに提供されたスコープを使用する
  • META-INF/jboss-deployment-structure.xml を RAR アーカイブに追加

META-INF/jboss-deployment-structure.xml

<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
  <deployment>
    <dependencies>
      <module name="org.jboss.ws.cxf.jbossws-cxf-client" services="import" />
      <module name="org.apache.cxf"> <!-- .impl removed -->
        <imports>
          <include path="META-INF" />
          <include path="META-INF/cxf" />
        </imports>
      </module>
      <module name="org.springframework.spring">
        <imports>
          <include path="META-INF" />
        </imports>
      </module>
    </dependencies>
  </deployment>
</jboss-deployment-structure>

spring は JBoss の一部ではないため、新しいモジュールとしてデプロイする必要があります。

  • モジュールディレクトリを作成 $JBOSS_HOME/modules/org/springframework/spring/main/
  • module.xml を追加
  • module.xml にリストされている JAR ファイルをディレクトリに追加します。

モジュール.xml

<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.1" name="org.springframework.spring">
<resources>
    <resource-root path="spring-aop-3.2.4.RELEASE.jar" />
    <resource-root path="spring-beans-3.2.4.RELEASE.jar" />
    <resource-root path="spring-context-3.2.4.RELEASE.jar" />
    <resource-root path="spring-core-3.2.4.RELEASE.jar" />
    <resource-root path="spring-expression-3.2.4.RELEASE.jar" />
    <resource-root path="spring-web-3.2.4.RELEASE.jar" />
</resources>
<dependencies>       
    <module name="javax.api" />
    <module name="javax.servlet.api" />
    <module name="javax.transaction.api" />
    <module name="org.apache.commons.logging" />
</dependencies>
</module>  

これが JBoss の奥深くにあるクラスローディングのバグなのかどうかはわかりません。

于 2013-11-20T08:36:52.557 に答える