You are viewing a plain text version of this content. The canonical link for it is here.
Posted to pubscribe-dev@ws.apache.org by sc...@apache.org on 2005/04/11 21:22:43 UTC

svn commit: r160940 - in incubator/hermes/trunk/src/java/org/apache/ws/notification: base/impl/ base/impl/faults/ base/v1_2/porttype/impl/ topics/impl/ topics/impl/faults/

Author: scamp
Date: Mon Apr 11 12:22:41 2005
New Revision: 160940

URL: http://svn.apache.org/viewcvs?view=rev&rev=160940
Log: (empty)


Added:
    incubator/hermes/trunk/src/java/org/apache/ws/notification/base/impl/faults/
    incubator/hermes/trunk/src/java/org/apache/ws/notification/topics/impl/faults/
Modified:
    incubator/hermes/trunk/src/java/org/apache/ws/notification/base/impl/AbstractSubscription.java
    incubator/hermes/trunk/src/java/org/apache/ws/notification/base/impl/XmlBeansTopicExpression.java
    incubator/hermes/trunk/src/java/org/apache/ws/notification/base/v1_2/porttype/impl/NotificationProducerPortTypeImpl.java
    incubator/hermes/trunk/src/java/org/apache/ws/notification/base/v1_2/porttype/impl/SubscriptionManagerPortTypeImpl.java
    incubator/hermes/trunk/src/java/org/apache/ws/notification/topics/impl/ConcreteTopicExpressionEvaluator.java
    incubator/hermes/trunk/src/java/org/apache/ws/notification/topics/impl/TopicExpressionEngineImpl.java

Modified: incubator/hermes/trunk/src/java/org/apache/ws/notification/base/impl/AbstractSubscription.java
URL: http://svn.apache.org/viewcvs/incubator/hermes/trunk/src/java/org/apache/ws/notification/base/impl/AbstractSubscription.java?view=diff&r1=160939&r2=160940
==============================================================================
--- incubator/hermes/trunk/src/java/org/apache/ws/notification/base/impl/AbstractSubscription.java (original)
+++ incubator/hermes/trunk/src/java/org/apache/ws/notification/base/impl/AbstractSubscription.java Mon Apr 11 12:22:41 2005
@@ -34,6 +34,7 @@
 import org.apache.ws.resource.ResourceException;
 import org.apache.ws.resource.ResourceHome;
 import org.apache.ws.resource.ResourceKey;
+import org.apache.ws.resource.PropertiesResource;
 import org.apache.ws.resource.lifetime.ResourceTerminationEvent;
 import org.apache.ws.resource.lifetime.ResourceTerminationListener;
 import org.apache.ws.resource.lifetime.impl.ResourceTerminationEventImpl;
@@ -55,7 +56,7 @@
 /**
  * TODO
  */
