次のDTOは、サービスプロバイダーとサービスリクエスターの間で送信される一連の従業員レコードをカプセル化するためのものです。
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement (name="employees")
public class EmployeeList {
private List<Employee> employee;
public List<Employee> getEmployee() {
if (employee==null)
employee = new ArrayList<Employee>();
return employee;
}
public void setEmployee(List<Employee> employee) {
this.employee = employee;
}
}
上記のDTO宣言は、次のXMLを生成します
<employees>
<employee id="1234" ...... />
<employee id="1236" ...... />
....
</employees>
従業員のリストを取得したいときに問題が発生します。
public void showEmployees(EmployeeList employeeList) {
List<Employee> employees = employeeList.getEmployee();
dothedo(employees);
}
このフィールドはemployeeではなくemployeeであるため、関数はgetEmployeesではなくgetEmployeeであることに注意してください。
そこで、DTOを次のように変更します。
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement (name="employees")
public class EmployeeList {
private List<Employee> employees;
public List<Employee> getEmployees() {
if (employee==null)
employee = new ArrayList<Employee>();
return employee;
}
public void setEmployee(List<Employee> employee) {
this.employee = employee;
}
}
私が今従業員を取得するように
List<Employee> employees = employeeList.getEmployees();
複数形をDTOに入れる際の問題は、次のXMLが生成されることであり、これは受け入れられません。ルート要素と子要素の間の名前の競合が原因で、RestEasyランタイムが鳴らないとは思いません。
<employees>
<employees id="1234" ...... />
<employees id="1236" ...... />
....
</employees>
したがって、英語で直感的なDTO(複数の名前を持つ複数のアイテム)とXML出力も直感的な(単一のアイテムには単一のタグ名が必要)ための推奨事項は何ですか。
このセマンティックの競合を回避するために、リストDTOを再構築する方法はありますか?いいえの場合、jax-bの次のバージョンで処理することが十分に重要な問題だと思いますか?