簡體   English   中英

cxf.jaxrs:使用JAXRSServerFactoryBean時出現IllegalArgumentException

[英]cxf.jaxrs: IllegalArgumentException when using JAXRSServerFactoryBean

在單元測試中設置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中,調用服務,並以IllegalArgumentException失敗(在反射API中),因為該服務當然不接受特定於JAX-RS的元素,而是我之前在XSD中定義的SearchRequest元素。

但是,當我在Spring上下文中插入以下行時,一切都很好:

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

其他人看到了嗎?

如果不提供更多詳細信息,很難理解為什么會發生原始問題。 始終需要上述導入,並且在彈簧上下文中,我從未嘗試過測試。 什么是異常跟蹤? 也許沒有導入就不會涉及JAXRS攔截器?

干杯,謝爾蓋

原來我錯了:問題實際上出在XSD上:我有一個XSD元素“ searchRequest”,其類型為“ SearchRequest”(原文如此,大寫S),另外還有一個使用擴展類型的根元素,派生來自SearchRequest。 看來cxf的類型同時用作根元素的類型和XSD繼承的類型都存在問題。 在創建其他類型AbstractSearchRequest並讓所有類型都繼承自該類型后,問題就消失了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM