Установка атрибута XmlAttribute для поля hasMany в граалях

#hibernate #grails #xjc

Вопрос:

Я реализую службу, для которой я использовал XJC для создания классов домена из файла XSD. Сгенерированная Java, которую я перенес в grails, но я не могу установить аннотации XmlAttributes для этих полей, ну, по крайней мере, я не знаю, как это сделать. Как вы это делаете?

Вот где я должен дать представление:

  import javax.xml.bind.annotation.XmlAccessType import javax.xml.bind.annotation.XmlAccessorType import javax.xml.bind.annotation.XmlAttribute import javax.xml.bind.annotation.XmlType  @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "AuditSourceIdentificationType", propOrder = [  "auditSourceTypeCode" ]) class AuditSourceIdentificationType {   static hasMany = [  auditSourceTypeCodes: CodedValue //@XmlElement(name = "AuditSourceTypeCode")?  ]   @XmlAttribute(name = "AuditEnterpriseSiteID")  String auditEnterpriseSiteID   @XmlAttribute(name = "AuditSourceID", required = true)  String auditSourceID }  

Любая помощь будет очень признательна.

Ответ №1:

Хорошо, я отложил это на несколько дней, что было именно то, что нужно. Оказывается, я на самом деле не думал о том, как на самом деле настроены классы домена, и по какой-то причине я не объявил поля списком в дополнение к размещению их в объявлении hasMany. Именно так вы устанавливаете аннотации для множества полей.

Прошло довольно много времени с тех пор, как я создал проект grails, и это действительно помогает вам не отставать от своей практики. Исправленный код ниже:

 import javax.xml.bind.annotation.XmlAccessType import javax.xml.bind.annotation.XmlAccessorType import javax.xml.bind.annotation.XmlElement import javax.xml.bind.annotation.XmlRootElement import javax.xml.bind.annotation.XmlType  @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "", propOrder = [  "eventIdentification",  "activeParticipant",  "auditSourceIdentification",  "participantObjectIdentification" ]) @XmlRootElement(name = "AuditMessage") class AuditMessage {   static hasMany = [  activeParticipants: ActiveParticipant,  auditSourceIdentifications: AuditSourceIdentificationType,  participantObjectIdentifications: ParticipantObjectIdentificationType  ]   @XmlElement(name = "ActiveParticipant", required = true)  List activeParticipants   @XmlElement(name = "AuditSourceIdentification", required = true)  List auditSourceIdentifications   @XmlElement(name = "ParticipantObjectIdentification")  List participantObjectIdentifications   String auditMessageText   @XmlElement(name = "EventIdentification", required = true)  EventIdentificationType eventIdentification }'''