如何指定JAXB用于编组/解组数据的适配器?

有没有办法指定JAXB用于在我的XML模式中封送/解组对象的适配器?

例如,如果我想将以下内容解析为整数:

0x1234 

我可以在我的架构中使用以下内容:

            

当我通过XJC工具运行模式时,字符串“0x1234”应使用Integer.decode()作为整数进行解码,其值为0x1234或十进制为4660。 生成的Adapter类正确反映了这一点:

 public Integer unmarshal(String value) { return (Integer.decode(value)); } 

但是,当我想将值封送回XML元素(String字面值)时,Adapter类执行以下操作:

 public String marshal(Integer value) { if (value == null) { return null; } return value.toString(); } 

在这种情况下,整数0x1234(十进制为4660)的字符串值为“4660”,这不符合我的模式(因为它没有“0x”前缀)。

如何告诉适配器我希望整数0x1234被编组为“0x1234”字符串文字? 我希望能够在模式中执行此操作,以便我可以生成新的Java类而无需修改输出。 这可能吗?

编辑:根据接受的答案,这是我做的工作:

我在com.example.Parse类中编写了一个名为toHexString()的方法:

 public static String toHexString(int value) { return ("0x" + Integer.toHexString(value)); } 

然后我将我的架构指向该方法进行打印:

           

尝试这个

  

我没有测试过,但我记得使用过非常类似的东西。

非常相似的问题:“如何将字符串坐标映射到java.awt.Point?”

(0)架构

             

(1)创建扩展XmlAdapter的适配器类。

 package com.kjcode.hexgrid.jaxbadapter; import java.awt.Point; import javax.xml.bind.annotation.adapters.XmlAdapter; public class PointAdapter extends XmlAdapter { @Override public Point unmarshal(String v) throws Exception { String[] coords = v.split(","); return new Point(Integer.parseInt(coords[0]), Integer.parseInt(coords[1])); } @Override public String marshal(Point v) throws Exception { return String.format("%d,%d", vx, vy); } } 

(2)创建绑定文件。 关键是添加:jaxb:extensionBindingPrefixes =“xjc”xmlns:xjc =“http://java.sun.com/xml/ns/jaxb/xjc”

         

(3)配置pom.xml

  com.sun.tools.xjc.maven2 maven-jaxb-plugin 1.1.1    generate     com.kjcode.hexmap.api.logic.field.generated true   

(4)JAXB将生成

 public class HexAreaBorder { @XmlElement(required = true) protected String type; @XmlElement(required = true) protected String name; @XmlElement(required = true, type = String.class) @XmlJavaTypeAdapter(PointAdapter.class) protected List points = new LinkedList(); 

你想要一个自定义适配器。 这是一篇处理自定义布尔结果的post,但也可以应用于您的场景。

另外,这里是JAXB的XmlAdapter的API文档: http ://jaxb.java.net/nonav/2.1/docs/api/javax/xml/bind/annotation/adapters/XmlAdapter.html

希望这可以帮助!