问题记录--通过jaxb转换的xml增加namespace信息
2013-11-22 15:15
399 查看
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生成两类信息XmlRootElement:在clazz中定义的root信息
XmlSchema:同包中的注解信息,读取来自package-info.java文件
/** * 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,clazz,this); if(xs!=null) nsUri = xs.namespace(); else { nsUri = builder.defaultNsUri; } } return new QName(nsUri.intern(),local.intern()); }
结论
通过代码分拣得出以下结论先读取XmlRootElement注解,可以定义name和namespace属性,如果name缺省为类名头字母下写
再读取包注解javax.xml.bind.annotation.XmlSchema,如果XmlRootElement注解的namespace为空,设置为包注解的namespace
相关文章推荐
- 通过google weather api获得天气xml信息并用DOMDocument将其转换为数组(实例)
- IE9下通过XSLT转换XML的显示问题
- 用jaxb通过XSD生成Java类,java对象转换成xml文件
- JAVA Object和XML直接的转换通过JAXB
- IE9下通过XSLT转换XML的显示问题
- 通过jaxb实现javabean和xml的转换
- JAXB将JAVA对象转换为XML时CDATA的问题
- JAXB将JAVA对象转换为XML时CDATA的问题
- 开发AP通过snmp获取CPE配置信息并保存到xml显示到web,遇到的问题总结
- JAXB转换xml中文乱码问题解决
- 用JAXB转换XML和Java对象时的循环引用问题的解决方法
- java通过xstream将xml转换为java对象遇到的问题(一个对像中两个子类的类名相同)
- 使用JAXB来实现Java合xml之间的转换
- JAXB-java对象和xml相互转换
- 计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决
- jaxb实现xml与javaBean相互转换
- JAXB xml与javaBean的转换
- asp.net(C#)通过WMI无法获取磁盘卷序列号(硬件信息)的问题解决办
- 关于在MVC4中增加强类型的View时找不到Model问题的处理记录
- 记录给nginx增加模块过程中碰到的问题