xstream игнорирует атрибут неявных элементов - PullRequest
0 голосов
/ 06 апреля 2020

У меня есть два класса «Пользователи» и «Пользователь», «Пользователи» имеют список пользователей, используя аннотацию @XstreamImplicit:

@Data
@XStreamAlias("users")
public class Users {
  @JsonIgnore
  @XStreamAsAttribute
  @XStreamAlias("xmlns:xsd")
  final String xmlnsXsd = "http://www.w3.org/2001/XMLSchema";

  @JsonIgnore
  @XStreamAsAttribute
  @XStreamAlias("xmlns:xsi")
  final String xmlnsXsi = "http://www.w3.org/2001/XMLSchema-instance";

  @XStreamImplicit(itemFieldName = "user")
  private List<User> users = new ArrayList<>();
}

@XStreamAlias("user")
@Data
public class User {
  @JsonIgnore
  @XStreamAsAttribute
  @XStreamAlias("xmlns:xsd")
  final String xmlnsXsd = "http://www.w3.org/2001/XMLSchema";

  @JsonIgnore
  @XStreamAsAttribute
  @XStreamAlias("xmlns:xsi")
  final String xmlnsXsi = "http://www.w3.org/2001/XMLSchema-instance";

  String emailAddress;
  String userId;
  String status;
}

Когда клиент отправляет массовый запрос, мы возвращаем пользователей, а когда они отправляют один запрос, мы возвращаем пользователя. он работает нормально, за исключением того, что в массовом ответе он содержит атрибуты xstream для пользователей и пользователей, поэтому он выглядит следующим образом:

<users xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">. <-- Users attribute
    <user xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">  <-- User attribute
        <userId>12345</memberId>
        <status>active</status>
    </user>
    <user xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <userId>46587</memberId>
        <status>inactive</status>
    </user>       
</users> 

если я удалю атрибут xmlattribute для пользователя, то единственный ответ будет выглядеть следующим образом:

<user>  <-- no attribute
    <xid>099A4F82-4929-494B-9722-3F7F6E5930B5</xid>
</user>

как я могу подавить атрибут в User, тогда это массовый ответ?

...