在单元测试中设置 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" />
还有人看到这个吗?