У меня есть следующий объект Java.
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(
name = "ApprovalRequest",
propOrder = {"requiredConclusionTime", "approvalType", "businessRequest", "supportingInfo", "messageToEvaluator", "organisation", "resubmissionOf", "requestedBy", "nominatedEvaluator", "evaluationStrategy"}
)
public class ApprovalRequest implements Serializable {
private static final long serialVersionUID = 1L;
@XmlSchemaType(
name = "dateTime"
)
protected XMLGregorianCalendar requiredConclusionTime;
protected Integer approvalType;
@XmlElement(
required = true
)
protected Object businessRequest;
protected List<Object> supportingInfo;
protected String messageToEvaluator;
@XmlElement(
required = true
)
@XmlSchemaType(
name = "anyURI"
)
protected String organisation;
protected String resubmissionOf;
protected PersonalInfo requestedBy;
protected EvaluatorNomination nominatedEvaluator;
protected EvaluationStrategy evaluationStrategy;
public ApprovalRequest() {
}
public XMLGregorianCalendar getRequiredConclusionTime() {
return this.requiredConclusionTime;
}
public void setRequiredConclusionTime(XMLGregorianCalendar value) {
this.requiredConclusionTime = value;
}
public Integer getApprovalType() {
return this.approvalType;
}
public void setApprovalType(Integer value) {
this.approvalType = value;
}
public Object getBusinessRequest() {
return this.businessRequest;
}
public void setBusinessRequest(Object value) {
this.businessRequest = value;
}
public List<Object> getSupportingInfo() {
if (this.supportingInfo == null) {
this.supportingInfo = new ArrayList();
}
return this.supportingInfo;
}
public String getMessageToEvaluator() {
return this.messageToEvaluator;
}
public void setMessageToEvaluator(String value) {
this.messageToEvaluator = value;
}
public String getOrganisation() {
return this.organisation;
}
public void setOrganisation(String value) {
this.organisation = value;
}
public String getResubmissionOf() {
return this.resubmissionOf;
}
public void setResubmissionOf(String value) {
this.resubmissionOf = value;
}
public PersonalInfo getRequestedBy() {
return this.requestedBy;
}
public void setRequestedBy(PersonalInfo value) {
this.requestedBy = value;
}
public EvaluatorNomination getNominatedEvaluator() {
return this.nominatedEvaluator;
}
public void setNominatedEvaluator(EvaluatorNomination value) {
this.nominatedEvaluator = value;
}
public EvaluationStrategy getEvaluationStrategy() {
return this.evaluationStrategy;
}
public void setEvaluationStrategy(EvaluationStrategy value) {
this.evaluationStrategy = value;
}
}
Когда я делаю следующее:
ApprovalRequest approvalRequest = new ApprovalRequest();
Gson gson = new Gson();
String approvalRequestJsonStr = gson.toJson(approvalRequest);
Это работает отлично.
Однако, когда я позволяю приложению работать на сервере JBoss и во время выполнения с заполненным ApprovalRequest
, возникает исключение, преобразующее объект в JSON.
Gson gson = new Gson();
String approvalRequestJsonStr = gson.toJson(approvalRequest);
Получает следующую ошибку:
Caused by: java.lang.StackOverflowError
18:40:26,836 ERROR [stderr] (http--0.0.0.0-8443-1) at com.google.gson.stream.JsonWriter.peek(JsonWriter.java:350)
18:40:26,836 ERROR [stderr] (http--0.0.0.0-8443-1) at com.google.gson.stream.JsonWriter.beforeName(JsonWriter.java:565)
18:40:26,836 ERROR [stderr] (http--0.0.0.0-8443-1) at com.google.gson.stream.JsonWriter.writeDeferredName(JsonWriter.java:386)
18:40:26,836 ERROR [stderr] (http--0.0.0.0-8443-1) at com.google.gson.stream.JsonWriter.value(JsonWriter.java:402)
18:40:26,836 ERROR [stderr] (http--0.0.0.0-8443-1) at com.google.gson.internal.bind.TypeAdapters$13.write(TypeAdapters.java:353)
18:40:26,836 ERROR [stderr] (http--0.0.0.0-8443-1) at com.google.gson.internal.bind.TypeAdapters$13.write(TypeAdapters.java:337)
18:40:26,836 ERROR [stderr] (http--0.0.0.0-8443-1) at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68)
18:40:26,836 ERROR [stderr] (http--0.0.0.0-8443-1) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:89)
18:40:26,837 ERROR [stderr] (http--0.0.0.0-8443-1) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:195)
18:40:26,837 ERROR [stderr] (http--0.0.0.0-8443-1) at com.google.gson.internal.bind.ObjectTypeAdapter.write(ObjectTypeAdapter.java:105)
18:40:26,837 ERROR [stderr] (http--0.0.0.0-8443-1) at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68)
18:40:26,837 ERROR [stderr] (http--0.0.0.0-8443-1) at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(CollectionTypeAdapterFactory.java:96)
18:40:26,837 ERROR [stderr] (http--0.0.0.0-8443-1) at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(CollectionTypeAdapterFactory.java:60)
18:40:26,837 ERROR [stderr] (http--0.0.0.0-8443-1) at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68)
18:40:26,837 ERROR [stderr] (http--0.0.0.0-8443-1) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:89)
...
Любые идеи, как я могу это исправить?
supportingInfo
? Это может быть виновником. - person Anish B.   schedule 27.06.2020ElementNSImpl
(org.w3c.domNode
). ОбъектApprovalRequest
, к сожалению, взят из библиотеки, которую я не контролирую, и он также используется другими системами, поэтому я не могу его изменить. - person Richard   schedule 27.06.2020Gson
, вы можете пометить поля, которые вы хотите включить в json, с помощью @Expose. - person Amit kumar   schedule 27.06.2020