Author: mjakl
Date: Fri Jun 26 22:40:40 2009
New Revision: 788896
URL: http://svn.apache.org/viewvc?rev=788896&view=rev
Log:
* Use the provided ServerErrorResponse class to generate error stanzas for
pubsub requests.
* Fixed some typos in the javadoc.
* Add SpecClompliant annotations to handler methods.
Fixes VYSPER-63 and VYSPER-77
Modified:
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/ErrorStanzaGenerator.java
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubSubscribeHandler.java
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubUnsubscribeHandler.java
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/stanza/StanzaErrorCondition.java
mina/sandbox/vysper/trunk/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubSubscribeTestCase.java
mina/sandbox/vysper/trunk/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubUnsubscribeTestCase.java
Modified:
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/ErrorStanzaGenerator.java
URL:
http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/ErrorStanzaGenerator.java?rev=788896&r1=788895&r2=788896&view=diff
==============================================================================
---
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/ErrorStanzaGenerator.java
(original)
+++
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/ErrorStanzaGenerator.java
Fri Jun 26 22:40:40 2009
@@ -21,9 +21,14 @@
import org.apache.vysper.xmpp.addressing.Entity;
import org.apache.vysper.xmpp.protocol.NamespaceURIs;
-import org.apache.vysper.xmpp.stanza.IQStanzaType;
+import org.apache.vysper.xmpp.server.response.ServerErrorResponses;
+import org.apache.vysper.xmpp.stanza.IQStanza;
import org.apache.vysper.xmpp.stanza.Stanza;
-import org.apache.vysper.xmpp.stanza.StanzaBuilder;
+import org.apache.vysper.xmpp.stanza.StanzaErrorCondition;
+import org.apache.vysper.xmpp.stanza.StanzaErrorType;
+import org.apache.vysper.xmpp.xmlfragment.Attribute;
+import org.apache.vysper.xmpp.xmlfragment.XMLElement;
+import org.apache.vysper.xmpp.xmlfragment.XMLFragment;
/**
* The ErrorStanzaGenerator is used to unify the creation of error stanzas
across the pubsub
@@ -33,22 +38,25 @@
*/
public class ErrorStanzaGenerator {
+ // constants for pubsub related error elements
+ protected static final String NOT_SUBSCRIBED = "not-subscribed";
+ protected static final String SUBID_REQUIRED = "subid-required";
+ protected static final String INVALID_SUBID = "invalid-subid";
+ protected static final String INVALID_JID = "invalid-jid";
+
+ // The ServerErrorResponses object for generating type-safe error stanzas
+ protected ServerErrorResponses errorResponses =
ServerErrorResponses.getInstance();
+
/**
* Creates a "JID malformed" error stanza (not specific to the pubsub
module).
*
* @param sender who sent the erroneous request.
* @param receiver who was the recipient of the erroneous request.
- * @param iqStanzaID the staza ID of the errorneous request.
+ * @param stanza the stanza of the erroneous request.
* @return the generated stanza.
*/
- public Stanza generateJIDMalformedErrorStanza(Entity sender, Entity
receiver, String iqStanzaID) {
- StanzaBuilder error = StanzaBuilder.createIQStanza(receiver, sender,
IQStanzaType.ERROR, iqStanzaID);
- error.startInnerElement("error");
- error.addAttribute("type", "modify");
- error.startInnerElement("jid-malformed",
NamespaceURIs.URN_IETF_PARAMS_XML_NS_XMPP_STANZAS);
- error.endInnerElement(); // jid-malformed
- error.endInnerElement(); // error
- return error.getFinalStanza();
+ public Stanza generateJIDMalformedErrorStanza(Entity sender, Entity
receiver, IQStanza stanza) {
+ return
errorResponses.getStanzaError(StanzaErrorCondition.JID_MALFORMED, stanza,
StanzaErrorType.MODIFY, null, null, null);
}
/**
@@ -56,17 +64,11 @@
*
* @param sender who sent the erroneous request.
* @param receiver who was the recipient of the erroneous request.
- * @param iqStanzaID the staza ID of the errorneous request.
+ * @param stanza the stanza of the erroneous request.
* @return the generated stanza.
*/
- public Stanza generateInsufficientPrivilegesErrorStanza(Entity sender,
Entity receiver, String iqStanzaID) {
- StanzaBuilder error = StanzaBuilder.createIQStanza(receiver, sender,
IQStanzaType.ERROR, iqStanzaID);
- error.startInnerElement("error");
- error.addAttribute("type", "auth");
- error.startInnerElement("forbidden",
NamespaceURIs.URN_IETF_PARAMS_XML_NS_XMPP_STANZAS);
- error.endInnerElement(); // forbidden
- error.endInnerElement(); // error
- return error.getFinalStanza();
+ public Stanza generateInsufficientPrivilegesErrorStanza(Entity sender,
Entity receiver, IQStanza stanza) {
+ return errorResponses.getStanzaError(StanzaErrorCondition.FORBIDDEN,
stanza, StanzaErrorType.AUTH, null, null, null);
}
/**
@@ -75,19 +77,12 @@
*
* @param sender who sent the erroneous request.
* @param receiver who was the recipient of the erroneous request.
- * @param iqStanzaID the staza ID of the errorneous request.
+ * @param stanza the stanza of the erroneous request.
* @return the generated stanza.
*/
- public Stanza generateNoSuchSubscriberErrorStanza(Entity sender, Entity
receiver, String iqStanzaID) {
- StanzaBuilder error = StanzaBuilder.createIQStanza(receiver, sender,
IQStanzaType.ERROR, iqStanzaID);
- error.startInnerElement("error");
- error.addAttribute("type", "cancel");
- error.startInnerElement("unexpected-request",
NamespaceURIs.URN_IETF_PARAMS_XML_NS_XMPP_STANZAS);
- error.endInnerElement(); // unexpected-request
- error.startInnerElement("not-subscribed",
NamespaceURIs.XEP0060_PUBSUB_ERRORS);
- error.endInnerElement(); // not-subscribed
- error.endInnerElement(); // error
- return error.getFinalStanza();
+ public Stanza generateNoSuchSubscriberErrorStanza(Entity sender, Entity
receiver, IQStanza stanza) {
+ XMLElement notSubscribed = new XMLElement(NOT_SUBSCRIBED,
NamespaceURIs.XEP0060_PUBSUB_ERRORS, (Attribute[])null, (XMLFragment[])null);
+ return
errorResponses.getStanzaError(StanzaErrorCondition.UNEXPECTED_REQUEST, stanza,
StanzaErrorType.CANCEL, null, null, notSubscribed);
}
/**
@@ -96,19 +91,12 @@
*
* @param sender who sent the erroneous request.
* @param receiver who was the recipient of the erroneous request.
- * @param iqStanzaID the staza ID of the errorneous request.
+ * @param stanza the stanza of the erroneous request.
* @return the generated stanza.
*/
- public Stanza generateSubIDRequiredErrorStanza(Entity sender, Entity
receiver, String iqStanzaID) {
- StanzaBuilder error = StanzaBuilder.createIQStanza(receiver, sender,
IQStanzaType.ERROR, iqStanzaID);
- error.startInnerElement("error");
- error.addAttribute("type", "modify");
- error.startInnerElement("bad-request",
NamespaceURIs.URN_IETF_PARAMS_XML_NS_XMPP_STANZAS);
- error.endInnerElement(); // bad-request
- error.startInnerElement("subid-required",
NamespaceURIs.XEP0060_PUBSUB_ERRORS);
- error.endInnerElement(); // subid-required
- error.endInnerElement(); // error
- return error.getFinalStanza();
+ public Stanza generateSubIDRequiredErrorStanza(Entity sender, Entity
receiver, IQStanza stanza) {
+ XMLElement subidRequired = new XMLElement(SUBID_REQUIRED,
NamespaceURIs.XEP0060_PUBSUB_ERRORS, (Attribute[])null, (XMLFragment[])null);
+ return errorResponses.getStanzaError(StanzaErrorCondition.BAD_REQUEST,
stanza, StanzaErrorType.MODIFY, null, null, subidRequired);
}
/**
@@ -116,17 +104,11 @@
*
* @param sender who sent the erroneous request.
* @param receiver who was the recipient of the erroneous request.
- * @param iqStanzaID the staza ID of the errorneous request.
+ * @param stanza the stanza of the erroneous request.
* @return the generated stanza.
*/
- public Stanza generateNoNodeErrorStanza(Entity sender, Entity receiver,
String iqStanzaID) {
- StanzaBuilder error = StanzaBuilder.createIQStanza(receiver, sender,
IQStanzaType.ERROR, iqStanzaID);
- error.startInnerElement("error");
- error.addAttribute("type", "cancel");
- error.startInnerElement("item-does-not-exist",
NamespaceURIs.URN_IETF_PARAMS_XML_NS_XMPP_STANZAS);
- error.endInnerElement(); // item-does-not-exist
- error.endInnerElement(); // error
- return error.getFinalStanza();
+ public Stanza generateNoNodeErrorStanza(Entity sender, Entity receiver,
IQStanza stanza) {
+ return
errorResponses.getStanzaError(StanzaErrorCondition.ITEM_DOES_NOT_EXIST, stanza,
StanzaErrorType.CANCEL, null, null, null);
}
/**
@@ -135,19 +117,12 @@
*
* @param sender who sent the erroneous request.
* @param receiver who was the recipient of the erroneous request.
- * @param iqStanzaID the staza ID of the errorneous request.
+ * @param stanza the stanza of the erroneous request.
* @return the generated stanza.
*/
- public Stanza generateSubIDNotValidErrorStanza(Entity sender, Entity
receiver, String iqStanzaID) {
- StanzaBuilder error = StanzaBuilder.createIQStanza(receiver, sender,
IQStanzaType.ERROR, iqStanzaID);
- error.startInnerElement("error");
- error.addAttribute("type", "modify");
- error.startInnerElement("not-acceptable",
NamespaceURIs.URN_IETF_PARAMS_XML_NS_XMPP_STANZAS);
- error.endInnerElement(); // not-acceptable
- error.startInnerElement("invalid-subid",
NamespaceURIs.XEP0060_PUBSUB_ERRORS);
- error.endInnerElement(); // invlaid-subid
- error.endInnerElement(); // error
- return error.getFinalStanza();
+ public Stanza generateSubIDNotValidErrorStanza(Entity sender, Entity
receiver, IQStanza stanza) {
+ XMLElement invalidSubID = new XMLElement(INVALID_SUBID,
NamespaceURIs.XEP0060_PUBSUB_ERRORS, (Attribute[])null, (XMLFragment[])null);
+ return
errorResponses.getStanzaError(StanzaErrorCondition.NOT_ACCEPTABLE, stanza,
StanzaErrorType.MODIFY, null, null, invalidSubID);
}
/**
@@ -156,18 +131,11 @@
*
* @param sender who sent the erroneous request.
* @param receiver who was the recipient of the erroneous request.
- * @param iqStanzaID the staza ID of the errorneous request.
+ * @param stanza the stanza of the erroneous request.
* @return the generated stanza.
*/
- public Stanza generateJIDDontMatchErrorStanza(Entity sender, Entity
receiver, String iqStanzaID) {
- StanzaBuilder error = StanzaBuilder.createIQStanza(receiver, sender,
IQStanzaType.ERROR, iqStanzaID);
- error.startInnerElement("error");
- error.addAttribute("type", "modify");
- error.startInnerElement("bad-request",
NamespaceURIs.URN_IETF_PARAMS_XML_NS_XMPP_STANZAS);
- error.endInnerElement(); // bad-request
- error.startInnerElement("invalid-jid",
NamespaceURIs.XEP0060_PUBSUB_ERRORS);
- error.endInnerElement(); // invalid-jid
- error.endInnerElement(); // error
- return error.getFinalStanza();
+ public Stanza generateJIDDontMatchErrorStanza(Entity sender, Entity
receiver, IQStanza stanza) {
+ XMLElement invalidJID = new XMLElement(INVALID_JID,
NamespaceURIs.XEP0060_PUBSUB_ERRORS, (Attribute[])null, (XMLFragment[])null);
+ return errorResponses.getStanzaError(StanzaErrorCondition.BAD_REQUEST,
stanza, StanzaErrorType.MODIFY, null, null, invalidJID);
}
}
Modified:
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubSubscribeHandler.java
URL:
http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubSubscribeHandler.java?rev=788896&r1=788895&r2=788896&view=diff
==============================================================================
---
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubSubscribeHandler.java
(original)
+++
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubSubscribeHandler.java
Fri Jun 26 22:40:40 2009
@@ -64,6 +64,7 @@
* @return the appropriate response stanza (either success or some error
condition).
*/
@Override
+ @SpecCompliant(spec="xep-0060", section="6.1.3", status=
SpecCompliant.ComplianceStatus.IN_PROGRESS, coverage =
SpecCompliant.ComplianceCoverage.UNSUPPORTED)
protected Stanza handleSet(IQStanza stanza,
ServerRuntimeContext serverRuntimeContext,
SessionContext sessionContext) {
@@ -82,12 +83,12 @@
try {
subJID = EntityImpl.parse(strSubJID);
} catch (EntityFormatException e) {
- return
errorStanzaGenerator.generateJIDMalformedErrorStanza(sender, receiver,
iqStanzaID);
+ return
errorStanzaGenerator.generateJIDMalformedErrorStanza(sender, receiver, stanza);
}
if(!sender.getBareJID().equals(subJID.getBareJID())) {
// error condition 1 (6.1.3)
- return
errorStanzaGenerator.generateJIDDontMatchErrorStanza(sender, receiver,
iqStanzaID);
+ return
errorStanzaGenerator.generateJIDDontMatchErrorStanza(sender, receiver, stanza);
}
Entity nodeJID = extractNodeJID(stanza);
@@ -95,7 +96,7 @@
if(node == null) {
// no such node (error condition 11 (6.1.3))
- return errorStanzaGenerator.generateNoNodeErrorStanza(sender,
receiver, iqStanzaID);
+ return errorStanzaGenerator.generateNoNodeErrorStanza(sender,
receiver, stanza);
}
String id = idGenerator.create();
Modified:
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubUnsubscribeHandler.java
URL:
http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubUnsubscribeHandler.java?rev=788896&r1=788895&r2=788896&view=diff
==============================================================================
---
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubUnsubscribeHandler.java
(original)
+++
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubUnsubscribeHandler.java
Fri Jun 26 22:40:40 2009
@@ -65,6 +65,7 @@
* @return the appropriate response stanza (either success or some error
condition).
*/
@Override
+ @SpecCompliant(spec="xep-0060", section="6.2.3", status=
SpecCompliant.ComplianceStatus.IN_PROGRESS, coverage =
SpecCompliant.ComplianceCoverage.UNSUPPORTED)
protected Stanza handleSet(IQStanza stanza,
ServerRuntimeContext serverRuntimeContext,
SessionContext sessionContext) {
@@ -85,12 +86,12 @@
subJID = EntityImpl.parse(strSubJID);
} catch (EntityFormatException e) {
// return error stanza... (general error)
- return
errorStanzaGenerator.generateJIDMalformedErrorStanza(sender, receiver,
iqStanzaID);
+ return
errorStanzaGenerator.generateJIDMalformedErrorStanza(sender, receiver, stanza);
}
if(!sender.getBareJID().equals(subJID.getBareJID())) {
// insufficient privileges (error condition 3 (6.2.3))
- return
errorStanzaGenerator.generateInsufficientPrivilegesErrorStanza(sender,
receiver, iqStanzaID);
+ return
errorStanzaGenerator.generateInsufficientPrivilegesErrorStanza(sender,
receiver, stanza);
}
Entity nodeJID = extractNodeJID(stanza);
@@ -98,23 +99,23 @@
if(node == null) {
// no such node (error condition 4 (6.2.3))
- return errorStanzaGenerator.generateNoNodeErrorStanza(sender,
receiver, iqStanzaID);
+ return errorStanzaGenerator.generateNoNodeErrorStanza(sender,
receiver, stanza);
}
if(strSubID == null) {
try {
if(node.unsubscribe(subJID) == false) {
// has no subscription (6.2.3.2)
- return
errorStanzaGenerator.generateNoSuchSubscriberErrorStanza(sender, receiver,
iqStanzaID);
+ return
errorStanzaGenerator.generateNoSuchSubscriberErrorStanza(sender, receiver,
stanza);
}
} catch(MultipleSubscriptionException e) {
// error case 6.2.3.1
- return
errorStanzaGenerator.generateSubIDRequiredErrorStanza(sender, receiver,
iqStanzaID);
+ return
errorStanzaGenerator.generateSubIDRequiredErrorStanza(sender, receiver, stanza);
}
} else {
if(node.unsubscribe(strSubID, subJID) == false) {
// subID not valid (6.2.3.5)
- return
errorStanzaGenerator.generateSubIDNotValidErrorStanza(sender, receiver,
iqStanzaID);
+ return
errorStanzaGenerator.generateSubIDNotValidErrorStanza(sender, receiver, stanza);
}
}
Modified:
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/stanza/StanzaErrorCondition.java
URL:
http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/stanza/StanzaErrorCondition.java?rev=788896&r1=788895&r2=788896&view=diff
==============================================================================
---
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/stanza/StanzaErrorCondition.java
(original)
+++
mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/stanza/StanzaErrorCondition.java
Fri Jun 26 22:40:40 2009
@@ -37,6 +37,7 @@
GONE ("gone"),
INTERNAL_SERVER_ERROR ("internal-server-error"),
ITEM_NOT_FOUND ("item-not-found"),
+ ITEM_DOES_NOT_EXIST ("item-does-not-exist"),
JID_MALFORMED ("jid-malformed"),
NOT_ACCEPTABLE ("not-acceptable"),
NOT_ALLOWED ("not-allowed"),
Modified:
mina/sandbox/vysper/trunk/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubSubscribeTestCase.java
URL:
http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubSubscribeTestCase.java?rev=788896&r1=788895&r2=788896&view=diff
==============================================================================
---
mina/sandbox/vysper/trunk/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubSubscribeTestCase.java
(original)
+++
mina/sandbox/vysper/trunk/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubSubscribeTestCase.java
Fri Jun 26 22:40:40 2009
@@ -79,7 +79,7 @@
assertEquals("id123", response.getAttributeValue("id")); // IDs must
match
- XMLElement error = response.getFirstInnerElement();
+ XMLElement error = response.getInnerElementsNamed("error").get(0);
//jump directly to the error part
assertEquals("error", error.getName());
assertEquals("modify", error.getAttributeValue("type"));
@@ -104,7 +104,7 @@
assertEquals("id123", response.getAttributeValue("id")); // IDs must
match
- XMLElement error = response.getFirstInnerElement();
+ XMLElement error = response.getInnerElementsNamed("error").get(0);
//jump directly to the error part
assertEquals("error", error.getName());
assertEquals("modify", error.getAttributeValue("type"));
@@ -126,7 +126,7 @@
assertEquals("id123", response.getAttributeValue("id")); // IDs must
match
- XMLElement error = response.getFirstInnerElement();
+ XMLElement error = response.getInnerElementsNamed("error").get(0);
//jump directly to the error part
assertEquals("error", error.getName());
assertEquals("cancel", error.getAttributeValue("type"));
Modified:
mina/sandbox/vysper/trunk/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubUnsubscribeTestCase.java
URL:
http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubUnsubscribeTestCase.java?rev=788896&r1=788895&r2=788896&view=diff
==============================================================================
---
mina/sandbox/vysper/trunk/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubUnsubscribeTestCase.java
(original)
+++
mina/sandbox/vysper/trunk/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubUnsubscribeTestCase.java
Fri Jun 26 22:40:40 2009
@@ -130,7 +130,7 @@
assertEquals("id123", response.getAttributeValue("id")); // IDs must
match
- XMLElement error = response.getFirstInnerElement();
+ XMLElement error = response.getInnerElementsNamed("error").get(0);
//jump directly to the error part
assertEquals("error", error.getName());
assertEquals("modify", error.getAttributeValue("type"));
@@ -156,7 +156,7 @@
assertEquals("id123", response.getAttributeValue("id")); // IDs must
match
- XMLElement error = response.getFirstInnerElement();
+ XMLElement error = response.getInnerElementsNamed("error").get(0);
//jump directly to the error part
assertEquals("error", error.getName());
assertEquals("cancel", error.getAttributeValue("type"));
@@ -185,7 +185,7 @@
assertEquals("id123", response.getAttributeValue("id")); // IDs must
match
- XMLElement error = response.getFirstInnerElement();
+ XMLElement error = response.getInnerElementsNamed("error").get(0);
//jump directly to the error part
assertEquals("error", error.getName());
assertEquals("auth", error.getAttributeValue("type"));
@@ -207,7 +207,7 @@
assertEquals("id123", response.getAttributeValue("id")); // IDs must
match
- XMLElement error = response.getFirstInnerElement();
+ XMLElement error = response.getInnerElementsNamed("error").get(0);
//jump directly to the error part
assertEquals("error", error.getName());
assertEquals("cancel", error.getAttributeValue("type"));
@@ -234,7 +234,7 @@
assertEquals("id123", response.getAttributeValue("id")); // IDs must
match
- XMLElement error = response.getFirstInnerElement();
+ XMLElement error = response.getInnerElementsNamed("error").get(0);
//jump directly to the error part
assertEquals("error", error.getName());
assertEquals("modify", error.getAttributeValue("type"));
@@ -259,7 +259,7 @@
assertEquals("id123", response.getAttributeValue("id")); // IDs must
match
- XMLElement error = response.getFirstInnerElement();
+ XMLElement error = response.getInnerElementsNamed("error").get(0);
//jump directly to the error part
assertEquals("error", error.getName());
assertEquals("modify", error.getAttributeValue("type"));