0

我正在使用多个版本的 Java 8 测试我们的软件。它适用于 RedHat 和 Zulu,但对于 IBM 的 Java 8,它会引发以下异常:

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 元素应该放在 file-user-manager 之前。”

我想知道这是类路径还是类加载问题,因为 xsd 是在 jar 文件中找到的。

编辑:

该项目正在使用https://docs.spring.io/spring/docs/3.0.0.M3/reference/html/apb的 Spring 文档中的“附录 B. 可扩展 XML 创作”部分中描述的模式设置.html

除了设置模式之外,它还让您在 META-INF 下创建两个属性文件: 1. spring-handlers,它将 xsd 映射到自定义处理程序(基于模式中的 targetNamespace)。

这篇的内容是:

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

请注意冒号需要“http”后的反斜杠。

因此名称按照说明匹配。

  1. 名为“spring.schemas”的属性文件包含 XML 模式位置到类路径资源的映射。

第二个的内容如下所示:

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

因此,对于资源,XSD 不寻常地分布在 jar 文件中,与处理程序类处于同一级别。

4

1 回答 1

0

这与动态生成 xml 文件的方式有关。当使用 IBM Java 运行时,XML 配置文件的服务器标记显然在它和标题之间没有换行符,因此解析器看不到服务器标记。

当与其他 Java 一起运行时,换行就在那里,没有问题。

我的下一步是用 IBM 的 jdk 重新编译有问题的模块,然后看看它是否可以工作。不幸的是,它没有编译,但这是另一个问题。

于 2019-03-04T19:42:22.037 回答