0

私は、未知のエラーに直面した Web サービス プログラミングの初心者です。

要求されたサービスを動的に呼び出すために JaxWsDynamicClientFactory を使用しようとしています (サービスのアドレスとそのパラメーターはファイルから読み取られますが、ここでは関係ありません)。

この問題は、JaxWsDynamicClientFactory のこの標準的な初期化によって引き起こされます。

JaxWsDynamicClientFactory dcf= JaxWsDynamicClientFactory.newInstance();

この行の実行後、Karaf (Felix) は次のエラーを返します。

java.lang.IllegalArgumentException: Can not set final com.sun.tools.internal.xjc
.reader.internalizer.InternalizationLogic field com.sun.tools.internal.xjc.reade
r.internalizer.DOMForest.logic to org.apache.cxf.endpoint.dynamic.DynamicClientF
actory$1
        at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(
UnsafeFieldAccessorImpl.java:146)
        at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(
UnsafeFieldAccessorImpl.java:150)
        at sun.reflect.UnsafeQualifiedObjectFieldAccessorImpl.set(UnsafeQualifie
dObjectFieldAccessorImpl.java:65)
        at java.lang.reflect.Field.set(Field.java:657)
        at org.apache.cxf.endpoint.dynamic.DynamicClientFactory.hackInNewInterna
lizationLogic(DynamicClientFactory.java:817)
        at org.apache.cxf.endpoint.dynamic.DynamicClientFactory.createClient(Dyn
amicClientFactory.java:314)
        at org.apache.cxf.endpoint.dynamic.DynamicClientFactory.createClient(Dyn
amicClientFactory.java:270)
        at org.apache.cxf.endpoint.dynamic.DynamicClientFactory.createClient(Dyn
amicClientFactory.java:263)
        at org.apache.cxf.endpoint.dynamic.DynamicClientFactory.createClient(Dyn
amicClientFactory.java:198)
        at testclient.BundleInvoker.invoke(BundleInvoker.java:53)
        at testclient.TestClient.activate(TestClient.java:67)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.apache.felix.scr.impl.helper.BaseMethod.invokeMethod(BaseMethod.j
ava:236)
        at org.apache.felix.scr.impl.helper.BaseMethod.access$500(BaseMethod.jav
a:37)
        at org.apache.felix.scr.impl.helper.BaseMethod$Resolved.invoke(BaseMetho
d.java:613)
        at org.apache.felix.scr.impl.helper.BaseMethod.invoke(BaseMethod.java:49
6)
        at org.apache.felix.scr.impl.helper.ActivateMethod.invoke(ActivateMethod
.java:149)
        at org.apache.felix.scr.impl.manager.ImmediateComponentManager.createImp
lementationObject(ImmediateComponentManager.java:239)
        at org.apache.felix.scr.impl.manager.ImmediateComponentManager.createCom
ponent(ImmediateComponentManager.java:119)
        at org.apache.felix.scr.impl.manager.AbstractComponentManager$Unsatisfie
d.activate(AbstractComponentManager.java:1518)
        at org.apache.felix.scr.impl.manager.AbstractComponentManager.activateIn
ternal(AbstractComponentManager.java:550)
        at org.apache.felix.scr.impl.manager.AbstractComponentManager.enable(Abs
tractComponentManager.java:261)
        at org.apache.felix.scr.impl.config.ImmediateComponentHolder.enableCompo
nents(ImmediateComponentHolder.java:328)
        at org.apache.felix.scr.impl.BundleComponentActivator.initialize(BundleC
omponentActivator.java:158)
        at org.apache.felix.scr.impl.BundleComponentActivator.<init>(BundleCompo
nentActivator.java:113)
        at org.apache.felix.scr.impl.Activator.loadComponents(Activator.java:261
)
        at org.apache.felix.scr.impl.Activator.bundleChanged(Activator.java:179)

        at org.eclipse.osgi.framework.internal.core.BundleContextImpl.dispatchEv
ent(BundleContextImpl.java:847)
        at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventM
anager.java:230)
        at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchr
onous(ListenerQueue.java:148)
        at org.eclipse.osgi.framework.internal.core.Framework.publishBundleEvent
Privileged(Framework.java:1569)
        at org.eclipse.osgi.framework.internal.core.Framework.publishBundleEvent
(Framework.java:1505)
        at org.eclipse.osgi.framework.internal.core.Framework.publishBundleEvent
(Framework.java:1500)
        at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(Bundl
eHost.java:391)
        at org.eclipse.osgi.framework.internal.core.AbstractBundle.start(Abstrac
tBundle.java:300)
        at org.apache.felix.fileinstall.internal.DirectoryWatcher.startBundle(Di
rectoryWatcher.java:1247)
        at org.apache.felix.fileinstall.internal.DirectoryWatcher.startBundles(D
irectoryWatcher.java:1219)
        at org.apache.felix.fileinstall.internal.DirectoryWatcher.startAllBundle
s(DirectoryWatcher.java:1208)
        at org.apache.felix.fileinstall.internal.DirectoryWatcher.process(Direct
oryWatcher.java:503)
        at org.apache.felix.fileinstall.internal.DirectoryWatcher.run(DirectoryW
atcher.java:291)

実際、次の実行には問題はありません (プログラムは何の影響もなく続行します) が、この厄介なエラーのスタックを画面から削除したいと考えています。try-catch 環境でエラーを隠そうとしましたが、Karaf は単にそれを無視します (つまり、スタック全体を出力しますが、catch 部分はトリガーしません)。

問題を解決するのを手伝ってくれませんか (または、少なくともこの単純な行が問題を生成する理由を理解するのに役立ちますか)?

一般に。コードは Eclipse Kepler で作成され、Maven 2 でビルドされ、Karaf (felix) で実行されます。pom ファイルの依存関係部分は次のとおりです。

<dependencies>
    <dependency>
    <groupId>my.test.bundle</groupId>
    <artifactId>test-interface</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    </dependency>
    <dependency>
    <groupId>org.apache.felix</groupId>
    <artifactId>org.apache.felix.framework</artifactId>
    <version>1.8.0</version>
    <type>bundle</type>
    </dependency>
    <dependency>
    <groupId>org.apache.felix</groupId>
    <artifactId>org.osgi.core</artifactId>
    <version>1.4.0</version>
    <type>bundle</type>
    </dependency>
    <dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-frontend-jaxws</artifactId>
    <version>2.7.8</version>
    </dependency>
</dependencies>
4

2 に答える 2

0

CXFのウェブサイトに記載されているように!

一般に、CXF は WSI-BP サービスのみをサポートすることに注意してください。WSI-BP 以外の機能を使用する WSDL の動的クライアントを作成しようとすると、CXF が例外をスローする場合があります。

これはあなたの問題かもしれません。バインディングを右クリックして選択した SOAPUI などのツールで確認します。 WSI コンプライアンスの確認

于 2014-04-18T17:40:37.167 に答える
0

WS-I 準拠の WSDL の動的クライアントを作成すると、同じ例外 java.lang.IllegalArgumentException が発生します。問題はここで報告されたと思います:

JaxWsDynamicClientFactory 使用時の IllegalArgumentException

が理由です。

于 2014-06-11T11:15:15.923 に答える