栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

将JAXB生成的类用于需要带模式整数的元素

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

将JAXB生成的类用于需要带模式整数的元素

您可以执行以下操作:

NumberFormatter

您可以通过编写自己的格式化程序来做到这一点:

package forum7182533;public class NumberFormatter {    public static String printInt(Integer value) {        String result = String.valueOf(value);        for(int x=0, length = 7 - result.length(); x<length; x++) { result = "0" + result;        }        return result;    }    public static Integer parseInt(String value) {        return Integer.valueOf(value);    }}

XMLSchema(format.xsd)

然后,当您要根据XML模式生成类时:

<?xml version="1.0" encoding="UTF-8"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">    <xs:element name="root">        <xs:complexType> <xs:sequence>     <xs:element name="number" type="NumberCodevalueType" /> </xs:sequence>        </xs:complexType>    </xs:element>    <xs:simpleType name="NumberCodevalueType">        <xs:restriction base="xs:int"> <xs:pattern value="[0-7]{7}" />        </xs:restriction>    </xs:simpleType></xs:schema>

bindings.xml

您将利用JAXB绑定文件来引用格式化程序:

<jxb:bindings xmlns:xs="http://www.w3.org/2001/XMLSchema"    xmlns:jxb="http://java.sun.com/xml/ns/jaxb" version="2.1">    <jxb:bindings schemaLocation="format.xsd">        <!--jxb:bindings node="//xs:simpleType[@name='NumberCodevalueType']" -->        <jxb:bindings node="//xs:element[@name='number']"> <jxb:property>     <jxb:baseType>         <jxb:javaType name="java.lang.Integer"  parseMethod="forum7182533.NumberFormatter.parseInt" printMethod="forum7182533.NumberFormatter.printInt" />     </jxb:baseType> </jxb:property>        </jxb:bindings>    </jxb:bindings></jxb:bindings>

XJC电话

绑定文件在XJC调用中被引用为:

xjc -d out -p forum7182533 -b bindings.xml format.xsd

适配器1

这将导致

XmlAdapter
创建一个利用您的格式化程序的:

package forum7182533;import javax.xml.bind.annotation.adapters.XmlAdapter;public class Adapter1    extends XmlAdapter<String, Integer>{    public Integer unmarshal(String value) {        return (forum7182533.NumberFormatter.parseInt(value));    }    public String marshal(Integer value) {        return (forum7182533.NumberFormatter.printInt(value));    }}

XmlAdapter
将使用由您的域对象引用
@XmlJavaTypeAdapter
的注释:

package forum7182533;import javax.xml.bind.annotation.XmlAccessType;import javax.xml.bind.annotation.XmlAccessorType;import javax.xml.bind.annotation.XmlElement;import javax.xml.bind.annotation.XmlRootElement;import javax.xml.bind.annotation.XmlType;import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;@XmlAccessorType(XmlAccessType.FIELD)@XmlType(name = "", propOrder = {    "number"})@XmlRootElement(name = "root")public class Root {    @XmlElement(required = true, type = String.class)    @XmlJavaTypeAdapter(Adapter1 .class)    protected Integer number;    public Integer getNumber() {        return number;    }    public void setNumber(Integer value) {        this.number = value;    }}

演示版

现在,如果您运行以下演示代码:

package forum7182533;import javax.xml.bind.JAXBContext;import javax.xml.bind.Marshaller;public class Demo {    public static void main(String[] args) throws Exception {        JAXBContext jc = JAXBContext.newInstance(Root.class);        Root root = new Root();        root.setNumber(4);        Marshaller marshaller = jc.createMarshaller();        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);        marshaller.marshal(root, System.out);    }}

输出量

您将获得所需的输出:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><root>    <number>0000004</number></root>


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/437511.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号