0

私が取り組んでいるプロジェクトでは、いくつかのサーブレットがあり、それらはすべて共通の API (私たちが開発したもの) を使用してデータベースにアクセスします。アイデアは、この機能を共有 jar ファイルから徐々に取り出し、外部アプリケーションが使用できるように JAX-WS Web サービスに配置することです。しかし、Spring を使用してサーブレットを初期化し、jar で定義されたインターフェイスと、同じパッケージと名前を持っているにもかかわらず、Web サービスによって生成されたクラスとの間に型の不一致があるため、壁にぶつかりました。

さらに調べてみると、いくつかのことが起こっているように見えます。

  1. Web サービスから生成されたソースには、独自のバージョンのインターフェイスが含まれています
  2. 実装用に生成されたソースは、実際にインターフェイスを実装することはなく、要求に応じてインターフェイスの型のオブジェクトを返すだけです。
    • このメソッドは静的ではありませんが、問題が発生すると想像できます
  3. JAX-B は実際にはインターフェースを処理できないことを読んだことを覚えていますが、これはメソッドの作成中に発見したため、このセクションには当てはまらない可能性があります

これを念頭に置いて、生成された Web サービス メソッドを呼び出して春に Bean を構築する必要があるようですが、その方法がわかりません。インターフェイスを削除することはテスト/拡張性にとって望ましくないため、他の提案は大歓迎です。私が考えることができる他の唯一の解決策は、スプリングではなくコンストラクターでこのクラスを割り当てることです。

前もって感謝します!

4

2 に答える 2

0

リクエストを通じて実装オブジェクトを抽出する方法を見つけました。MethodInvokingFactoryBeanを使用すると、インスタンスをセットアップし、通常の Bean のように使用するために結果を保存できます。

例:

<bean id="implementingObject" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean" autowire="byName">
    <property name="targetClass">
        <value>JAXWSServiceClass</value>
    </property>
    <property name="targetMethod">
        <value>getInterfacePortObject</value>
    </property>
</bean>
于 2013-10-31T13:45:59.793 に答える