/** * * Copyright © 2014-2023 Florian Schmaus * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.jivesoftware.smack.packet; import java.util.Objects; import javax.xml.namespace.QName; /** * An XMPP error IQ. *
* According to RFC 6120 § 8.3.1 "4. An error stanza MUST contain an <error/> child element.", so this class can
* only be constructed if a stanza error is provided.
*/
public final class ErrorIQ extends IQ {
public static final String ELEMENT = StanzaError.ERROR;
private final IQ request;
private ErrorIQ(Builder builder, QName childElementQName) {
super(builder, childElementQName);
Objects.requireNonNull(builder.getError(), "Must provide an stanza error when building error IQs");
this.request = builder.request;
}
public static ErrorIQ createErrorResponse(final IQ request, final StanzaError error) {
Builder builder = new Builder(error, request);
builder.setError(error);
return builder.build();
}
@Override
protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder xml) {
if (request == null) {
return null;
}
return request.getIQChildElementBuilder(xml);
}
public static Builder builder(StanzaError error) {
return new Builder(error, IqData.EMPTY.ofType(IQ.Type.error));
}
public static Builder builder(StanzaError error, IqData iqData) {
return new Builder(error, iqData);
}
public static final class Builder extends IqBuilder