Apache Syncope修改@XmlElement

时间:2018-11-30 12:56:57

标签: java json xml apache apache-syncope

我有一个Java Backend响应休息请求,并带有此类的响应:

java.lang.NullPointerException

可以正常发送以下内容:

import java.util.Collection;
import java.util.Collections;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

import org.codehaus.jackson.map.annotate.JsonSerialize;

@XmlRootElement
@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
public class RestResponse<T> {
  @XmlElement(name = "METADATA")
  private JsonMetadata  jsonMetadata;
  private Collection<T> result;

  public RestResponse() {
    jsonMetadata = new JsonMetadata();
  }

  public RestResponse(JsonMetadata metadata) {
    this.jsonMetadata = metadata;
  }

  public JsonMetadata getJsonMetadata() {
    return jsonMetadata;
  }

  public void setJsonMetadata(JsonMetadata jsonMetadata) {
    this.jsonMetadata = jsonMetadata;
  }

  public Collection<T> getResult() {
    return result;
  }

  public void setResult(Collection<T> result) {
    this.result = result;
  }

  public void setObjectList(Collection<T> objectList) {
    if (objectList != null) {
      this.result = objectList;  
    }    
  }

  public void setObject(T object) {
    if (object != null) {
      setObjectList(Collections.singletonList(object));
    }
  }

  public void setErrorMessage(String msg) {
    jsonMetadata.setErrorMessage(msg);
  }

  public void setWarnMessage(String msg) {
    jsonMetadata.setWarnMessage(msg);
  }

}

现在,我正在尝试使用Apache Syncope,并希望使用Maven工件,例如“ read听”:

https://syncope.apache.org/docs/reference-guide.html#client-library

但是当我添加以下行时:

METADATA: {STATUS: "0", ERROR_MESSAGE: ""} 
result: [{id: "4010", name: "Demo"}]

在Eclipse中访问我的proyect中的pom.xml。仅添加此行,不执行其他任何操作,然后其余响应更改为:

<dependency>
  <groupId>org.apache.syncope.client</groupId>
  <artifactId>syncope-client-lib</artifactId>
  <version>2.1.2</version>
</dependency>

对我来说是个问题,因为我用“ METADATA”这个词来处理错误。

有人知道为什么会发生这种变化吗?

1 个答案:

答案 0 :(得分:0)

在这种情况下,仅在第一个字段JsonMetadata中定义@XmlElement(name =“ METADATA”)。请记住,Java仅将此注释添加到其下的第一个字段!

当我创建xml时,我更喜欢在其get方法中使用表示法,例如:

@XmlRootElement(name = "root")  
public class RestResponse<T> {


@XmlElement(name = "metadata")
public JsonMetadata getJsonMetadata() {
    return jsonMetadata;
}

public void setJsonMetadata(JsonMetadata jsonMetadata) {
    this.jsonMetadata = jsonMetadata;
}

public void setResult(<any> result) {
    this.result = result;
}

@XmlElement(name="result")
public <any> getResult() {
    return result;
}

记住:您必须为每个字段创建setter和getter!正确的名称(我使用netbeans ide,它会自动建议使用正确的名称添加此方法)。

但是还有另一种解决方案...

@XmlAccessorType(XmlAccessType.FIELD)
public class RestResponse<T> {
@XmlElement(name = "METADATA")
private JsonMetadata  jsonMetadata;
private Collection<T> result;
//...
在上课之前使用

表示法可以解决您的问题。 所以有两种方法: -添加方法(我更喜欢这一方法) -添加此标记(不添加或触摸任何内容,我不喜欢,因为该方法更有用)

不可能同时使用两种解决方案!