当前位置:首页 > 开发 > 编程语言 > XML > 正文

Jaxb org.xml.sax.saxparseexception : premature end of file

发表于: 2015-06-04   作者:darrenzhu   来源:转载   浏览:
摘要: 如果在使用JAXB把xml文件unmarshal成vo(XSD自动生成的vo)时碰到如下错误: org.xml.sax.saxparseexception : premature end of file 很有可能时你直接读取文件为inputstream,然后将inputstream作为构建unmarshal需要的source参数。InputSource inputSource = new In
如果在使用JAXB把xml文件unmarshal成vo(XSD自动生成的vo)时碰到如下错误:
org.xml.sax.saxparseexception : premature end of file
很有可能时你直接读取文件为inputstream,然后将inputstream作为构建unmarshal需要的source参数。InputSource inputSource = new InputSource(inputStream)。即你是按如下方式调用下面提供的方法的


InputStream msgInputStream = new ClassPathResource("data/MessageSample.xml").getInputStream();
Wrapper messageWrapper = parseMessage(msgInputStream, Wrapper.class);


解决方案是,首先将文件内容读成字符串content,让后用字符串构建ByteArrayInputStream bis,由bis来构建source就不会报错了。InputSource inputSource = new InputSource(bis),即如下使用上面的parseMessage方法
parseMessage(new ByteArrayInputStream(content.getBytes()), targetType)


文中用到的parseMessage方法
private <E> E parseMessage(InputStream inputStream, Class<E> targetType) throws JAXBException, SAXException, ParserConfigurationException {
	InputSource inputSource = new InputSource(inputStream);
	JAXBContext jc = JAXBContext.newInstance("generated.vo");
	Unmarshaller unmarshaller = jc.createUnmarshaller();
	final SAXParserFactory sax = SAXParserFactory.newInstance();
	sax.setNamespaceAware(true);
	final XMLReader reader = sax.newSAXParser().getXMLReader();
	final Source source = new SAXSource(reader, inputSource);
	JAXBElement<E> el = unmarshaller.unmarshal(source, targetType);
	E vo = el.getValue();
	return vo;
}

Jaxb org.xml.sax.saxparseexception : premature end of file

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
1 jaxb
< xmlnamespace prefix ="o" ns ="urn:schemas-microsoft-com:office:office" /> 一、前言。
2 JAXB
< xmlnamespace prefix ="o" ns ="urn:schemas-microsoft-com:office:office" /> 一、前言。
之所以称作拦路虎,是因为这个问题困扰了一天。 决定开始学习shell,在windows上用虚拟机装好redhat
Error Message unexpected end of file while looking for precompiled header. Did you forget to
android NDK开发中,在window环境下需要安装cygwin来模拟linux环境,在网上配置文章较多,不详述,
原贴:http://topic.csdn.net/u/20071101/11/4bf1047d-dc46-4b39-9766-4f05b0eeaca7.html SHELL synt
if [ -n "$1" ] then echo "111" else echo "222" fi exit 0 执行sh my.sh par 提示syntax error:un
今天解压tar包遇到这样一个问题 用同样的命令去解压其他tar.gz包是没有问题的,那应该是tar包的问题
今天解压tar包遇到这样一个问题 用同样的命令去解压其他tar.gz包是没有问题的,那应该是tar包的问题
1、生成项目架构 rails new demo_app 该命令会生成之前的博文中提到的标准的rails项目框架。 bundle
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号