Jaxb解析XML转换为JavaBean忽略命名空间

Wesley13
• 阅读 742
    /**
     * 解析xml(忽略命名空间)
     * 
     * @param cla
     * @param content
     * @return
     * @throws JAXBException
     * @throws ParserConfigurationException
     * @throws SAXException
     */
    public static Object unmarshall(Class<?> cla, String content) throws JAXBException, ParserConfigurationException, SAXException {

        JAXBContext jaxbContext = JAXBContext.newInstance(cla);
        Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
        StringReader reader = new StringReader(content);

        SAXParserFactory sax = SAXParserFactory.newInstance();
        sax.setNamespaceAware(false);
        XMLReader xmlReader = sax.newSAXParser().getXMLReader();

        Source source = new SAXSource(xmlReader, new InputSource(reader));
        Object o = unmarshaller.unmarshal(source);

        return o;
    }

先贴上代码

由于各种原因,很多特殊行业的自定义标准命名空间的URL访问不了,从而导致了Jaxb在将XML内容转换成JavaBean的时候,获取命名错误,而无法解析成功!

另一种情况,在XML中的节点属性中出现xsi:type、xml:lang等属性性,要求需要节点对应的对象要与设置的类型进行匹配,原本这是严格匹配XML节点格式的行为,是不错的方式;但在实际的操作中,这大大增加了数据模型,尤其是超大型数据模型的制作复杂程序,希望可以仅将节点与JavaBean进行匹配,相应的数据能填充到数据模型中就好

设置

SAXParserFactory.setNamespaceAware(false);

即可在转换时,忽略命名空间读取,忽略类型检查,完成数据转换

点赞
收藏
评论区
推荐文章
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Wesley13 Wesley13
3年前
android应用架构经验及代码规范
应用的更新从服务器拿数据后要处理得到数据为空、解析错误、解析为空的情况,防止后台坏掉后进不去activity;用友盟等平台更新不能阻塞式强制更新,万一友盟维护了,应用就进不去了。命名规则布局中id的命名:尽量保证不同布局xml文件中不要有相同的id命名,不然ctrl想点进去的时候,不知道该跳转到哪个文件,当注释掉该控件后
Wesley13 Wesley13
3年前
java 解析xml
XOM参考:https://xom.nu/java利用XOM解析XML参考:http://blog.sodhanalibrary.com/2014/09/parsexmlusingjava.html.W0rOEjozbIUXOM解析XML为Java对象student_list.xml<?xmlver
Wesley13 Wesley13
3年前
.NET的命名空间
关于Namespace(命名空间)的使用在前面的程序中我们看到,我常用<%@ImportNamespace"System.Data"%,这是在引用M$为我们提供的Namespace,这和ASP不同的,我们在ASP.net必须先引用与我们操作有关的Namespace后才能使用相应的功能。其实说白了,一个Namespace;就是一个组件。这个是关
Stella981 Stella981
3年前
SVG绘制饼状图
SVG绘制饼状图昨天学习了基本的SVG,下面是使用SVG绘制饼状图创建SVG空间创建SVG需要一个document.createElementNS()方法一个一个setAttribute()方法编写如下js,将会创建一个svg空间//创建一个XML命名空间varsvgns"http:
Stella981 Stella981
3年前
Hive(七)Hive参数操作和运行方式
Hive参数操作和运行方式1、Hive参数操作1、hive参数介绍​hive当中的参数、变量都是以命名空间开头的,详情如下表所示:命名空间读写权限含义hiveconf可读写hivesite.xml当中的各配置变量例:hivehiveconf
Easter79 Easter79
3年前
SVG绘制饼状图
SVG绘制饼状图昨天学习了基本的SVG,下面是使用SVG绘制饼状图创建SVG空间创建SVG需要一个document.createElementNS()方法一个一个setAttribute()方法编写如下js,将会创建一个svg空间//创建一个XML命名空间varsvgns"http:
Stella981 Stella981
3年前
C++关键字之using的的用法总结
Cusing用法总结1)配合命名空间,对命名空间权限进行管理usingnamespacestd;//释放整个命名空间到当前作用域usingstd::cout;//释放某个变量到当前作用域2)类型重命名作用等同typedef,但是逻辑上更直观。include<iostream
Wesley13 Wesley13
3年前
C++ 中命名空间的 5 个常见用法
相信小伙伴们对C已经非常熟悉,但是对命名空间经常使用到的地方还不是很明白,这篇文章就针对命名空间这一块做了一个叙述。命名空间在1995年被引入到c标准中,通常是这样定义的:命名空间定义了新的作用域。它们提供了一种避免名称冲突的方法。c中的命名空间通常用于避免命名冲突。尽管命名空间在最近的c代码中广泛使用,但大多数较旧代码都
小万哥 小万哥
9个月前
深入学习 XML 解析器及 DOM 操作技术
所有主要的浏览器都内置了一个XML解析器,用于访问和操作XMLXML解析器在访问XML文档之前,必须将其加载到XMLDOM对象中所有现代浏览器都有一个内置的XML解析器,可以将文本转换为XMLDOM对象解析文本字符串以下示例将一个文本字符串解析为XMLDO