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

/**
	 * 解析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;
	}

先贴上代码java

 

因为各类缘由,不少特殊行业的自定义标准命名空间的URL访问不了,从而致使了Jaxb在将XML内容转换成JavaBean的时候,获取命名错误,而没法解析成功!spa

另外一种状况,在XML中的节点属性中出现xsi:type、xml:lang等属性性,要求须要节点对应的对象要与设置的类型进行匹配,本来这是严格匹配XML节点格式的行为,是不错的方式;但在实际的操做中,这大大增长了数据模型,尤为是超大型数据模型的制做复杂程序,但愿能够仅将节点与JavaBean进行匹配,相应的数据能填充到数据模型中就好code

设置xml

SAXParserFactory.setNamespaceAware(false);对象

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

相关文章
相关标签/搜索