-public abstract class AbstractSubscription implements Subscription
+public abstract class AbstractSubscription implements Subscription, PropertiesResource
 {
 
     private static final Log LOG =

Modified: incubator/hermes/trunk/src/java/org/apache/ws/notification/base/impl/XmlBeansTopicExpression.java
URL: http://svn.apache.org/viewcvs/incubator/hermes/trunk/src/java/org/apache/ws/notification/base/impl/XmlBeansTopicExpression.java?view=diff&r1=160939&r2=160940
==============================================================================
--- incubator/hermes/trunk/src/java/org/apache/ws/notification/base/impl/XmlBeansTopicExpression.java (original)
+++ incubator/hermes/trunk/src/java/org/apache/ws/notification/base/impl/XmlBeansTopicExpression.java Mon Apr 11 12:22:41 2005
@@ -20,6 +20,10 @@
 import org.apache.commons.logging.LogFactory;
 import org.apache.ws.notification.topics.TopicExpression;
 import org.apache.ws.notification.topics.TopicExpression;
+import org.apache.ws.notification.topics.TopicExpressionEngine;
+import org.apache.ws.notification.topics.impl.TopicExpressionEngineImpl;
+import org.apache.ws.notification.topics.impl.faults.TopicPathDialectUnknownFaultException;
+import org.apache.ws.notification.base.v1_2.impl.WsnNamespaceVersionHolderImpl;
 import org.apache.ws.resource.i18n.Keys;
 import org.apache.ws.resource.i18n.MessagesImpl;
 import org.apache.ws.resource.properties.query.impl.XmlBeansQueryExpression;
@@ -65,6 +69,12 @@
             throws SchemaViolationException
     {
         m_topicExprXBean = topicExprXBean;
+
+        if( !isSupportedDialect(topicExprXBean.getDialect()))
+        {
+            throw new TopicPathDialectUnknownFaultException(new WsnNamespaceVersionHolderImpl(),"The dialect: " + topicExprXBean.getDialect() + " is unsupported.");
+        }
+
         try
         {
             m_dialect = new URI( topicExprXBean.getDialect() );
@@ -97,6 +107,25 @@
         {
             LOG.debug( MSG.getMessage( Keys.QUERY_EXPR, toString() ) );
         }
+    }
+
+    /**
+     * Determines if the given dialect is supported
+     *
+     * @param dialect
+     * @return
+     */
+    private boolean isSupportedDialect(String dialect)
+    {
+        String[] supportedDialects = TopicExpressionEngineImpl.getInstance().getSupportedDialects();
+        for (int i = 0; i < supportedDialects.length; i++)
+        {
+            if(dialect.equals(supportedDialects[i]))
+            {
+                return true;
+            }
+        }
+        return false;
     }
 
     /**

Modified: incubator/hermes/trunk/src/java/org/apache/ws/notification/base/v1_2/porttype/impl/NotificationProducerPortTypeImpl.java
URL: http://svn.apache.org/viewcvs/incubator/hermes/trunk/src/java/org/apache/ws/notification/base/v1_2/porttype/impl/NotificationProducerPortTypeImpl.java?view=diff&r1=160939&r2=160940
==============================================================================
--- incubator/hermes/trunk/src/java/org/apache/ws/notification/base/v1_2/porttype/impl/NotificationProducerPortTypeImpl.java (original)
+++ incubator/hermes/trunk/src/java/org/apache/ws/notification/base/v1_2/porttype/impl/NotificationProducerPortTypeImpl.java Mon Apr 11 12:22:41 2005
@@ -22,12 +22,15 @@
 import org.apache.ws.notification.base.Subscription;
 import org.apache.ws.notification.base.impl.SubscriptionHome;
 import org.apache.ws.notification.base.impl.XmlBeansTopicExpression;
+import org.apache.ws.notification.base.impl.faults.SubscribeCreationFailedFaultException;
 import org.apache.ws.notification.base.v1_2.impl.Subscription1_2Resource;
+import org.apache.ws.notification.base.v1_2.impl.WsnNamespaceVersionHolderImpl;
 import org.apache.ws.notification.base.v1_2.porttype.NotificationProducerPortType;
 import org.apache.ws.notification.topics.Topic;
 import org.apache.ws.notification.topics.TopicExpression;
 import org.apache.ws.notification.topics.TopicSpaceSet;
 import org.apache.ws.notification.topics.impl.SimpleSubscriptionTopicListener;
+import org.apache.ws.notification.topics.impl.faults.NoCurrentMessageOnTopicFaultException;
 import org.apache.ws.notification.topics.topicexpression.impl.TopicExpressionException;
 import org.apache.ws.pubsub.DeliveryMode;
 import org.apache.ws.pubsub.Filter;
@@ -57,6 +60,7 @@
 
 import javax.naming.Context;
 import javax.naming.InitialContext;
+import javax.naming.directory.SchemaViolationException;
 import javax.xml.rpc.JAXRPCException;
 import java.util.Calendar;
 import java.util.Collection;
@@ -79,8 +83,6 @@
     public SubscribeResponseDocument subscribe( SubscribeDocument requestDoc )
     {
         SubscribeDocument.Subscribe request = requestDoc.getSubscribe();
-        // TODO: use an EPR facade instead of the XMLBean EPR type
-        EndpointReferenceType consumerEPR = request.getConsumerReference();
 
         //make sure to check if optional elements are set in request...
         Calendar initialTerminationTime = null;
@@ -118,7 +120,7 @@
             Context initialContext = new InitialContext(  );
             SubscriptionHome subscriptionHome = (SubscriptionHome) initialContext.lookup( SubscriptionHome.HOME_LOCATION );
           
-            Subscription subscription = subscriptionHome.create(Subscription1_2Resource.class, new XmlBeansEndpointReference(consumerEPR), producerEPR, initialTerminationTime,subPolicy, precondition, selector,getResourceKey(), ((AbstractResourceContext)getResourceContext()).getResourceHomeLocation(),topicExpr,useNotify );
+            Subscription subscription = subscriptionHome.create(Subscription1_2Resource.class, new XmlBeansEndpointReference(request.getConsumerReference()), producerEPR, initialTerminationTime,subPolicy, precondition, selector,getResourceKey(), ((AbstractResourceContext)getResourceContext()).getResourceHomeLocation(),topicExpr,useNotify );
             subscription.setNotificationProducer(this);
             epr = (EndpointReferenceType) ((XmlObjectWrapper)subscription.getEpr()).getXmlObject();
 
@@ -133,7 +135,7 @@
         }
         catch (Exception e)
         {
-            throw new JAXRPCException("An exception occurred during subscribing. ", e);
+            throw new SubscribeCreationFailedFaultException(new WsnNamespaceVersionHolderImpl(),"Subscribe failed, reason: " + e.getLocalizedMessage());
         }
 
 
@@ -155,8 +157,10 @@
         }
         catch (TopicExpressionException e)
         {
-            throw new JAXRPCException("An exception occurred during subscription. ", e);
+            throw new JAXRPCException("An exception occurred evaluating a TopicExpression. ", e);
         }
+
+
         return collection;
     }
 
@@ -189,9 +193,14 @@
             TopicExpression topicExpr = new XmlBeansTopicExpression( topicExprMess );
             collection = evaluateTopicExpression(topicExpr);
         }
-        catch (Exception e)
+        catch ( SchemaViolationException e)
         {
             throw new JAXRPCException("An exception occurred: ",e);
+        }
+
+        if(collection.size() < 1)
+        {
+            throw new NoCurrentMessageOnTopicFaultException(new WsnNamespaceVersionHolderImpl(),"There was no current message to retrieve.");
         }
 
         GetCurrentMessageResponseDocument message = GetCurrentMessageResponseDocument.Factory.newInstance();

Modified: incubator/hermes/trunk/src/java/org/apache/ws/notification/base/v1_2/porttype/impl/SubscriptionManagerPortTypeImpl.java
URL: http://svn.apache.org/viewcvs/incubator/hermes/trunk/src/java/org/apache/ws/notification/base/v1_2/porttype/impl/SubscriptionManagerPortTypeImpl.java?view=diff&r1=160939&r2=160940
==============================================================================
--- incubator/hermes/trunk/src/java/org/apache/ws/notification/base/v1_2/porttype/impl/SubscriptionManagerPortTypeImpl.java (original)
+++ incubator/hermes/trunk/src/java/org/apache/ws/notification/base/v1_2/porttype/impl/SubscriptionManagerPortTypeImpl.java Mon Apr 11 12:22:41 2005
@@ -16,7 +16,10 @@
 package org.apache.ws.notification.base.v1_2.porttype.impl;
 
 import org.apache.ws.notification.base.Subscription;
+import org.apache.ws.notification.base.impl.faults.PauseFailedFaultException;
+import org.apache.ws.notification.base.impl.faults.ResumeFailedFaultException;
 import org.apache.ws.notification.base.v1_2.porttype.SubscriptionManagerPortType;
+import org.apache.ws.notification.base.v1_2.impl.WsnNamespaceVersionHolderImpl;
 import org.apache.ws.resource.ResourceContext;
 import org.apache.ws.resource.properties.NamespaceVersionHolder;
 import org.apache.ws.resource.properties.impl.AbstractResourcePropertiesPortType;
@@ -48,7 +51,7 @@
         }
         catch ( Exception e )
         {
-            // TODO: throw PauseFailedFaultException
+            throw new PauseFailedFaultException(new WsnNamespaceVersionHolderImpl(),"Pause failed on subscription: " + subscription.getID());
         }
         return createPauseSubscriptionResponseDocument();
     }
@@ -62,7 +65,7 @@
         }
         catch ( Exception e )
         {
-            // TODO: throw ResumeFailedFaultException
+            throw new ResumeFailedFaultException(new WsnNamespaceVersionHolderImpl(),"Resume failed on subscription: " + subscription.getID());
         }
         return createResumeSubscriptionResponseDocument();
     }

Modified: incubator/hermes/trunk/src/java/org/apache/ws/notification/topics/impl/ConcreteTopicExpressionEvaluator.java
URL: http://svn.apache.org/viewcvs/incubator/hermes/trunk/src/java/org/apache/ws/notification/topics/impl/ConcreteTopicExpressionEvaluator.java?view=diff&r1=160939&r2=160940
==============================================================================
--- incubator/hermes/trunk/src/java/org/apache/ws/notification/topics/impl/ConcreteTopicExpressionEvaluator.java (original)
+++ incubator/hermes/trunk/src/java/org/apache/ws/notification/topics/impl/ConcreteTopicExpressionEvaluator.java Mon Apr 11 12:22:41 2005
@@ -19,11 +19,14 @@
 import org.apache.ws.notification.topics.TopicExpression;
 import org.apache.ws.notification.topics.TopicSpace;
 import org.apache.ws.notification.topics.Topic;
+import org.apache.ws.notification.topics.impl.faults.InvalidTopicExpressionFaultException;
+import org.apache.ws.notification.topics.impl.faults.TopicNotSupportedFaultException;
 import org.apache.ws.notification.topics.topicexpression.impl.UnsupportedTopicExpressionDialectException;
 import org.apache.ws.notification.topics.topicexpression.impl.TopicExpressionResolutionException;
 import org.apache.ws.notification.topics.topicexpression.impl.InvalidTopicExpressionException;
 import org.apache.ws.notification.topics.topicexpression.impl.TopicExpressionException;
 import org.apache.ws.notification.topics.v1_2.Topics1_2Constants;
+import org.apache.ws.notification.base.v1_2.impl.WsnNamespaceVersionHolderImpl;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.w3c.dom.Text;
@@ -65,7 +68,7 @@
         }
         else
         {
-            throw new TopicExpressionException("Topic expression: " + expr.getContent() + " did not return a valid Topic.");
+            throw new TopicNotSupportedFaultException(new WsnNamespaceVersionHolderImpl(), "Topic expression: " + expr.getContent() + " did not return a valid Topic.");
         }
         return result;
     }
@@ -87,7 +90,7 @@
         StringTokenizer tokenizer = new StringTokenizer( exprValue, "/" );
         if ( tokenizer.countTokens() == 0 )
         {
-            throw new InvalidTopicExpressionException( "Topic expression must contain at least one path element." );
+            throw new InvalidTopicExpressionFaultException(new WsnNamespaceVersionHolderImpl(), "Topic expression must contain at least one path element." );
         }
         while ( tokenizer.hasMoreTokens() )
         {

Modified: incubator/hermes/trunk/src/java/org/apache/ws/notification/topics/impl/TopicExpressionEngineImpl.java
URL: http://svn.apache.org/viewcvs/incubator/hermes/trunk/src/java/org/apache/ws/notification/topics/impl/TopicExpressionEngineImpl.java?view=diff&r1=160939&r2=160940
==============================================================================
--- incubator/hermes/trunk/src/java/org/apache/ws/notification/topics/impl/TopicExpressionEngineImpl.java (original)
+++ incubator/hermes/trunk/src/java/org/apache/ws/notification/topics/impl/TopicExpressionEngineImpl.java Mon Apr 11 12:22:41 2005
@@ -21,10 +21,12 @@
 import org.apache.ws.notification.topics.TopicExpressionEvaluator;
 import org.apache.ws.notification.topics.TopicExpression;
 import org.apache.ws.notification.topics.TopicSpace;
+import org.apache.ws.notification.topics.impl.faults.TopicPathDialectUnknownFaultException;
 import org.apache.ws.notification.topics.topicexpression.impl.UnsupportedTopicExpressionDialectException;
 import org.apache.ws.notification.topics.topicexpression.impl.InvalidTopicExpressionException;
 import org.apache.ws.notification.topics.topicexpression.impl.TopicExpressionException;
 import org.apache.ws.notification.topics.topicexpression.impl.TopicExpressionResolutionException;
+import org.apache.ws.notification.base.v1_2.impl.WsnNamespaceVersionHolderImpl;
 import org.apache.ws.util.jndi.JNDIUtils;
 import org.apache.ws.resource.JndiConstants;
 
@@ -180,7 +182,7 @@
                 LOG.debug( "HashCode of dialect: " + String.valueOf( dialect.toString().hashCode() ) );
                 LOG.debug( "Object stored for key: " + this.m_evaluators.get( key ) );
             }
-            throw new UnsupportedTopicExpressionDialectException();
+            throw new TopicPathDialectUnknownFaultException(new WsnNamespaceVersionHolderImpl(), "The dialect: " + dialect + " was unrecognized.");
         }
         return evaluator.resolve( topicExpression, topicSpace );
     }



---------------------------------------------------------------------
To unsubscribe, e-mail: hermes-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: hermes-dev-help@ws.apache.org