4

JAXBContext はスレッドセーフですが、Unmarshaller はそうではありません。アンマーシャラーをリクエスト スコープ Bean にしたいのですが、これを行っています。

<bean id="jaxbContext" class="javax.xml.bind.JAXBContext"
    factory-method="newInstance">
    <constructor-arg>
        <list>
            <value type="java.lang.Class">MyType</value>
        </list>
    </constructor-arg>
</bean>
<bean id="unmarshaller" class="javax.xml.bind.Unmarshaller"
    factory-bean="jaxbContext" factory-method="createUnmarshaller"
    scope="request">
    <aop:scoped-proxy />
</bean>

しかし、問題は、次のエラーが発生することです。

プロキシの作成時にターゲット タイプを特定できませんでした

AOPを使用したSpringセッションスコープBeanの問題を読みましたが、作成したいタイプについてSpringにもっと伝える必要があることを示唆していますが、作成するタイプはインターフェースです。JAXB 実装に基づいてインスタンス化される実際のタイプを探し出し、アンマーシャラー Bean のクラス属性がそれを指すようにする必要がありますか? ちょっと奇妙に思えます。手がかり?

編集:

私の間違いです。これは実際に機能しますが、単体テストで失敗するだけです。春のテストでスコープ付き Bean をリクエストすると役に立ちました。

4

1 に答える 1

3

使ってみてくださいlazy-init="true":-

<bean id="unmarshaller" 
    class="javax.xml.bind.Unmarshaller"
    factory-bean="jaxbContext" 
    factory-method="createUnmarshaller"
    scope="request" 
    lazy-init="true">

    <aop:scoped-proxy />

</bean>
于 2011-02-24T18:41:38.630 に答える