weberviceが照会されるArquillian(1.1.12.Final)経由でTomcat 8.5.11にデプロイされたアプリケーションがあります。アプリケーションには、提供された依存関係としてApache CXF 3.1.10があります。すべてのcxfとspring JARがTomcatのendorsed
ライブラリディレクトリに追加されました(私は承認されたすべてのJARが正しくロードされていることを確認しました)。Tomcat8 org.apache.cxf.BusFactory.getBusFactoryClass BusFactory実装クラス名の決定に失敗しました
これにもかかわらず、上記のエラーメッセージが表示されます。スタックトレースの関連ビットは
java.lang.NullPointerException
at org.apache.cxf.BusFactory.getBusFactoryClass(BusFactory.java:397)
at org.apache.cxf.BusFactory.newInstance(BusFactory.java:317)
at org.apache.cxf.BusFactory.newInstance(BusFactory.java:304)
at org.apache.cxf.BusFactory.getDefaultBus(BusFactory.java:107)
at org.apache.cxf.BusFactory.createThreadBus(BusFactory.java:244)
at org.apache.cxf.BusFactory.getThreadDefaultBus(BusFactory.java:228)
at org.apache.cxf.jaxws.ServiceImpl.initialize(ServiceImpl.java:135)
at org.apache.cxf.jaxws.ServiceImpl.<init>(ServiceImpl.java:129)
at org.apache.cxf.jaxws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:82)
at javax.xml.ws.Service.<init>(Service.java:77)
[省略]
java.lang.NullPointerException
at org.apache.cxf.bus.extension.ExtensionManagerImpl.load(ExtensionManagerImpl.java:166)
at org.apache.cxf.bus.extension.ExtensionManagerImpl.load(ExtensionManagerImpl.java:160)
at org.apache.cxf.bus.extension.ExtensionManagerImpl.load(ExtensionManagerImpl.java:107)
at org.apache.cxf.bus.extension.ExtensionManagerBus.<init>(ExtensionManagerBus.java:178)
at org.apache.cxf.bus.extension.ExtensionManagerBus.<init>(ExtensionManagerBus.java:185)
at org.apache.cxf.bus.CXFBusFactory.createBus(CXFBusFactory.java:40)
at org.apache.cxf.bus.CXFBusFactory.createBus(CXFBusFactory.java:36)
at org.apache.cxf.bus.CXFBusFactory.createBus(CXFBusFactory.java:32)
at org.apache.cxf.bus.spring.SpringBusFactory.createBus(SpringBusFactory.java:146)
at org.apache.cxf.bus.spring.SpringBusFactory.createBus(SpringBusFactory.java:122)
at org.apache.cxf.bus.spring.SpringBusFactory.createBus(SpringBusFactory.java:94)
at org.apache.cxf.bus.spring.SpringBusFactory.createBus(SpringBusFactory.java:83)
at org.apache.cxf.BusFactory.getDefaultBus(BusFactory.java:107)
at org.apache.cxf.BusFactory.createThreadBus(BusFactory.java:244)
at org.apache.cxf.BusFactory.getThreadDefaultBus(BusFactory.java:228)
at org.apache.cxf.jaxws.ServiceImpl.initialize(ServiceImpl.java:135)
at org.apache.cxf.jaxws.ServiceImpl.<init>(ServiceImpl.java:129)
at org.apache.cxf.jaxws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:82)
at javax.xml.ws.Service.<init>(Service.java:77)
NPEは、Webサービスの初期化中に発生します。失敗したコードが
// org.apache.cxf.bus.extension.ExtensionManagerImpl
final void load(String resource) throws IOException {
if (loader != getClass().getClassLoader()) {
load(resource, getClass().getClassLoader());
}
load(resource, loader);
}
であることはgetClass().getClassLooader()
への呼び出しがnull
を返すことが判明しました。私はこの結果に戸惑って、getClass().getClassLoader() is null, why?がまだ分かりません。これは、CXFがbootclasspath(!?!)を使ってロードされたことを意味すると思います。