1

単体テストで JAXRS テスト サービスをセットアップするときに、次の問題が発生しました。これはコードです (AbstractJUnit4SpringContextTests から派生したテスト クラスから取得)。

    JAXRSServerFactoryBean sf = new JAXRSServerFactoryBean();
    sf.setServiceBeans(applicationContext.getBean("searchXY"));
    sf.setAddress("http://localhost:9000/");
    sf.create();

    restClient = new RestTestClient();//custom class for client-side testing

    ....

    InputStream dummyRequestFileAsStream = getInputStreamForClasspathResource(
    DUMMY_REQUEST_FILE);
    LOGGER.info("Testing searchQuery ReST service access");
    int httpStatus = restClient.postXmlStream(
                    "http://localhost:9000/search/searchXY",
                    dummyRequestFileAsStream);

XML テスト ファイルをサービスにフィードしています。CXF は不用意に xml を javax.xml.bind.JAXBElement にラップしようとし、サービスを呼び出し、(リフレクション API で) IllegalArgumentException で失敗します。サービスはもちろん JAX-RS 固有の要素を受け入れず、以前に XSD で定義した SearchRequest 要素。

ただし、次の行を春のコンテキストに挿入すると、すべて問題ありません。

<import resource="classpath:META-INF/cxf/cxf-extension-jaxrs-binding.xml" />

他の誰かがこれを見ましたか?

4

2 に答える 2

1

詳細が提供されない限り、元の問題が発生している理由を理解することは困難です。上記のインポートは常に必要であり、Springコンテキストにない状態でテストを試したことはありません。例外トレースとは何ですか?おそらく、JAXRSインターセプターはインポートなしでは関与しませんか?

乾杯、セルゲイ

于 2009-11-11T16:02:04.270 に答える
0

私が間違っていたことが判明しました: 問題は実際には XSD にありました: タイプ "SearchRequest" (原文のまま、大文字の S) の XSD 要素 "searchRequest" があり、さらに派生した拡張型を使用している別のルート要素がありました。 SearchRequest から。cxf は、ルート要素の型と XSD 継承の型の両方として使用される型に問題があるようです。追加のタイプ AbstractSearchRequest を作成し、すべてのタイプがそのタイプから継承されるようにすると、問題はなくなりました。

于 2009-11-13T11:15:56.810 に答える