javax.xml.bind.UnmarshalException:元素 "soap:Envelope" 的前缀 "soap" 未绑定。

Jaxb解析xml(带命名空间)相关联的属性 “xsi:NamespaceSchemaLocation” 的前缀 “xsi” 未绑定。 - sidihuo的专栏 - CSDN博客
https://blog.csdn.net/sidihuo/article/details/50478178

Jaxb解析xml(带命名空间)相关联的属性 “xsi:NamespaceSchemaLocation” 的前缀 “xsi” 未绑定。

final JAXBContext context = JAXBContext.newInstance(XlvdDiagram.class);
final Unmarshaller unmarshaller = context.createUnmarshaller();
final FileReader reader = new FileReader(new File(path));
final SAXParserFactory sax = SAXParserFactory.newInstance();
sax.setNamespaceAware(false);// 忽略命名空间
final XMLReader xmlReader = sax.newSAXParser().getXMLReader();
final SAXSource saxSource = new SAXSource(xmlReader, new InputSource(reader));
final Object object = unmarshaller.unmarshal(saxSource);
--------------------- 
作者:四滴火 
来源:CSDN 
原文:https://blog.csdn.net/sidihuo/article/details/50478178 
版权声明:本文为博主原创文章,转载请附上博文链接!

我的报错信息:

在将SOAP规范的xml转为java bean时报错了:
javax.xml.bind.UnmarshalException
with linked exception:
[org.xml.sax.SAXParseException; lineNumber: 2; columnNumber: 334; 元素 “soap:Envelope” 的前缀 “soap” 未绑定。]

xml到java bean的转换方法:

@SuppressWarnings("unchecked")
	public static <T> T xml2Object(String xmlStr, Class<T> c) 
			throws JAXBException, SAXException, ParserConfigurationException {
		JAXBContext context = JAXBContext.newInstance(c);
		Unmarshaller unmarshaller = context.createUnmarshaller();
		T t = (T) unmarshaller.unmarshal(new StringReader(xmlStr));
		return t;
}

按照上述博客介绍的修改xml到java bean的转换方法:

 /**
     * xml转换成JavaBean
     *
     * @param xml xml格式字符串
     * @param t   待转化的对象
     * @return 转化后的对象
     * @throws Exception JAXBException
     */
    @SuppressWarnings("unchecked")
    public static <T> T convertToJavaBean(String xml, Class<T> t) throws Exception {
        T obj = null;
        StringReader reader = null;
        try {
            JAXBContext context = JAXBContext.newInstance(t);
            Unmarshaller unmarshaller = context.createUnmarshaller();
            reader = new StringReader(xml);
            SAXParserFactory sax = SAXParserFactory.newInstance();
            sax.setNamespaceAware(false); // 忽略命名空间
            XMLReader xmlReader = sax.newSAXParser().getXMLReader();
            Source source = new SAXSource(xmlReader, new InputSource(reader));
            obj = (T) unmarshaller.unmarshal(source);
            return obj;
        } catch (Exception e) {
        	e.printStackTrace();
        	throw new RuntimeException("解析SOAP报文失败!");
        }finally {
            if(reader!=null){
                reader.close();
            }
        }
    }

猜你喜欢

转载自blog.csdn.net/weixin_43671497/article/details/88694476