将对象转换为JSON时发生Java StackOverflower错误

将对象转换为JSON时发生Java StackOverflower错误,java,json,jboss,gson,Java,Json,Jboss,Gson,我有以下Java对象 @XmlAccessorType(XmlAccessType.FIELD) @XmlType( name = "ApprovalRequest", propOrder = {"requiredConclusionTime", "approvalType", "businessRequest", "supportingInfo", "messageTo

我有以下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;
    }
}
它工作得很好

但是,当我让应用程序在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、businessrequest等对象中-当你尝试序列化它时,这将导致无限递归循环。你在
supportinginfo
字段中发送什么?这可能就是罪魁祸首。@PM,谢谢您的回复。是的,我想你是对的。它是一个非常复杂的对象,被另一个系统使用,我只是尝试将它传递给代理,然后传递给另一个系统。我已经设置了代理以使用Spring RESTful资源来使用“approvalRequest”,其中原始系统使用了SOAP Web服务。你认为我最好不要尝试将其转换为JSON,而是尝试将其转换为XML(因为这就是SOAP信封)?@Richard-我没有发表任何评论。您的感激之情属于其他人。“业务请求”和“支持信息”是
ElementNSImpl
org.w3c.domNode
)。不幸的是,
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)
...