![](/img/trans.png)
[英]What container provider supports org.apache.cxf.jaxrs.JAXRSServerFactoryBean?
[英]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.