Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JAXB在解组时将多个属性转换为一种类型_Java_Xml_Jaxb_W3c_Unmarshalling - Fatal编程技术网

Java JAXB在解组时将多个属性转换为一种类型

Java JAXB在解组时将多个属性转换为一种类型,java,xml,jaxb,w3c,unmarshalling,Java,Xml,Jaxb,W3c,Unmarshalling,图像我有这样一个元素 “比例”和“数量”始终同时显示,但它们不是在一个独占元素中定义的 当将someElement元素解组为someElementjava实例时,我希望someElement类中有一个成员表示number和scale 目前,数字和比例都是属性,然后使用afterUnmarshall()方法计算一个数字 有没有一种方法可以在不使用两个成员字段大小和比例的情况下执行此操作?可能使用XmlAdapter?在这种情况下,我将如何使用此选项?的答案似乎与您正在尝试的操作一致。或者至少是相反

图像我有这样一个元素

“比例”和“数量”始终同时显示,但它们不是在一个独占元素中定义的

当将
someElement
元素解组为
someElement
java实例时,我希望
someElement
类中有一个成员表示
number
scale

目前,数字和比例都是属性,然后使用
afterUnmarshall()
方法计算一个数字


有没有一种方法可以在不使用两个成员字段大小和比例的情况下执行此操作?可能使用
XmlAdapter
?在这种情况下,我将如何使用此选项?

的答案似乎与您正在尝试的操作一致。或者至少是相反的。因此,您可以创建使用XmlAdapter取消/封送的自定义类型,也可以对getter/setter逻辑进行调皮处理。

注意:我是专家组的负责人和成员

MOXy提供了
@XmlTransformation
扩展,允许您将Java字段/属性表示为多个XML节点

了解更多信息

更新

或者,对于这个用例,您可以使用
XmlAdapter
。适配器将负责将表示number和scale的单个类型(下面用FOO表示)转换为具有单独的number和scale属性的类型。您仍然需要使用MOXy实现来利用
@XmlPath
扩展:

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class SomeElement {

    @XmlAttribute
    private String a;

    @XmlAttribute
    private String b;

    @XmlJavaTypeAdapter(NumberAndScaleAdapter.class)
    @XmlPath(".")
    private FOO numberAndScale;

    private Child child;

}
了解更多信息


我使用的是参考实现,只添加了允许我使用XmlReadTransformer的MOXy库。但什么都没有发生。我还必须使用XmlWriteTransformer还是必须将整个JAXB处理切换到MOXy?@FranzKafka-您需要将JAXB提供程序切换为MOXy:@BlaiseDoughan您不能说服JCP实际将MOXy作为RI吗?我当然不介意:D