You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@labs.apache.org by be...@apache.org on 2008/11/22 21:42:49 UTC

svn commit: r719914 - in /labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery: collection/ handler/ management/

Author: berndf
Date: Sat Nov 22 12:42:48 2008
New Revision: 719914

URL: http://svn.apache.org/viewvc?rev=719914&view=rev
Log:
[vysper] LABS-228: more service disco feature: item req, respect node on query, error handling etc.

Added:
    labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/handler/DiscoItemIQHandler.java
    labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/management/ServiceDiscoveryRequestException.java
Modified:
    labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/collection/ServiceCollector.java
    labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/handler/DiscoInfoIQHandler.java
    labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/management/InfoRequest.java
    labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/management/InfoRequestListener.java
    labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/management/Item.java
    labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/management/ItemRequestListener.java
    labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/management/ServerInfoRequestListener.java

Modified: labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/collection/ServiceCollector.java
URL: http://svn.apache.org/viewvc/labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/collection/ServiceCollector.java?rev=719914&r1=719913&r2=719914&view=diff
==============================================================================
--- labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/collection/ServiceCollector.java (original)
+++ labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/collection/ServiceCollector.java Sat Nov 22 12:42:48 2008
@@ -49,7 +49,7 @@
     /**
      * collect all server feature and identity info from the listeners
      */
