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 中,调用服务,并因 IllegalArgumentException(在反射 API 中)而失败,因为服务当然不接受 JAX-RS 特定的元素,而是我之前在 XSD 中定义的 SearchRequest 元素。

但是,当我将以下行插入到我的 spring 上下文中时,一切都很好:

<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”,另外还有另一个使用扩展类型的根元素,派生来自搜索请求。似乎 cxf 遇到了既用作根元素类型又用作 XSD 继承类型的类型的问题。在创建了一个附加类型 AbstractSearchRequest 并让所有类型都从该类型继承之后,问题就消失了。

于 2009-11-13T11:15:56.810 回答