cvc-elt.1: не удается найти объявление элемента 'server' - только проблема в IBM Java 8 - PullRequest
0 голосов
/ 28 февраля 2019

Я тестирую наше программное обеспечение с несколькими версиями Java 8. Он отлично работает с RedHat и Zulu, но с IBM 8 Java выдает следующее исключение:

org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: 
Line 1 in XML document from file 
[C:\xxxx\image-server\.\res\conf\temp.xml] is invalid; 
nested exception is org.xml.sax.SAXParseException: 
cvc-elt.1: Cannot find the declaration of element 'server'.

Файл temp.xmlвыглядит следующим образом:

<?xml version="1.0" encoding="UTF-8"?><server id="myServer" max-logins="100" xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://mina.apache.org/ftpserver/spring/v1 http://mina.apache.org/ftpserver/ftpserver-1.0.xsd">
   <listeners>
      <nio-listener name="default" port="21">
         <ssl>
            <keystore file="./res/ftpserver.jks" password="password"/>
         </ssl>
      </nio-listener>
   </listeners>
   <ftplets>
      <ftplet name="ImagePilot">
         <beans:bean class="com.xxxx.svp.imagepilot.ImagePilot">
            <beans:property name="createThumbNailEnabled" value="true"/>
            <beans:property name="defaultStoreToRoot" value="false"/>
            <beans:property name="defaultRootDirectory" value="d:/images"/>
            <beans:property name="scaleFactor" value="4"/>
            <beans:property name="copyThumbNails" value="false"/>
            <beans:property name="imageFileNameHandler">
               <beans:bean class="com.xxxx.svp.imagepilot.XxxxImageFileNameHandler">
                  <beans:constructor-arg>
                     <beans:value>^[a-zA-Z0-9\-]+_\d{8}_\d{6}_\d{8}\.(jpg|JPG|xml|XML|bmp|BMP)</beans:value>
                  </beans:constructor-arg>
                  <beans:property name="maxDelayedImageData" value="350"/>
               </beans:bean>
            </beans:property>
         </beans:bean>
      </ftplet>
   </ftplets>
   <file-user-manager file="./res/conf/icr890usersfile.properties"/>
</server>

Есть идеи, в чем может быть проблема?Почему только реализация IBM?

Редактировать: дополнительная информация

Элемент "сервер", который не найден, взят из проекта Apache Mina.

https://mina.apache.org/ftpserver-project/configuration_server.html

<server xmlns="http://mina.apache.org/ftpserver/spring/v1"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://mina.apache.org/ftpserver/spring/v1 http://mina.apache.org/ftpserver/ftpserver-1.0.xsd"
    id="server"     
    max-logins="500"
    anon-enabled="false"
    max-anon-logins="123"
    max-login-failures="124"
    login-failure-delay="125">
...
</server>

Похожая (но не та же) ошибка появляется в отчете об ошибках для mina ftp:

https://issues.apache.org/jira/browse/FTPSERVER-458

Комментарий к этому был:

"Схема находится в ftpserver-core-1.0.6.jar / org / apache / ftpserver / config / spring / ftpserver-1.0.xsd.

Это проблема конфигурации, элемент ftplets должен бытьнаходится перед файлом-user-manager. "

Интересно, это проблема пути к классам или загрузки классов, поскольку xsd находится в файле jar.

Редактировать:

В этом проекте используется настройка схемы, как описано в разделе «Приложение B. Расширяемое создание XML» в документации Spring по адресу https://docs.spring.io/spring/docs/3.0.0.M3/reference/html/apb.html.

. Помимо настройки схемы, в нем есть два файла свойств в разделе META-.INF: 1. Spring-handlers, который отображает xsd в пользовательский обработчик (на основе targetNamespaceв схеме).

Содержимое этого:

http://mina.apache.org/ftpserver/spring/v1=org.apache.ftpserver.config.spring.FtpServerNamespaceHandler

Обратите внимание на обратную косую черту после «http» для двоеточия.

Таким образом, имя соответствует инструкциям.

Файл свойств с именем 'spring.schemas' содержит отображение местоположений схемы XML на ресурсы пути к классам.

Содержимое этого второго файла выглядит следующим образом:

http://mina.apache.org/ftpserver/ftpserver-1.0.xsd=org/apache/ftpserver/config/spring/ftpserver-1.0.xsd

Итак, необычно для ресурса, XSD распространяется в файле jar на том же уровнекак класс обработчика.

1 Ответ

0 голосов
/ 04 марта 2019

Это связано с тем, как динамически генерируются XML-файлы.Кажется, что при запуске с IBM Java серверный тег файла конфигурации XML не имеет перевода строки между ним и заголовком, поэтому анализатор не видит серверный тег.

При запуске с другими Javas, перевод строки есть, и никаких проблем.

Мой следующий шаг - перекомпилировать рассматриваемый модуль с IBM JDK и посмотреть, работает ли он тогда.К сожалению, он не компилируется, но это другой вопрос.

...