конфигурация cxf spring не загружается, отсутствует xsd

#java #spring #xsd #jax-ws #cxf

#java #spring #xsd #jax-ws #cxf

Вопрос:

У меня есть spring config для создания клиента с cxf с использованием jaxws. когда я запускаю свой тестовый набор из основного класса с этим кодом:

 ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:spring/client-context.xml");
return (VisitService) ctx.getBean("client");
  

Я получаю это исключение

Исключение org.xml.sax.SAXParseException; Номер строки: 21; номер столбца: 71; schema_reference.4: Не удалось прочитать документ схемы ‘http://cxf.apache.org/schema/jaxws.xsd ‘, потому что 1) не удалось найти документ; 2) документ не удалось прочитать; 3) корневой элемент документа отсутствует .

Я понимаю исключение и нашел это в документации cxf http://cxf.apache.org/docs/embedding-cxf-inside-spring.html

Включить <импортировать ресурс =»classpath:META-INF/cxf/cxf.xml » />

Когда я включаю context.xml это описано в документации, я просто получаю ту же ошибку. Spring проверяет свою схему перед загрузкой этого xml. Перенос контекста приложения, вероятно, решил бы мою проблему, но это кажется плохим решением. Я знаю, что xsd должен быть в моем пути к классам, и он есть в cxf-rt-frontend-jaxws jar.

Ответ №1:

Документация cxf иногда использует http://cxf.apache.org/schema/jaxws.xsd и иногда использует http://cxf.apache.org/schemas/jaxws.xsd Cxf3 нуждается http://cxf.apache.org/schema s/jaxws.xsd

Ответ №2:

Это также может произойти, когда связанные с Spring библиотеки, которые определяют свое собственное пространство имен, фактически не находятся в classpath. Spring не находит обработчик пространства имен (который находится в META-INF/spring.handlers такой библиотеке) и, следовательно, не может проанализировать пользовательское пространство имен.

Но да, если пространство имен определено неправильно, Spring никогда не найдет требуемый обработчик пространства имен 🙂