Java - Spring Ws - загрузка относительных включений в файлы XSD (Tomcat 8)

Я создал веб-сервис Spring, который создает динамический WSDL из коллекции XSD-файлов, используя следующий код:

Resource[] schema = {
            new ClassPathResource(
                    "schema/service/XCPD.SupportMaterials.v9/schema/HL7V3/NE2008/coreschemas/NarrativeBlock.xsd"),
            new ClassPathResource(
                    "schema/service/XCPD.SupportMaterials.v9/schema/HL7V3/NE2008/coreschemas/datatypes-base.xsd"),
            new ClassPathResource(
                    "schema/service/XCPD.SupportMaterials.v9/schema/HL7V3/NE2008/coreschemas/infrastructureRoot.xsd"),
            new ClassPathResource(
                    "schema/service/XCPD.SupportMaterials.v9/schema/HL7V3/NE2008/multicacheschemas/PRPA_IN201305UV02.xsd"),
            new ClassPathResource(
                    "schema/service/XCPD.SupportMaterials.v9/schema/HL7V3/NE2008/multicacheschemas/PRPA_IN201306UV02.xsd"),
            new ClassPathResource(
                    "schema/service/XCPD.SupportMaterials.v9/schema/IHE/XCPD_PLQ.xsd"),
            new ClassPathResource(
                    "schema/service/XCPD.SupportMaterials.v9/schema/HL7V3/XCPD_PRPA.xsd") };
    CommonsXsdSchemaCollection collection = new CommonsXsdSchemaCollection(
            schema);
    collection.setInline(true);
    return collection;

XSD-файлы, используемые для создания динамического WSDL, включают в себя другие различные файлы схемы с использованием операторов include, таких как:

<xs:include schemaLocation="../coreschemas/voc.xsd"/>
<xs:include schemaLocation="../coreschemas/datatypes.xsd"/>

Когда я запускаю код в контейнере Tomcat 8, я получаю следующее исключение:

Caused by: java.lang.IllegalArgumentException: The resource path [/../coreschemas/infrastructureRoot.xsd] has been normalized to [null] which is not valid

Средство распознавания URI Spring добавляет «/» перед путем, даже если этот файл ссылается на относительный путь (не абсолютный путь) и завершается неудачей при импорте схемы.

Следует отметить, что это приложение нормально работало на Tomcat 7. При попытке перенести его на Tomcat 8 возникают проблемы.

Tomcat 8 изменил способ загрузки веб-ресурсов. Дополнительная информация из Java CodeRanch ...

Короче говоря, есть ли способ заставить Spring, чтобы распознаватель URI правильно обрабатывал относительные файлы? Если я посмотрю на свойство collectionBaseURI в преобразователе, который использует Spring (ClasspathUriResolver), это значение будет нулевым. Есть ли способ установить этот базовый URI?

РЕДАКТИРОВАТЬ . Я могу решить эту проблему, преобразовав все относительные пути в абсолютные пути к схемам ... однако я не хочу применять это исправление к сотням файлов.

7 голосов | спросил Mike Melusky 11 J0000006Europe/Moscow 2015, 03:40:50

1 ответ


0

В случае, если кто-то столкнется с этой надоедливой проблемой, виновником было ClasspathUriResolver, добавив "/" в относительный путь. Я переключил его, чтобы использовать URI Resolver по умолчанию (в org.apache.ws.commons.schema.resolver.DefaultURIResolver), и он без проблем работает на Tomcat 8.

CommonsXsdSchemaCollection collection = new CommonsXsdSchemaCollection(schema);
collection.setUriResolver(new DefaultURIResolver());
collection.setInline(true);
return collection;
ответил Mike Melusky 11 J0000006Europe/Moscow 2015, 23:56:33

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132