-    public List<InfoElement> processServerInfoRequest(InfoRequest infoRequest) {
+    public List<InfoElement> processServerInfoRequest(InfoRequest infoRequest) throws ServiceDiscoveryRequestException {
         // sorted structure, to place all <feature/> after <identity/> 
         List<InfoElement> elements = new ArrayList<InfoElement>();
         elements.add(DEFAULT_FEATURE);
@@ -57,6 +57,8 @@
             List<InfoElement> elementList = null;
             try {
                 elementList = serverInfoRequestListener.getServerInfosFor(infoRequest);
+            } catch (ServiceDiscoveryRequestException abortion) {
+                throw abortion;
             } catch (Throwable e) {
                 continue;
             }
@@ -69,7 +71,7 @@
     /**
      * collect all non-server feature and identity info from the listeners
      */
-    public List<InfoElement> processInfoRequest(InfoRequest infoRequest) {
+    public List<InfoElement> processInfoRequest(InfoRequest infoRequest) throws ServiceDiscoveryRequestException {
         // sorted structure, to place all <feature/> after <identity/>
         List<InfoElement> elements = new ArrayList<InfoElement>();
         elements.add(DEFAULT_FEATURE);
@@ -77,6 +79,8 @@
             List<InfoElement> elementList = null;
             try {
                 elementList = infoRequestListener.getInfosFor(infoRequest);
+            } catch (ServiceDiscoveryRequestException abortion) {
+                throw abortion;
             } catch (Throwable e) {
                 continue;
             }
@@ -89,12 +93,14 @@
     /**
      * collect all item info from the listeners
      */
-    public List<Item> processItemRequest(InfoRequest infoRequest) {
+    public List<Item> processItemRequest(InfoRequest infoRequest) throws ServiceDiscoveryRequestException {
         List<Item> elements = new ArrayList<Item>();
         for (ItemRequestListener itemRequestListener : itemRequestListeners) {
             List<Item> elementList = null;
             try {
                 elementList = itemRequestListener.getItemsFor(infoRequest);
+            } catch (ServiceDiscoveryRequestException abortion) {
+                throw abortion;
             } catch (Throwable e) {
                 continue;
             }

Modified: labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/handler/DiscoInfoIQHandler.java
URL: http://svn.apache.org/viewvc/labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/handler/DiscoInfoIQHandler.java?rev=719914&r1=719913&r2=719914&view=diff
==============================================================================
--- labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/handler/DiscoInfoIQHandler.java (original)
+++ labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/handler/DiscoInfoIQHandler.java Sat Nov 22 12:42:48 2008
@@ -17,23 +17,31 @@
 
 package org.apache.vysper.xmpp.modules.servicediscovery.handler;
 
+import org.apache.vysper.xmpp.addressing.Entity;
 import org.apache.vysper.xmpp.modules.core.base.handler.DefaultIQHandler;
 import org.apache.vysper.xmpp.modules.servicediscovery.collection.ServiceCollector;
 import org.apache.vysper.xmpp.modules.servicediscovery.collection.ServiceDiscoveryRequestListenerRegistry;
 import org.apache.vysper.xmpp.modules.servicediscovery.management.InfoElement;
 import org.apache.vysper.xmpp.modules.servicediscovery.management.InfoRequest;
+import org.apache.vysper.xmpp.modules.servicediscovery.management.ServiceDiscoveryRequestException;
 import org.apache.vysper.xmpp.protocol.NamespaceURIs;
 import org.apache.vysper.xmpp.server.ServerRuntimeContext;
 import org.apache.vysper.xmpp.server.SessionContext;
 import org.apache.vysper.xmpp.server.response.ServerErrorResponses;
-import org.apache.vysper.xmpp.stanza.*;
+import org.apache.vysper.xmpp.stanza.IQStanza;
+import org.apache.vysper.xmpp.stanza.IQStanzaType;
+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.XMLElement;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.util.List;
 
 /**
- * handles roster get, set, push & result requests
+ * handles IQ info queries
  */
 public class DiscoInfoIQHandler extends DefaultIQHandler {
 
@@ -45,9 +53,18 @@
     }
 
     @Override
+    protected boolean verifyInnerElement(Stanza stanza) {
+        return verifyInnerElementWorker(stanza, "query");
+    }
+
+    @Override
     protected Stanza handleGet(IQStanza stanza, ServerRuntimeContext serverRuntimeContext, SessionContext sessionContext) {
         ServiceCollector serviceCollector = null;
 
+        // TODO if the target entity does not exist, return error/cancel/item-not-found
+        // TODO more strictly, server can also return error/cancel/service-unaivable
+
+        // retrieve the service collector
         try {
             serviceCollector = (ServiceCollector)serverRuntimeContext.getServerRuntimeContextService(ServiceDiscoveryRequestListenerRegistry.SERVICE_DISCOVERY_REQUEST_LISTENER_REGISTRY);
         } catch (Exception e) {
@@ -62,23 +79,50 @@
                     getErrorLanguage(serverRuntimeContext, sessionContext), null);
         }
 
-        boolean isServerInfoRequest = serverRuntimeContext.getServerEnitity().equals(stanza.getTo());
+        Entity to = stanza.getTo();
+        boolean isServerInfoRequest = false;
+        if (to == null) {
+            isServerInfoRequest = true; // this can only be meant to query the server
+        } else if (!to.isNodeSet()) {
+            isServerInfoRequest = serverRuntimeContext.getServerEnitity().equals(to);
+            if (!isServerInfoRequest) {
+                return ServerErrorResponses.getInstance().getStanzaError(StanzaErrorCondition.ITEM_NOT_FOUND, stanza,
+                        StanzaErrorType.CANCEL,
+                        "server does not handle info query requests for " + to.getFullQualifiedName(),
+                        getErrorLanguage(serverRuntimeContext, sessionContext), null);
+            }
+        }
+
+        XMLElement queryElement = stanza.getFirstInnerElement();
+        String node = queryElement != null ? queryElement.getAttributeValue("node") : null;
 
         // collect all the info response elements
         List<InfoElement> elements = null;
-        if (isServerInfoRequest) {
-            elements = serviceCollector.processServerInfoRequest(new InfoRequest(stanza.getFrom(), stanza.getTo()));
-        } else {
-            elements = serviceCollector.processInfoRequest(new InfoRequest(stanza.getFrom(), stanza.getTo()));
+        try {
+            if (isServerInfoRequest) {
+                elements = serviceCollector.processServerInfoRequest(new InfoRequest(stanza.getFrom(), to, node));
+            } else {
+                elements = serviceCollector.processInfoRequest(new InfoRequest(stanza.getFrom(), to, node));
+            }
+        } catch (ServiceDiscoveryRequestException e) {
+            // the request yields an error
+            StanzaErrorCondition stanzaErrorCondition = e.getErrorCondition();
+            if (stanzaErrorCondition == null) stanzaErrorCondition = StanzaErrorCondition.INTERNAL_SERVER_ERROR;
+            return ServerErrorResponses.getInstance().getStanzaError(stanzaErrorCondition, stanza,
+                    StanzaErrorType.CANCEL,
+                    "disco info request failed.",
+                    getErrorLanguage(serverRuntimeContext, sessionContext), null);
         }
 
         //TODO check that elementSet contains at least one identity element and on feature element!
 
         // render the stanza with information collected
-        StanzaBuilder stanzaBuilder = StanzaBuilder.createIQStanza(stanza.getTo(), stanza.getFrom(), IQStanzaType.RESULT, stanza.getID()).
+        StanzaBuilder stanzaBuilder = StanzaBuilder.createIQStanza(to, stanza.getFrom(), IQStanzaType.RESULT, stanza.getID()).
             startInnerElement("query").
             addNamespaceAttribute(NamespaceURIs.XEP0030_SERVICE_DISCOVERY_INFO);
-
+            if (node != null) {
+                stanzaBuilder.addAttribute("node", node);
+            }
             for (InfoElement infoElement : elements) {
                 infoElement.insertElement(stanzaBuilder);
             }

Added: labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/handler/DiscoItemIQHandler.java
URL: http://svn.apache.org/viewvc/labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/handler/DiscoItemIQHandler.java?rev=719914&view=auto
==============================================================================
--- labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/handler/DiscoItemIQHandler.java (added)
+++ labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/handler/DiscoItemIQHandler.java Sat Nov 22 12:42:48 2008
@@ -0,0 +1,124 @@
+/***********************************************************************
+ * Copyright (c) 2006-2007 The Apache Software Foundation.             *
+ * 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.apache.vysper.xmpp.modules.servicediscovery.handler;
+
+import org.apache.vysper.xmpp.addressing.Entity;
+import org.apache.vysper.xmpp.modules.core.base.handler.DefaultIQHandler;
+import org.apache.vysper.xmpp.modules.servicediscovery.collection.ServiceCollector;
+import org.apache.vysper.xmpp.modules.servicediscovery.collection.ServiceDiscoveryRequestListenerRegistry;
+import org.apache.vysper.xmpp.modules.servicediscovery.management.InfoRequest;
+import org.apache.vysper.xmpp.modules.servicediscovery.management.Item;
+import org.apache.vysper.xmpp.modules.servicediscovery.management.ServiceDiscoveryRequestException;
+import org.apache.vysper.xmpp.protocol.NamespaceURIs;
+import org.apache.vysper.xmpp.server.ServerRuntimeContext;
+import org.apache.vysper.xmpp.server.SessionContext;
+import org.apache.vysper.xmpp.server.response.ServerErrorResponses;
+import org.apache.vysper.xmpp.stanza.IQStanza;
+import org.apache.vysper.xmpp.stanza.IQStanzaType;
+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.XMLElement;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.List;
+
+/**
+ * handles IQ info queries
+ */
+public class DiscoItemIQHandler extends DefaultIQHandler {
+
+    final Logger logger = LoggerFactory.getLogger(DiscoItemIQHandler.class);
+
+    @Override
+    protected boolean verifyNamespace(Stanza stanza) {
+        return verifyInnerNamespace(stanza, NamespaceURIs.XEP0030_SERVICE_DISCOVERY_ITEMS);
+    }
+
+    @Override
+    protected boolean verifyInnerElement(Stanza stanza) {
+        return verifyInnerElementWorker(stanza, "query");
+    }
+
+    @Override
+    protected Stanza handleGet(IQStanza stanza, ServerRuntimeContext serverRuntimeContext, SessionContext sessionContext) {
+        ServiceCollector serviceCollector = null;
+
+        // retrieve the service collector
+        try {
+            serviceCollector = (ServiceCollector)serverRuntimeContext.getServerRuntimeContextService(ServiceDiscoveryRequestListenerRegistry.SERVICE_DISCOVERY_REQUEST_LISTENER_REGISTRY);
+        } catch (Exception e) {
+            logger.error("error retrieving ServiceCollector service {}", e);
+            serviceCollector = null;
+        }
+
+        if (serviceCollector == null) {
+            return ServerErrorResponses.getInstance().getStanzaError(StanzaErrorCondition.INTERNAL_SERVER_ERROR, stanza,
+                    StanzaErrorType.CANCEL,
+                    "cannot retrieve IQ-get-info result from internal components",
+                    getErrorLanguage(serverRuntimeContext, sessionContext), null);
+        }
+
+        Entity to = stanza.getTo();
+        boolean isServerInfoRequest = false;
+        if (to == null) {
+            isServerInfoRequest = true; // this can only be meant to query the server
+        } else if (!to.isNodeSet()) {
+            isServerInfoRequest = serverRuntimeContext.getServerEnitity().equals(to);
+            if (!isServerInfoRequest) {
+                return ServerErrorResponses.getInstance().getStanzaError(StanzaErrorCondition.ITEM_NOT_FOUND, stanza,
+                        StanzaErrorType.CANCEL,
+                        "server does not handle info query requests for " + to.getFullQualifiedName(),
+                        getErrorLanguage(serverRuntimeContext, sessionContext), null);
+            }
+        }
+
+        XMLElement queryElement = stanza.getFirstInnerElement();
+        String node = queryElement != null ? queryElement.getAttributeValue("node") : null;
+
+        // collect all the item response elements
+        List<Item> items = null;
+        try {
+            items = serviceCollector.processItemRequest(new InfoRequest(stanza.getFrom(), stanza.getTo(), node));
+        } catch (ServiceDiscoveryRequestException e) {
+            // the request yields an error
+            StanzaErrorCondition stanzaErrorCondition = e.getErrorCondition();
+            if (stanzaErrorCondition == null) stanzaErrorCondition = StanzaErrorCondition.INTERNAL_SERVER_ERROR;
+            return ServerErrorResponses.getInstance().getStanzaError(stanzaErrorCondition, stanza,
+                    StanzaErrorType.CANCEL,
+                    "disco info request failed.",
+                    getErrorLanguage(serverRuntimeContext, sessionContext), null);
+        }
+
+        // render the stanza with information collected
+        StanzaBuilder stanzaBuilder = StanzaBuilder.createIQStanza(to, stanza.getFrom(), IQStanzaType.RESULT, stanza.getID()).
+            startInnerElement("query").
+            addNamespaceAttribute(NamespaceURIs.XEP0030_SERVICE_DISCOVERY_ITEMS);
+            if (node != null) {
+                stanzaBuilder.addAttribute("node", node);
+            }
+            for (Item item : items) {
+                item.insertElement(stanzaBuilder);
+            }
+        stanzaBuilder.endInnerElement();
+
+        return stanzaBuilder.getFinalStanza();
+    }
+}
\ No newline at end of file

Modified: labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/management/InfoRequest.java
URL: http://svn.apache.org/viewvc/labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/management/InfoRequest.java?rev=719914&r1=719913&r2=719914&view=diff
==============================================================================
--- labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/management/InfoRequest.java (original)
+++ labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/management/InfoRequest.java Sat Nov 22 12:42:48 2008
@@ -24,10 +24,12 @@
 
     private Entity from;
     private Entity to;
+    private String node = null;
 
-    public InfoRequest(Entity from, Entity to) {
+    public InfoRequest(Entity from, Entity to, String node) {
         this.from = from;
         this.to = to;
+        this.node = node;
     }
 
     public Entity getFrom() {
@@ -37,4 +39,8 @@
     public Entity getTo() {
         return to;
     }
+
+    public String getNode() {
+        return node;
+    }
 }

Modified: labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/management/InfoRequestListener.java
URL: http://svn.apache.org/viewvc/labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/management/InfoRequestListener.java?rev=719914&r1=719913&r2=719914&view=diff
==============================================================================
--- labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/management/InfoRequestListener.java (original)
+++ labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/management/InfoRequestListener.java Sat Nov 22 12:42:48 2008
@@ -23,6 +23,6 @@
  */
 public interface InfoRequestListener {
 
-    public List<InfoElement> getInfosFor(InfoRequest request);
+    public List<InfoElement> getInfosFor(InfoRequest request) throws ServiceDiscoveryRequestException;
     
 }

Modified: labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/management/Item.java
URL: http://svn.apache.org/viewvc/labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/management/Item.java?rev=719914&r1=719913&r2=719914&view=diff
==============================================================================
--- labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/management/Item.java (original)
+++ labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/management/Item.java Sat Nov 22 12:42:48 2008
@@ -17,6 +17,7 @@
 package org.apache.vysper.xmpp.modules.servicediscovery.management;
 
 import org.apache.vysper.xmpp.addressing.Entity;
+import org.apache.vysper.xmpp.stanza.StanzaBuilder;
 
 /**
  */
@@ -27,6 +28,7 @@
     protected String node; // optional
 
     public Item(Entity jid, String name, String node) {
+        if (jid == null) throw new IllegalArgumentException("jid may not be null");
         this.jid = jid;
         this.name = name;
         this.node = node;
@@ -47,4 +49,12 @@
     public String getNode() {
         return node;
     }
+
+    public void insertElement(StanzaBuilder stanzaBuilder) {
+        stanzaBuilder.startInnerElement("item");
+            if (jid != null) stanzaBuilder.addAttribute("jid", jid.getFullQualifiedName());
+            if (name != null) stanzaBuilder.addAttribute("name", name);
+            if (node != null) stanzaBuilder.addAttribute("node", node);
+        stanzaBuilder.endInnerElement();
+    }
 }

Modified: labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/management/ItemRequestListener.java
URL: http://svn.apache.org/viewvc/labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/management/ItemRequestListener.java?rev=719914&r1=719913&r2=719914&view=diff
==============================================================================
--- labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/management/ItemRequestListener.java (original)
+++ labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/management/ItemRequestListener.java Sat Nov 22 12:42:48 2008
@@ -24,6 +24,6 @@
  */
 public interface ItemRequestListener {
     
-    public List<Item> getItemsFor(InfoRequest request);
+    public List<Item> getItemsFor(InfoRequest request) throws ServiceDiscoveryRequestException;
     
 }

Modified: labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/management/ServerInfoRequestListener.java
URL: http://svn.apache.org/viewvc/labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/management/ServerInfoRequestListener.java?rev=719914&r1=719913&r2=719914&view=diff
==============================================================================
--- labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/management/ServerInfoRequestListener.java (original)
+++ labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/management/ServerInfoRequestListener.java Sat Nov 22 12:42:48 2008
@@ -23,6 +23,6 @@
  */
 public interface ServerInfoRequestListener {
 
-    public List<InfoElement> getServerInfosFor(InfoRequest request);
+    public List<InfoElement> getServerInfosFor(InfoRequest request) throws ServiceDiscoveryRequestException;
     
 }
\ No newline at end of file

Added: labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/management/ServiceDiscoveryRequestException.java
URL: http://svn.apache.org/viewvc/labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/management/ServiceDiscoveryRequestException.java?rev=719914&view=auto
==============================================================================
--- labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/management/ServiceDiscoveryRequestException.java (added)
+++ labs/vysper/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/management/ServiceDiscoveryRequestException.java Sat Nov 22 12:42:48 2008
@@ -0,0 +1,43 @@
+/***********************************************************************
+ * Copyright (c) 2006-2007 The Apache Software Foundation.             *
+ * 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.apache.vysper.xmpp.modules.servicediscovery.management;
+
+import org.apache.vysper.xmpp.stanza.StanzaErrorCondition;
+
+/**
+ */
+public class ServiceDiscoveryRequestException extends Exception {
+
+    private StanzaErrorCondition errorCondition;
+
+    public ServiceDiscoveryRequestException(String s) {
+        super(s);
+    }
+    
+    public ServiceDiscoveryRequestException(StanzaErrorCondition errorCondition) {
+        this.errorCondition = errorCondition;
+    }
+
+    public ServiceDiscoveryRequestException(StanzaErrorCondition errorCondition, Throwable throwable) {
+        super(throwable);
+        this.errorCondition = errorCondition;
+    }
+
+    public StanzaErrorCondition getErrorCondition() {
+        return errorCondition;
+    }
+}                                             



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@labs.apache.org
For additional commands, e-mail: commits-help@labs.apache.org