cxf.jaxrs: IllegalArgumentException при использовании 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, а скорее элемент SearchRequest, который я определил в своем XSD ранее.

Однако, когда я вставляю следующую строку в контекст весны, все в порядке:

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

Кто-нибудь еще видел это?


person Community    schedule 11.11.2009    source источник


Ответы (2)


Трудно понять, почему возникает первоначальная проблема, без предоставления дополнительных подробностей. Вышеупомянутый импорт всегда требуется, и я никогда не пробовал тестировать без контекста spring. Что такое трассировка исключения? Возможно, без импорта перехватчики JAXRS даже не задействованы?

на здоровье, Сергей

person Sergey Beryozkin    schedule 11.11.2009

Оказывается, я ошибался: проблема была на самом деле с XSD: у меня был элемент XSD «searchRequest» типа «SearchRequest» (sic, заглавная буква S) и, кроме того, еще один корневой элемент, который использует расширенный тип, производный из SearchRequest. Похоже, у cxf проблемы с типом, который используется и как тип корневого элемента, и как тип для наследования XSD. После создания дополнительного типа AbstractSearchRequest и наследования всех типов от этого типа проблема исчезла.

person Community    schedule 13.11.2009