问题记录--通过jaxb转换的xml增加namespace信息
发布时间:2020-12-15 23:15:55 所属栏目:百科 来源:网络整理
导读:JAXB Object to XML与package-info.java 线上问题描述 通过 JABX将Object转换成XML,转化后的格式带namespace信息,此信息不是希望生成的,为什么会自动生成namespace信息呢? 过程分析 JABX 生成com.sun.xml.bind.v2.model.impl.TypeInfoImpl的QName parseEleme
JAXB Object to XML与package-info.java线上问题描述通过 JABX将Object转换成XML,转化后的格式带namespace信息,此信息不是希望生成的,为什么会自动生成namespace信息呢? 过程分析JABX 生成com.sun.xml.bind.v2.model.impl.TypeInfoImpl的QName parseElementName(ClassDeclT clazz)方法,会根据入口clazz的annotation生成两类信息
/** * Parses an {@link XmlRootElement} annotation on a class * and determine the element name. * * @return null * if none was found. */ protected final QName parseElementName(ClassDeclT clazz) { // 获得对象上定义的注解 XmlRootElement e = reader().getClassAnnotation(XmlRootElement.class,clazz,this); if(e==null) return null; String local = e.name(); if(local.equals("##default")) { // if defaulted... local = NameConverter.standard.toVariableName(nav().getClassShortName(clazz)); } // 如果没有指定namespace,读取包注解 String nsUri = e.namespace(); if(nsUri.equals("##default")) { // if defaulted ... /* 包注解中读取XMLSchema,通过clazz(注:准备生成的对象)所在包目录中查找package-info.java 详见java.lang.Package类 getAnnotation(Class<A> annotationClass)方法 */ XmlSchema xs = reader().getPackageAnnotation(XmlSchema.class,this); if(xs!=null) nsUri = xs.namespace(); else { nsUri = builder.defaultNsUri; } } return new QName(nsUri.intern(),local.intern()); } 结论通过代码分拣得出以下结论
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |