package com.sissi.protocol.error; import java.util.ArrayList; import java.util.List; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlElements; import javax.xml.bind.annotation.XmlRootElement; import com.sissi.protocol.Error; import com.sissi.protocol.ErrorDetail; import com.sissi.protocol.ProtocolType; import com.sissi.protocol.error.detail.BadFormat; import com.sissi.protocol.error.detail.BadNamespacePrefix; import com.sissi.protocol.error.detail.BadRequest; import com.sissi.protocol.error.detail.Conflict; import com.sissi.protocol.error.detail.FeatureNotImplemented; import com.sissi.protocol.error.detail.Forbidden; import com.sissi.protocol.error.detail.Gone; import com.sissi.protocol.error.detail.HostGone; import com.sissi.protocol.error.detail.HostUnknown; import com.sissi.protocol.error.detail.ImproperAddressing; import com.sissi.protocol.error.detail.InternalServerError; import com.sissi.protocol.error.detail.InvaildNamespace; import com.sissi.protocol.error.detail.InvalidFrom; import com.sissi.protocol.error.detail.InvalidXml; import com.sissi.protocol.error.detail.ItemNotFound; import com.sissi.protocol.error.detail.JIDMalformed; import com.sissi.protocol.error.detail.NotAcceptable; import com.sissi.protocol.error.detail.NotAllowed; import com.sissi.protocol.error.detail.NotAuthorized; import com.sissi.protocol.error.detail.NotWellFormed; import com.sissi.protocol.error.detail.PolicyViolation; import com.sissi.protocol.error.detail.RecipientUnavaliable; import com.sissi.protocol.error.detail.Redirect; import com.sissi.protocol.error.detail.RegistrationRequired; import com.sissi.protocol.error.detail.RemoteServerNotFound; import com.sissi.protocol.error.detail.RemoteServerTimeout; import com.sissi.protocol.error.detail.Reset; import com.sissi.protocol.error.detail.RestrictedXml; import com.sissi.protocol.error.detail.SeeOtherHost; import com.sissi.protocol.error.detail.ServiceUnavailable; import com.sissi.protocol.error.detail.SubscriptionRequired; import com.sissi.protocol.error.detail.SystemShutdown; import com.sissi.protocol.error.detail.UnExpectedRequest; import com.sissi.protocol.error.detail.UnSupportedEncoding; import com.sissi.protocol.error.detail.UnSupportedFeature; import com.sissi.protocol.error.detail.UnSupportedStanzaType; import com.sissi.protocol.error.detail.UnSupportedVersion; /** * @author kim 2014年1月3日 */ @XmlRootElement(name = ServerError.NAME) public class ServerError implements Error { public final static String NAME = "error"; private String by; private String code; private String type; private ServerErrorText text; private List<ErrorDetail> details; public ServerError() { super(); } public ServerError(Error error) { this.by = error.getBy(); this.code = error.getCode(); this.type = error.getType(); this.details = error.getDetails(); // 包装ServerErrorText this.text = error.getText() != null ? new ServerErrorText(error.getText().getLang(), error.getText().getText(), this.details != null && !this.details.isEmpty() ? this.details.get(0).getXmlns() : null) : null; } @Override public String getId() { return null; } @Override public ServerError setId(String id) { return this; } @Override public String getFrom() { return null; } @Override public ServerError setFrom(String from) { return this; } @Override public String getTo() { return null; } @Override public ServerError setTo(String to) { return this; } @XmlAttribute public String getBy() { return by; } public ServerError setBy(String by) { this.by = by; return this; } @XmlAttribute public String getCode() { return this.code; } public ServerError setCode(String code) { this.code = code; return this; } @Override @XmlAttribute public String getType() { return this.type; } public ServerError type(ProtocolType type) { this.type = type.toString(); return this; } public ServerError setType(String type) { this.type = type; return this; } public ServerError add(ErrorDetail detail) { if (this.details == null) { this.details = new ArrayList<ErrorDetail>(); } this.details.add(detail); return this; } public ServerError add(ErrorDetail detail, String text) { return this.add(detail, null, text); } public ServerError add(ErrorDetail detail, String lang, String text) { this.add(detail); this.text = new ServerErrorText(lang, text, detail.getXmlns()); return this; } @Override @XmlElement(name = ServerErrorText.NAME) public ServerErrorText getText() { return this.text; } @XmlElements({ @XmlElement(name = UnExpectedRequest.NAME, type = UnExpectedRequest.class), @XmlElement(name = SubscriptionRequired.NAME, type = SubscriptionRequired.class), @XmlElement(name = RemoteServerTimeout.NAME, type = RemoteServerTimeout.class), @XmlElement(name = RemoteServerNotFound.NAME, type = RemoteServerNotFound.class), @XmlElement(name = RegistrationRequired.NAME, type = RegistrationRequired.class), @XmlElement(name = Redirect.NAME, type = Redirect.class), @XmlElement(name = RecipientUnavaliable.NAME, type = RecipientUnavaliable.class), @XmlElement(name = JIDMalformed.NAME, type = JIDMalformed.class), @XmlElement(name = ServiceUnavailable.NAME, type = ServiceUnavailable.class), @XmlElement(name = ItemNotFound.NAME, type = ItemNotFound.class), @XmlElement(name = Gone.NAME, type = Gone.class), @XmlElement(name = Forbidden.NAME, type = Forbidden.class), @XmlElement(name = FeatureNotImplemented.NAME, type = FeatureNotImplemented.class), @XmlElement(name = BadRequest.NAME, type = BadRequest.class), @XmlElement(name = NotAllowed.NAME, type = NotAllowed.class), @XmlElement(name = NotAcceptable.NAME, type = NotAcceptable.class), @XmlElement(name = UnSupportedVersion.NAME, type = UnSupportedVersion.class), @XmlElement(name = UnSupportedStanzaType.NAME, type = UnSupportedStanzaType.class), @XmlElement(name = UnSupportedFeature.NAME, type = UnSupportedFeature.class), @XmlElement(name = UnSupportedEncoding.NAME, type = UnSupportedEncoding.class), @XmlElement(name = SystemShutdown.NAME, type = SystemShutdown.class), @XmlElement(name = SeeOtherHost.NAME, type = SeeOtherHost.class), @XmlElement(name = RestrictedXml.NAME, type = RestrictedXml.class), @XmlElement(name = com.sissi.protocol.error.detail.ResourceConstraint.NAME, type = com.sissi.protocol.error.detail.ResourceConstraint.class), @XmlElement(name = Reset.NAME, type = Reset.class), @XmlElement(name = PolicyViolation.NAME, type = PolicyViolation.class), @XmlElement(name = NotWellFormed.NAME, type = NotWellFormed.class), @XmlElement(name = InvalidXml.NAME, type = InvalidXml.class), @XmlElement(name = InvalidFrom.NAME, type = InvalidFrom.class), @XmlElement(name = InternalServerError.NAME, type = InternalServerError.class), @XmlElement(name = Conflict.NAME, type = Conflict.class), @XmlElement(name = BadNamespacePrefix.NAME, type = BadNamespacePrefix.class), @XmlElement(name = BadFormat.NAME, type = BadFormat.class), @XmlElement(name = HostGone.NAME, type = HostGone.class), @XmlElement(name = HostUnknown.NAME, type = HostUnknown.class), @XmlElement(name = InvaildNamespace.NAME, type = InvaildNamespace.class), @XmlElement(name = NotAuthorized.NAME, type = NotAuthorized.class), @XmlElement(name = ImproperAddressing.NAME, type = ImproperAddressing.class) }) public List<ErrorDetail> getDetails() { return this.details; } }