【问题标题】:Not able to read raw XML into Spring Boot app无法将原始 XML 读入 Spring Boot 应用程序
【发布时间】:2017-03-29 16:25:22
【问题描述】:

我正在开发一个 Spring Boot 项目,并且我有一个要求,我想将原始 xml 读入应用程序并使用解析器解析该 xml 以转换为域对象。我拥有的 xml 是一个没有任何命名空间或模式的普通 xml。下面是我的xml格式

<?xml version ="1.0" ?>
 <applications>
 <state>xyz</state>
 <app name="PROJECTx">
 <catids>
 <catid>1</catid>
 <catid>2</catid>
 </catids>
 <cys>
 <mxvalue>1000</mxvalue>
 <mnvalue>0.01</mnvalue>
 <activity>ACTIVE</activity>
 </cys>
 </app>
 </applications>

我计划在我的启动应用程序中使用普通的 DOM Parser API 来读取此 xml 并将值转换为域对象。

@SpringBootApplication
@ComponentScan("com.test")
@ImportResource("applications.xml")
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

我尝试使用 @ImportResource 注释来读取这个 xml,但在 spring boot 启动时出现以下错误。

 Caused by: org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'applications'.
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:203) ~[na:1.8.0_71]
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:134) ~[na:1.8.0_71]
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:396) ~[na:1.8.0_71]
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:327) ~[na:1.8.0_71]
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:284) ~[na:1.8.0_71]
at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.handleStartElement(XMLSchemaValidator.java:1900) ~[na:1.8.0_71]

看起来 @ImportResource("applications.xml") 需要一些命名空间和架构。

有人可以帮我解决这个问题,让我知道这在 SpringBoot 应用程序中是否可行,我该怎么做。提前致谢。

【问题讨论】:

  • 您的 XML 缺少命名空间声明。任何网络搜索都应该找到很多示例。因缺乏研究而投反对票。
  • @Andreas 这是我需要使用的 xml。正如我已经说过的,它是一个没有任何命名空间的原始 xml。任何想法
  • @Andreas 你的意思是我需要自己向这个 xml 添加名称空间。好吧,我有这份合同需要处理。
  • @ImportResource 用于导入 Spring &lt;beans/&gt; XML 文件。请参阅 javadoc。 那个是配置文件,不是bean定义文件。我想你正在寻找@PropertySource
  • @ImportResource 用于导入 Spring 上下文 xml 文件。它不适用于导入/读取任意 xml 文件。如果您想使用解析器,请使用解析器并自己阅读。

标签: java xml spring spring-boot


【解决方案1】:

您应该在域对象上使用 JAXB 注释。然后在 Spring Boot @Configuration 类中,您可以创建一个 JAXBContext 并将 xml 解组到您的域对象中。可以在http://www.mkyong.com/java/jaxb-hello-world-example/ 看到一个简单的 jaxb 教程。

【讨论】:

    【解决方案2】:

    我知道这已经晚了,如果 application.xml 在你的类路径中(或与 jar 相同的目录,或 conf 目录),你们很多人不想使用它。

    应用

    【讨论】:

      猜你喜欢
      • 2017-04-20
      • 2018-11-13
      • 2018-02-19
      • 2016-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-07
      • 2018-09-07
      相关资源
      最近更新 更多