#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 никогда не найдет требуемый обработчик пространства имен 🙂