Я пытаюсь выяснить проблему с генерацией XML-файла, который в настоящее время не может быть проанализирован - но только когда он генерируется с использованием IBM Java 8. Он может быть проанализирован при генерации с Redhat Java 8. Разницамежду ними есть то, что реализация RedHat имеет перевод строки после объявления xml и после каждого объявления пространства имен, в то время как реализация IBM - нет.
Вот заголовок, который работает (генерируется с помощью Redhat Java):
<?xml version="1.0" encoding="UTF-8"?>
<server id="myServer" max-logins="100"
xmlns="http://mina.apache.org/ftpserver/spring/v1"
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">
Как видите, после объявления xml вверху есть перевод строки плюс каждый атрибут xmlns всерверный тег.
Вот заголовок, сгенерированный из того же кода с использованием IBM Java 8:
<?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">
В этом случае нет перевода строки до первого дочернего тега (слушателей).
К сожалению, эта вторая ситуация вызывает исключение в синтаксическом анализаторе Sax, который использует Spring.
Вот трассировка стека:
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'.
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:404)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:342)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:310)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:143)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:178)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:149)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:212)
at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:113)
at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:80)
at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:123)
at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:423)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:353)
at org.springframework.context.support.FileSystemXmlApplicationContext.<init>(FileSystemXmlApplicationContext.java:140)
at org.springframework.context.support.FileSystemXmlApplicationContext.<init>(FileSystemXmlApplicationContext.java:84)
at org.apache.ftpserver.main.CommandLine.getConfiguration(CommandLine.java:164)
Фактический файл, генерирующий XML, - org.w3c.dom.DOMConfiguration.Я думаю, что это включено в rt.jar, но не подтвердили это.
Есть идеи, как обойти это?Я мог бы вручную вставить перевод строки в файл, но я не совсем уверен, что это простое и не лучшее решение.
Обновление: загрузчик классов IBM говорит, что он пришел из Java:
class load: org/w3c/dom/DOMConfiguration from: C:\javaInstalls\ibm_sdk80\jre\lib\xml.jar
Интересно, есть ли способ использовать собственный загрузчик классов для загрузки класса org.w3c из другого jar?