在JAXB 2.0中扩展JAXB生成的对象

时间:2016-12-14 14:38:42

标签: java xml jaxb

民间,

我正在尝试使用其重载的自定义版本自动替换JAXB对象,如本文所述:

https://jaxb.java.net/guide/Adding_behaviors.html

问题是本文讨论的是JAXB 1.0,同样的机制在2.0中不起作用。 unmarshaller只是在对象层次结构中加载模式定义的对象,而不是该对象的扩展,而ObjectFactory类似乎只是被忽略。

必须有一种方法可以执行上面JAXB 2.0中的文章中描述的内容。我似乎无法弄明白。也许我需要使用xjb文件来定义这种行为或类似的东西。任何想法都表示赞赏。

由于

1 个答案:

答案 0 :(得分:0)

看起来最好的方法是使用xjb文件自定义绑定并使其包含以下内容:

var vinsWithCarMake = Trades
    .Where(x => x.Car.Make.ToLower() == carMake.ToLower())
    .Select(x => x.Car.PrimaryVIN)
    .ToList<string>();

var carAlias = null;
var result = myQuery.JoinAlias(x => x.Car, () => carAlias)
       .WhereRestrictionOn(() => carAlias.VIN).IsInG<string>(vinsWithCarMake)
       .List();

private static byte[] doConvert(String inStr) {
    String opStr = inStr.substring(1);
    opStr = opStr.substring(0, opStr.length()-1);
    int val;
    String[] arr = opStr.split("[,]");
    byte[] retVal = new byte[arr.length];
    for (int i=0; i<arr.length; i++) {
        opStr = arr[i].trim();
        try {
            val = Integer.parseInt(opStr);
        } catch (Exception e) {
            System.out.println("bad input at item #"+i+": "+opStr);
            return null;
        }
        if (val > 255) {
            System.out.println("bad input value at item #"+i+": "+val+" > 255");
            return null;                
        }
        retVal[i] = (byte) val;
    }
    return retVal;
}

这似乎照顾了我的需要。