Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.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/8/redis/2.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 如何使用XStream为相同的类元素设置不同的别名_Java_Xml_Alias_Xstream - Fatal编程技术网

Java 如何使用XStream为相同的类元素设置不同的别名

Java 如何使用XStream为相同的类元素设置不同的别名,java,xml,alias,xstream,Java,Xml,Alias,Xstream,如何使用XStream为同一类元素的XML元素设置不同的别名 我有以下几个类,并且希望重用Phone类来表示homephone和workphone,它们将生成以下格式的XML <customer> <id>222</id> <name>TestCustomer</name> <workPhone> <workPhoneNumber>12345678</workPhoneNumber>

如何使用XStream为同一类元素的XML元素设置不同的别名

我有以下几个类,并且希望重用Phone类来表示homephone和workphone,它们将生成以下格式的XML

<customer>
  <id>222</id>
  <name>TestCustomer</name>
  <workPhone>
    <workPhoneNumber>12345678</workPhoneNumber>
    <workPhoneExtn>2345</workPhoneExtn>
  </workPhone>
  <workPhone>
    <workPhoneNumber>23456789</workPhoneNumber>
    <workPhoneExtn>2555</workPhoneExtn>
  </workPhone>
  <homePhone>
    <homePhoneNumber>222222222</homePhoneNumber>
    <homePhoneExtn>1234</homePhoneExtn>
  </homePhone>
</customer>
使用下面的代码,我只能在homephone和workphone对象的类级别之前设置不同的别名

@XStreamAlias("customer")
public class Customer {

    private String id;
    private String name;    

    @XStreamImplicit(itemFieldName = "workPhone")
    private ArrayList<Phone> workPhones;

    @XStreamImplicit(itemFieldName = "homePhone")
    private ArrayList<Phone> homePhones;
}

public class Phone {
    private String number;
    private String extn;
}
使用上述类定义,我只能得到以下XML结构:

<customer>
  <id>222</id>
  <name>TestCustomer</name>
  <workPhone>
    <number>12345678</number>
    <extn>2345</extn>
  </workPhone>
  <workPhone>
    <number>12345678</number>
    <extn>2355</extn>
  </workPhone>
  <homePhone>
    <number>222222222</number>
    <extn>1234</extn>
  </homePhone>
</customer>
我不清楚映射器或转换器是否有助于实现这一点

是否有人建议根据其类别的别名设置手机号码和分机号以获取别名workphoneNumber、workphoneExtn/homePhoneNumber、homePhoneExtn?它应该在编组和解编组期间都起作用。请建议。

试试这个:

xstream.alias("workPhone", Person.class);
xstream.alias("homePhone", Person.class);

xstream.aliasField("workPhoneNumber", Person.class, "number");
xstraem.aliasField("homePhoneNumber", Person.class, "number");

...

从纯xml模式设计的角度来看,当前的设置(workPhone和homePhone都有子项number和extn)比您建议的格式更为自然-homePhone和workPhone都代表电话号码中相同类型的数据,因此它们应该具有相同的结构。