📄 streamerror.java
字号:
/**
* $RCSfile$
* $Revision: 2599 $
* $Date: 2005-04-03 14:09:41 -0700 (Sun, 03 Apr 2005) $
*
* Copyright 2005 Jive Software.
*
* All rights reserved. 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.xmpp.packet;
import org.dom4j.*;
import org.dom4j.io.XMLWriter;
import org.dom4j.io.OutputFormat;
import java.util.Iterator;
import java.io.StringWriter;
/**
* A stream error. Stream errors have a condition and they
* can optionally include explanation text.
*
* @author Matt Tucker
*/
public class StreamError {
private static final String ERROR_NAMESPACE = "urn:ietf:params:xml:ns:xmpp-streams";
private static DocumentFactory docFactory = DocumentFactory.getInstance();
private Element element;
/**
* Construcs a new StreamError with the specified condition.
*
* @param condition the error condition.
*/
public StreamError(Condition condition) {
this.element = docFactory.createElement(docFactory.createQName("error", "stream",
"http://etherx.jabber.org/streams"));
setCondition(condition);
}
/**
* Constructs a new StreamError with the specified condition and error text.
*
* @param condition the error condition.
* @param text the text description of the error.
*/
public StreamError(Condition condition, String text) {
this.element = docFactory.createElement(docFactory.createQName("error", "stream",
"http://etherx.jabber.org/streams"));
setCondition(condition);
setText(text, null);
}
/**
* Constructs a new StreamError with the specified condition and error text.
*
* @param condition the error condition.
* @param text the text description of the error.
* @param language the language code of the error description (e.g. "en").
*/
public StreamError(Condition condition, String text, String language) {
this.element = docFactory.createElement(docFactory.createQName("error", "stream",
"http://etherx.jabber.org/streams"));
setCondition(condition);
setText(text, language);
}
/**
* Constructs a new StreamError using an existing Element. This is useful
* for parsing incoming error Elements into StreamError objects.
*
* @param element the stream error Element.
*/
public StreamError(Element element) {
this.element = element;
}
/**
* Returns the error condition.
*
* @return the error condition.
* @see Condition
*/
public Condition getCondition() {
for (Iterator i=element.elementIterator(); i.hasNext(); ) {
Element el = (Element)i.next();
if (el.getNamespaceURI().equals(ERROR_NAMESPACE) &&
!el.getName().equals("text"))
{
return Condition.fromXMPP(el.getName());
}
}
return null;
}
/**
* Sets the error condition.
*
* @param condition the error condition.
* @see Condition
*/
public void setCondition(Condition condition) {
if (condition == null) {
throw new NullPointerException("Condition cannot be null");
}
Element conditionElement = null;
for (Iterator i=element.elementIterator(); i.hasNext(); ) {
Element el = (Element)i.next();
if (el.getNamespaceURI().equals(ERROR_NAMESPACE) &&
!el.getName().equals("text"))
{
conditionElement = el;
}
}
if (conditionElement != null) {
element.remove(conditionElement);
}
conditionElement = docFactory.createElement(condition.toXMPP(), ERROR_NAMESPACE);
element.add(conditionElement);
}
/**
* Returns a text description of the error, or <tt>null</tt> if there
* is no text description.
*
* @return the text description of the error.
*/
public String getText() {
return element.elementText("text");
}
/**
* Sets the text description of the error.
*
* @param text the text description of the error.
*/
public void setText(String text) {
setText(text, null);
}
/**
* Sets the text description of the error. Optionally, a language code
* can be specified to indicate the language of the description.
*
* @param text the text description of the error.
* @param language the language code of the description, or <tt>null</tt> to specify
* no language code.
*/
public void setText(String text, String language) {
Element textElement = element.element("text");
// If text is null, clear the text.
if (text == null) {
if (textElement != null) {
element.remove(textElement);
}
return;
}
if (textElement == null) {
textElement = docFactory.createElement("text", ERROR_NAMESPACE);
if (language != null) {
textElement.addAttribute(QName.get("lang", "xml",
"http://www.w3.org/XML/1998/namespace"), language);
}
element.add(textElement);
}
textElement.setText(text);
}
/**
* Returns the text description's language code, or <tt>null</tt> if there
* is no language code associated with the description text.
*
* @return the language code of the text description, if it exists.
*/
public String getTextLanguage() {
Element textElement = element.element("text");
if (textElement != null) {
return textElement.attributeValue(QName.get("lang", "xml",
"http://www.w3.org/XML/1998/namespace"));
}
return null;
}
/**
* Returns the DOM4J Element that backs the error. The element is the definitive
* representation of the error and can be manipulated directly to change
* error contents.
*
* @return the DOM4J Element.
*/
public Element getElement() {
return element;
}
/**
* Returns the textual XML representation of this stream error.
*
* @return the textual XML representation of this stream error.
*/
public String toXML() {
return element.asXML();
}
public String toString() {
StringWriter out = new StringWriter();
XMLWriter writer = new XMLWriter(out, OutputFormat.createPrettyPrint());
try {
writer.write(element);
}
catch (Exception e) { }
return out.toString();
}
/**
* Type-safe enumeration for the error condition.<p>
*
* Implementation note: XMPP error conditions use "-" characters in
* their names such as "bad-request". Because "-" characters are not valid
* identifier parts in Java, they have been converted to "_" characters in
* the enumeration names, such as <tt>bad_request</tt>. The {@link #toXMPP()} and
* {@link #fromXMPP(String)} methods can be used to convert between the
* enumertation values and XMPP error code strings.
*/
public enum Condition {
/**
* The entity has sent XML that cannot be processed; this error MAY be used
* instead of the more specific XML-related errors, such as <bad-namespace-prefix/>,
* <invalid-xml/>, <restricted-xml/>, <unsupported-encoding/>, and
* <xml-not-well-formed/>, although the more specific errors are preferred.
*/
bad_format("bad-format"),
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -