Известно, что любой класс Exception / Throwable не может быть упорядочен JAXB из-за того, что StackTrace не имеет конструктора по умолчанию.Что вы можете сделать, это создать свой собственный класс Exception, который расширяется, скажем, в вашем примере, WebServiceException.В вашем классе переопределите методы, которые будут использовать StackTrace, и добавьте к ним аннотацию @XmlTransient
.Пока вы используете JAXB 2.2.4u2 +, маршаллер будет подчиняться аннотации @XmlTrasient
в вашем пользовательском классе.
Дополнительную информацию можно получить по адресу http://java.net/jira/browse/JAXB-814, в которой описывается дефект, в котором @XmlTransient
плохо работает на подклассах.
Ниже приведен пример класса, который будет правильно распределяться:1010 *
package com.stackoverflow.7232331;
import javax.ws.rs.core.Response.Status;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;
@XmlRootElement
public class CustomException extends RuntimeException {
/**
*
*/
private static final long serialVersionUID = -672804070691541883L;
protected String reason;
protected Status status;
protected int errorCode;
public String getReason() {
return reason;
}
public void setReason(String reason) {
this.reason = reason;
}
public Status getStatus() {
return status;
}
public void setStatus(Status status) {
this.status = status;
}
public int getErrorCode() {
return errorCode;
}
public void setErrorCode(int errorCode) {
this.errorCode = errorCode;
}
public CustomException(Status status, String message, String reason, int errorCode) {
super(message);
this.reason = reason;
this.status = status;
this.errorCode = errorCode;
}
public CustomException() {
super();
}
@XmlTransient
@Override
public StackTraceElement[] getStackTrace() {
return super.getStackTrace();
}
@XmlTransient
@Override
public Throwable getCause() {
return super.getCause();
}
}
Если вы используете Maven, вам понадобится эта зависимость:
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.2.5</version>
</dependency>