You are viewing a plain text version of this content. The canonical link for it is here.
Posted to savan-dev@ws.apache.org by he...@apache.org on 2007/05/28 06:41:11 UTC

svn commit: r542108 - in /webservices/savan/trunk/java/modules: core/src/main/config/ core/src/main/java/org/apache/savan/ core/src/main/java/org/apache/savan/atom/ core/src/main/java/org/apache/savan/eventing/ core/src/main/java/org/apache/savan/filte...

Author: hemapani
Date: Sun May 27 21:41:10 2007
New Revision: 542108

URL: http://svn.apache.org/viewvc?view=rev&rev=542108
Log:
make feeds accessible via GET

Added:
    webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/atom/AtomMessageReceiver.java
Modified:
    webservices/savan/trunk/java/modules/core/src/main/config/savan-config.xml
    webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/SavanConstants.java
    webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/atom/AtomEventingClient.java
    webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/atom/AtomSubscriptionProcessor.java
    webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/atom/Feed.java
    webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/eventing/EventingConstants.java
    webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/eventing/EventingUtilFactory.java
    webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/filters/XPathBasedFilter.java
    webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/messagereceiver/MessageReceiverDeligater.java
    webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/subscription/SubscriptionProcessor.java
    webservices/savan/trunk/java/modules/mar/module.xml

Modified: webservices/savan/trunk/java/modules/core/src/main/config/savan-config.xml
URL: http://svn.apache.org/viewvc/webservices/savan/trunk/java/modules/core/src/main/config/savan-config.xml?view=diff&rev=542108&r1=542107&r2=542108
==============================================================================
--- webservices/savan/trunk/java/modules/core/src/main/config/savan-config.xml (original)
+++ webservices/savan/trunk/java/modules/core/src/main/config/savan-config.xml Sun May 27 21:41:10 2007
@@ -9,6 +9,7 @@
                 <action>http://schemas.xmlsoap.org/ws/2004/08/eventing/Renew</action>
                 <action>http://schemas.xmlsoap.org/ws/2004/08/eventing/GetStatus</action>
                 <action>http://schemas.xmlsoap.org/ws/2004/08/eventing/Unsubscribe</action>
+                <action>http://wso2.com/ws/2007/05/eventing/Publish</action>
         	</mapping-rules>
         	<defaultSubscriber>eventing</defaultSubscriber>
         	<defaultFilter>empty</defaultFilter>

Modified: webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/SavanConstants.java
URL: http://svn.apache.org/viewvc/webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/SavanConstants.java?view=diff&rev=542108&r1=542107&r2=542108
==============================================================================
--- webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/SavanConstants.java (original)
+++ webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/SavanConstants.java Sun May 27 21:41:10 2007
@@ -51,11 +51,14 @@
 		int RENEW_RESPONSE_MESSAGE = 6;
 		int GET_STATUS_MESSAGE = 7;
 		int GET_STATUS_RESPONSE_MESSAGE = 8;
+		int PUBLISH = 9;
 	}
 	
 	interface Properties {
 		String SUBSCRIBER_STORE = "SubscriberStore";
 	}
+	
+	
 	
 
 	

Modified: webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/atom/AtomEventingClient.java
URL: http://svn.apache.org/viewvc/webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/atom/AtomEventingClient.java?view=diff&rev=542108&r1=542107&r2=542108
==============================================================================
--- webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/atom/AtomEventingClient.java (original)
+++ webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/atom/AtomEventingClient.java Sun May 27 21:41:10 2007
@@ -1,5 +1,6 @@
 package org.apache.savan.atom;
 
+import java.util.Calendar;
 import java.util.Iterator;
 
 import javax.xml.namespace.QName;
@@ -10,11 +11,13 @@
 import org.apache.axis2.addressing.AddressingConstants;
 import org.apache.axis2.addressing.EndpointReference;
 import org.apache.axis2.client.ServiceClient;
+import org.apache.savan.filters.XPathBasedFilter;
 import org.apache.savan.util.CommonUtil;
 import org.apache.xmlbeans.XmlException;
 
 import com.wso2.eventing.atom.CreateFeedDocument;
 import com.wso2.eventing.atom.CreateFeedResponseDocument;
+import com.wso2.eventing.atom.FilterType;
 import com.wso2.eventing.atom.CreateFeedDocument.CreateFeed;
 import com.wso2.eventing.atom.CreateFeedResponseDocument.CreateFeedResponse;
 
@@ -25,7 +28,11 @@
 	public AtomEventingClient(ServiceClient serviceClient){
 		this.serviceClient = serviceClient;
 	}
+	
 	public CreateFeedResponse createFeed(String title,String author) throws AxisFault{
+		return createFeed(title, author,null,null);
+	}
+	public CreateFeedResponse createFeed(String title,String author,Calendar expiredTime,String xpathFilter) throws AxisFault{
 		try {
 			serviceClient.getOptions().setAction(AtomConstants.Actions.Subscribe);
 			
@@ -34,7 +41,15 @@
 			
 			createFeed.setAuthor(author);
 			createFeed.setTitle(title);
-			//createFeed.setId("foo");
+			
+			if(expiredTime != null){
+				createFeed.setExpires(expiredTime);	
+			}
+			if(xpathFilter != null){
+				FilterType filter = createFeed.addNewFilter();
+				filter.setDialect(XPathBasedFilter.XPATH_BASED_FILTER);
+				filter.setStringValue(xpathFilter);
+			}
 			
 			OMElement request = CommonUtil.toOM(createFeedDocument);
 			request.build();
@@ -67,6 +82,7 @@
 		OMElement request = OMAbstractFactory.getOMFactory().createOMElement(new QName(AtomConstants.ATOM_MSG_NAMESPACE,"DeleteFeed"));
 		serviceClient.sendReceive(request);
 	}
+	
 	
 	public void deleteFeed()throws AxisFault{
 		if(feedEpr != null){

Added: webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/atom/AtomMessageReceiver.java
URL: http://svn.apache.org/viewvc/webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/atom/AtomMessageReceiver.java?view=auto&rev=542108
==============================================================================
--- webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/atom/AtomMessageReceiver.java (added)
+++ webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/atom/AtomMessageReceiver.java Sun May 27 21:41:10 2007
@@ -0,0 +1,120 @@
+package org.apache.savan.atom;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+
+import org.apache.axiom.om.OMAbstractFactory;
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMException;
+import org.apache.axiom.om.impl.builder.StAXBuilder;
+import org.apache.axiom.om.impl.builder.StAXOMBuilder;
+import org.apache.axiom.om.util.StAXUtils;
+import org.apache.axiom.soap.SOAP11Constants;
+import org.apache.axiom.soap.SOAP12Constants;
+import org.apache.axiom.soap.SOAPEnvelope;
+import org.apache.axiom.soap.SOAPFactory;
+import org.apache.axiom.soap.SOAPProcessingException;
+import org.apache.axis2.AxisFault;
+import org.apache.axis2.context.MessageContext;
+import org.apache.axis2.engine.AxisEngine;
+import org.apache.axis2.engine.AxisError;
+import org.apache.axis2.engine.MessageReceiver;
+import org.apache.axis2.i18n.Messages;
+import org.apache.axis2.transport.http.HTTPConstants;
+import org.apache.axis2.util.MessageContextBuilder;
+import org.apache.savan.storage.SubscriberStore;
+import org.apache.savan.util.CommonUtil;
+
+public class AtomMessageReceiver implements MessageReceiver{
+	
+	public static final String ATOM_NAME = "atom";
+
+	public void receive(MessageContext messageCtx) throws AxisFault {
+		
+		try {
+			//String resourcePath = messageCtx.getTo().getAddress();
+			//http://127.0.0.1:5555/axis2/services/PublisherService/atom?a=urn_uuid_96C2CB953DABC98DFC1179904343537.atom
+
+			
+			
+			HttpServletRequest request = (HttpServletRequest)messageCtx.getProperty(HTTPConstants.MC_HTTP_SERVLETREQUEST);
+			if(request == null || HTTPConstants.HEADER_GET.equals(request.getMethod()) || HTTPConstants.HEADER_POST.equals(request.getMethod())){
+				SOAPEnvelope envlope = messageCtx.getEnvelope();
+				OMElement bodyContent = envlope.getBody().getFirstElement();
+				
+				OMElement feedID = bodyContent.getFirstElement();
+				String pathWRTRepository = "atom/"+feedID.getText();
+
+				File atomFile = messageCtx.getConfigurationContext().getRealPath(pathWRTRepository);
+				if(!atomFile.exists()){
+					throw new AxisFault("no feed exisits for "+feedID.getText());
+				}
+				FileInputStream atomIn =  new FileInputStream(atomFile);
+
+	            SOAPFactory fac = getSOAPFactory(messageCtx);
+	            SOAPEnvelope envelope = fac.getDefaultEnvelope();
+	            
+	            //add the content of the file to the response
+	            XMLStreamReader xmlreader = StAXUtils.createXMLStreamReader
+		            (atomIn, MessageContext.DEFAULT_CHAR_SET_ENCODING);
+		        StAXBuilder builder = new StAXOMBuilder(fac,xmlreader);
+		        OMElement result = (OMElement) builder.getDocumentElement();
+	            envelope.getBody().addChild(result);
+				
+	            //send beck the response
+				 MessageContext outMsgContext = MessageContextBuilder.createOutMessageContext(messageCtx);
+				 outMsgContext.getOperationContext().addMessageContext(outMsgContext);
+				 outMsgContext.setEnvelope(envelope);
+				 
+				 AxisEngine engine =
+				        new AxisEngine(
+				        		outMsgContext.getConfigurationContext());
+				engine.send(outMsgContext);
+
+			}else if(HTTPConstants.HEADER_POST.equals(request.getMethod())){
+				SOAPEnvelope envlope = messageCtx.getEnvelope();
+				OMElement bodyContent = envlope.getBody().getFirstElement();
+				
+				OMElement feedID = bodyContent.getFirstElement();
+				String pathWRTRepository = "atom/"+feedID.getText();
+
+				//remove the file
+				File atomFile = messageCtx.getConfigurationContext().getRealPath(pathWRTRepository);
+				atomFile.delete();
+				
+				//remove the feed from subscriber store
+				String feedIDAsUrn = feedID.getText().replaceAll("_", ":");
+				SubscriberStore store = CommonUtil.getSubscriberStore(messageCtx.getAxisService());
+				if (store == null)
+					throw new AxisFault ("Cant find the Savan subscriber store");
+				store.delete(feedIDAsUrn);
+			}
+			
+		} catch (SOAPProcessingException e) {
+			throw new AxisFault(e);
+		} catch (OMException e) {
+			throw new AxisFault(e);
+		} catch (FileNotFoundException e) {
+			throw new AxisFault(e);
+		} catch (XMLStreamException e) {
+			throw new AxisFault(e);
+		}
+	}
+	
+	 public SOAPFactory getSOAPFactory(MessageContext msgContext) throws AxisFault {
+	        String nsURI = msgContext.getEnvelope().getNamespace().getNamespaceURI();
+	        if (SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI.equals(nsURI)) {
+	            return OMAbstractFactory.getSOAP12Factory();
+	        } else if (SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI.equals(nsURI)) {
+	            return OMAbstractFactory.getSOAP11Factory();
+	        } else {
+	            throw new AxisFault(Messages.getMessage("invalidSOAPversion"));
+	        }
+	    }
+
+}

Modified: webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/atom/AtomSubscriptionProcessor.java
URL: http://svn.apache.org/viewvc/webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/atom/AtomSubscriptionProcessor.java?view=diff&rev=542108&r1=542107&r2=542108
==============================================================================
--- webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/atom/AtomSubscriptionProcessor.java (original)
+++ webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/atom/AtomSubscriptionProcessor.java Sun May 27 21:41:10 2007
@@ -56,6 +56,17 @@
 		if (id!=null) {
 			smc.setProperty(AtomConstants.TransferedProperties.SUBSCRIBER_UUID,id);
 		}
+		
+		
+		
+//		AtomSubscriber atomSubscriber = new AtomSubscriber();
+//		smc.setProperty(AtomConstants.TransferedProperties.SUBSCRIBER_UUID,id);
+//		atomSubscriber.setId(new URI(id));
+//		String atomFeedPath = id.replaceAll(":", "_")+ ".atom";
+//		atomSubscriber.setAtomFile(new File(realAtomPath,atomFeedPath));
+//		atomSubscriber.setAuthor("DefaultUser");
+//		atomSubscriber.setTitle("default Feed");
+		
 	}
 	
 	/**
@@ -86,8 +97,6 @@
 			if (envelope==null)
 				return null;
 			
-//		AbstractSubscriber subscriber = utilFactory.createSubscriber();  //eventing only works on leaf subscriber for now.
-			
 			String subscriberName = protocol.getDefaultSubscriber();
 			Subscriber subscriber = configurationManager.getSubscriberInstance(subscriberName);
 			
@@ -98,7 +107,7 @@
 
 			//find the real path for atom feeds
 			File repositoryPath = smc.getConfigurationContext().getRealPath("/"); 
-			File realAtomPath = new File(repositoryPath.getAbsoluteFile(),"../atom");
+			File realAtomPath = new File(repositoryPath.getAbsoluteFile(),"atom");
 			
 			//Get the service URL from request
 			String serviceAddress = smc.getMessageContext().getTo().getAddress();
@@ -113,18 +122,18 @@
 			atomSubscriber.setId(new URI(id));
 			String atomFeedPath = id.replaceAll(":", "_")+ ".atom";
 			atomSubscriber.setAtomFile(new File(realAtomPath,atomFeedPath));
-			atomSubscriber.setFeedUrl(serviceAddress +"/atom/"+ atomFeedPath);
+			atomSubscriber.setFeedUrl(serviceAddress+"/services/"+smc.getMessageContext().getServiceContext().getAxisService().getName() +"/atom?feed="+ atomFeedPath);
 			
 			SOAPBody body = envelope.getBody();
 			CreateFeedDocument createFeedDocument = CreateFeedDocument.Factory.parse(body.getFirstElement().getXMLStreamReader());
 			CreateFeed createFeed = createFeedDocument.getCreateFeed();
-			//TODO Srinath
-//			if(createFeed.getEndTo() != null){
-//				atomSubscriber.setEndToEPr(createFeed.getEndTo());	
-//			}
-//			if(createFeed.getExpires() != null){
-//				atomSubscriber.setSubscriptionEndingTime(createFeed.getExpires().getTime());	
-//			}
+
+			if(createFeed.getEndTo() != null){
+				atomSubscriber.setEndToEPr(createFeed.getEndTo());	
+			}
+			if(createFeed.getExpires() != null){
+				atomSubscriber.setSubscriptionEndingTime(createFeed.getExpires().getTime());	
+			}
 			
 			if (createFeed.getFilter() != null) {
 				Filter filter = null;
@@ -141,69 +150,12 @@
 				}
 				atomSubscriber.setFilter(filter);
 			}
-			
-			
-			
-			
-			
 			//TODO -Srinath
 			atomSubscriber.setAuthor(createFeed.getAuthor());
 			atomSubscriber.setTitle(createFeed.getTitle());
 			
 			smc.setProperty(AtomConstants.Properties.feedUrl, atomSubscriber.getFeedUrl());
-			
 			return atomSubscriber;
-			
-			
-//			SOAPBody body = envelope.getBody();
-//			
-//			OMElement createFeed = findElement("createFeed", body, true) ;
-//			OMElement endToElement = findElement(AtomConstants.ElementNames.EndTo, body, true);
-//			
-//			EndpointReference endToEPR = null;
-//			if(endToElement != null){
-//				endToEPR = EndpointReferenceHelper.fromOM(endToElement);
-//			}
-//			atomSubscriber.setEndToEPr(endToEPR);
-//			
-//			
-//			String expiresText = findValue(AtomConstants.EXPIRES_ELEMENT, createFeed, true);
-//			if (expiresText==null){
-//				String message = "Expires Text is null";
-//				throw new SavanException (message);
-//			}
-//			expiresText = expiresText.trim();
-//			Date expiration = getExpirationBeanFromString(expiresText);
-//			if (expiration==null) {
-//				String message = "Cannot understand the given date-time value for the Expiration";
-//				throw new SavanException (message);
-//			}
-//			atomSubscriber.setSubscriptionEndingTime(expiration);
-//			
-//			OMElement filterElement = findElement(AtomConstants.ElementNames.Filter, createFeed, true);
-//			if (filterElement!= null) {
-//				OMNode filterNode = filterElement.getFirstOMChild();
-//				OMAttribute dialectAttr = filterElement.getAttribute(new QName (AtomConstants.ElementNames.Dialect));
-//				Filter filter = null;
-//				String filterKey = AtomConstants.DEFAULT_FILTER_IDENTIFIER;
-//				if (dialectAttr!=null) {
-//					filterKey = dialectAttr.getAttributeValue();
-//				}
-//				filter = configurationManager.getFilterInstanceFromId(filterKey);
-//				if (filter==null)
-//					throw new SavanException ("The Filter defined by the dialect is not available");
-//				
-//				filter.setUp (filterNode);
-//				atomSubscriber.setFilter(filter);
-//			}
-//			
-//			atomSubscriber.setId(findValue(AtomConstants.ID_ELEMENT, createFeed,true));
-//			atomSubscriber.setAuthor(findValue(AtomConstants.AUTHOR_ELEMENT, createFeed,true));
-//			atomSubscriber.setTitle(findValue(AtomConstants.TITLE_ELEMENT, createFeed,true));
-//			
-//			smc.setProperty(AtomConstants.Properties.feedUrl, atomSubscriber.getFeedUrl());
-//			
-//			return atomSubscriber;
 		} catch (AxisFault e) {
 			throw new SavanException(e);
 		} catch (OMException e) {
@@ -215,9 +167,9 @@
 		}
 	}
 	
-	private String findValue(String localName,OMElement parent,boolean throwfault) throws SavanException{
-		return findValue(AtomConstants.ATOM_NAMESPACE, localName, parent, throwfault);
-	}
+//	private String findValue(String localName,OMElement parent,boolean throwfault) throws SavanException{
+//		return findValue(AtomConstants.ATOM_NAMESPACE, localName, parent, throwfault);
+//	}
 	
 	private String findValue(String nsURI,String localName,OMElement parent,boolean throwfault) throws SavanException{
 		QName name = new QName (nsURI,AtomConstants.IDEDNTIFIER_ELEMENT);
@@ -233,19 +185,19 @@
 		}
 	}
 	
-	private OMElement findElement(String localName,OMElement parent,boolean throwfault) throws SavanException{
-		QName name = new QName (AtomConstants.ATOM_NAMESPACE,AtomConstants.ID_ELEMENT);
-		OMElement ele = parent.getFirstChildWithName(name);
-		if(ele != null){
-			return ele;
-		}else{
-			if(throwfault){
-				throw new SavanException (localName + " element is not defined");	
-			}else{
-				return null;
-			}
-		}
-	}
+//	private OMElement findElement(String localName,OMElement parent,boolean throwfault) throws SavanException{
+//		QName name = new QName (AtomConstants.ATOM_NAMESPACE,AtomConstants.ID_ELEMENT);
+//		OMElement ele = parent.getFirstChildWithName(name);
+//		if(ele != null){
+//			return ele;
+//		}else{
+//			if(throwfault){
+//				throw new SavanException (localName + " element is not defined");	
+//			}else{
+//				return null;
+//			}
+//		}
+//	}
 
 	public void pauseSubscription(SavanMessageContext pauseSubscriptionMessage) throws SavanException {
 		throw new UnsupportedOperationException ("Eventing specification does not support this type of messages");
@@ -298,66 +250,5 @@
 		
 		return findValue(AtomConstants.ATOM_NAMESPACE,AtomConstants.IDEDNTIFIER_ELEMENT, envelope.getHeader(), false);
 	}
-	
-//	private Date getExpirationBeanFromString (String expiresStr) throws SavanException {
-//
-//		
-//		
-//		//expires can be a duration or a date time.
-//		//Doing the conversion using the ConverUtil helper class.
-//		
-//		boolean isDuration = CommonUtil.isDuration(expiresStr);
-//		if (isDuration) {
-//			try {
-//				Date currentTime = new Date();
-//				Duration duration = ConverterUtil.convertToDuration(expiresStr);
-//				return new Date(currentTime.getTime()+ (int)(1000* duration.getSeconds()));
-//			} catch (IllegalArgumentException e) {
-//				String message = "Cannot convert the Expiration value to a valid duration";
-//				throw new SavanException (message,e);
-//			}
-//		} else {
-//			try {
-//			    Calendar calendar = ConverterUtil.convertToDateTime(expiresStr);
-//			    return calendar.getTime();
-//			} catch (Exception e) {
-//				String message = "Cannot convert the Expiration value to a valid DATE/TIME";
-//				throw new SavanException (message,e);
-//			}
-//		}
-//	}
-
-	public void doProtocolSpecificEndSubscription(Subscriber subscriber, String reason, ConfigurationContext configurationContext) throws SavanException {
-		throw new UnsupportedOperationException();
-//		String SOAPVersion = (String) subscriber.getProperty(AtomConstants.Properties.SOAPVersion);
-//		if (SOAPVersion==null) 
-//			throw new SavanException ("Cant find the SOAP version of the subscriber");
-//		
-//		SOAPFactory factory = null;
-//		if (SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI.equals(SOAPVersion))
-//			factory = OMAbstractFactory.getSOAP11Factory();
-//		else if (SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI.equals(SOAPVersion))
-//			factory = OMAbstractFactory.getSOAP12Factory();
-//		else
-//			throw new SavanException ("The subscriber has a unknown SOAP version property set");
-//		
-//		SOAPEnvelope envelope = factory.getDefaultEnvelope();
-	}
-	
-//	private boolean deliveryModesupported() {
-//		return true;
-//	}
-//	
-//	private boolean isInvalidDiration (Duration duration) {
-//		return false;
-//	}
-//	
-//	private boolean isDateInThePast (Date date) {
-//		return false;
-//	}
-//	
-//	private boolean filterDilalectSupported (String filterDialect){ 
-//		return true;
-//	}
 	
 }

Modified: webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/atom/Feed.java
URL: http://svn.apache.org/viewvc/webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/atom/Feed.java?view=diff&rev=542108&r1=542107&r2=542108
==============================================================================
--- webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/atom/Feed.java (original)
+++ webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/atom/Feed.java Sun May 27 21:41:10 2007
@@ -68,7 +68,7 @@
 		
 		factory.createOMElement("id",atomNs,feedEle).setText(id);
 		if(title != null){
-			factory.createOMElement("title",atomNs,feedEle).setText(id);	
+			factory.createOMElement("title",atomNs,feedEle).setText(title);	
 		}
 		factory.createOMElement("updated",atomNs,feedEle).setText( new SimpleDateFormat("dd-mm-yy'T1'HH:MM:ssZ").format(lastUpdated));
 		if(author != null){
@@ -81,12 +81,12 @@
 		lastUpdated = new Date();
 		OMElement entryEle = factory.createOMElement("entry",atomNs,document.getOMDocumentElement());
 		factory.createOMElement("id",atomNs,entryEle).setText(id +"/" + entryCount);
-		factory.createOMElement("title",atomNs,entryEle).setText(id +"/" + entryCount);
+		factory.createOMElement("title",atomNs,entryEle).setText("entry" + entryCount);
 		
 		factory.createOMElement("updated",atomNs,entryEle).setText( new SimpleDateFormat("dd-mm-yy'T1'HH:MM:ssZ").format(lastUpdated));
 		
 		OMElement contentEle =  factory.createOMElement("content",atomNs,entryEle);
-		contentEle.addAttribute("type","xml",null);
+		contentEle.addAttribute("type","text/xml",null);
 		contentEle.addChild(entry);
 		
 		

Modified: webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/eventing/EventingConstants.java
URL: http://svn.apache.org/viewvc/webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/eventing/EventingConstants.java?view=diff&rev=542108&r1=542107&r2=542108
==============================================================================
--- webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/eventing/EventingConstants.java (original)
+++ webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/eventing/EventingConstants.java Sun May 27 21:41:10 2007
@@ -24,6 +24,7 @@
 	String DEFAULT_DELIVERY_MODE = "http://schemas.xmlsoap.org/ws/2004/08/eventing/DeliveryModes/Push";
 	String DEFAULT_FILTER_IDENTIFIER = FilterDialects.XPath;
 	
+	
 	interface TransferedProperties {
 		String SUBSCRIBER_UUID = "SAVAN_EVENTING_SUBSCRIBER_UUID";
 	}
@@ -56,6 +57,7 @@
 		String UnsubscribeResponse = "http://schemas.xmlsoap.org/ws/2004/08/eventing/UnsubscribeResponse";
 		String GetStatus = "http://schemas.xmlsoap.org/ws/2004/08/eventing/GetStatus";
 		String GetStatusResponse = "http://schemas.xmlsoap.org/ws/2004/08/eventing/GetStatusResponse";
+		String Publish = "http://wso2.com/ws/2007/05/eventing/Publish";
 	}
 	
 	interface Properties {

Modified: webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/eventing/EventingUtilFactory.java
URL: http://svn.apache.org/viewvc/webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/eventing/EventingUtilFactory.java?view=diff&rev=542108&r1=542107&r2=542108
==============================================================================
--- webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/eventing/EventingUtilFactory.java (original)
+++ webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/eventing/EventingUtilFactory.java Sun May 27 21:41:10 2007
@@ -51,6 +51,8 @@
 			smc.setMessageType(SavanConstants.MessageTypes.UNSUBSCRIPTION_RESPONSE_MESSAGE);
 		else if (EventingConstants.Actions.GetStatusResponse.equals(action))
 			smc.setMessageType(SavanConstants.MessageTypes.GET_STATUS_RESPONSE_MESSAGE);
+		else if (EventingConstants.Actions.Publish.equals(action))
+			smc.setMessageType(SavanConstants.MessageTypes.PUBLISH);
 		else 
 			smc.setMessageType(SavanConstants.MessageTypes.UNKNOWN);
 		

Modified: webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/filters/XPathBasedFilter.java
URL: http://svn.apache.org/viewvc/webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/filters/XPathBasedFilter.java?view=diff&rev=542108&r1=542107&r2=542108
==============================================================================
--- webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/filters/XPathBasedFilter.java (original)
+++ webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/filters/XPathBasedFilter.java Sun May 27 21:41:10 2007
@@ -49,6 +49,8 @@
  * 
  */
 public class XPathBasedFilter implements Filter {
+	
+	public static String XPATH_BASED_FILTER = "http://www.w3.org/TR/1999/REC-xpath-19991116";
 
 	private String XPathString = null;
 	

Modified: webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/messagereceiver/MessageReceiverDeligater.java
URL: http://svn.apache.org/viewvc/webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/messagereceiver/MessageReceiverDeligater.java?view=diff&rev=542108&r1=542107&r2=542108
==============================================================================
--- webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/messagereceiver/MessageReceiverDeligater.java (original)
+++ webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/messagereceiver/MessageReceiverDeligater.java Sun May 27 21:41:10 2007
@@ -77,6 +77,8 @@
 			processor.unsubscribe(smc);
 		} else if (messageType==SavanConstants.MessageTypes.RENEW_MESSAGE) {
 			processor.renewSubscription(smc);
+		}else if (messageType==SavanConstants.MessageTypes.PUBLISH) {
+			processor.publish(smc);
 		}
 	}
 	

Modified: webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/subscription/SubscriptionProcessor.java
URL: http://svn.apache.org/viewvc/webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/subscription/SubscriptionProcessor.java?view=diff&rev=542108&r1=542107&r2=542108
==============================================================================
--- webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/subscription/SubscriptionProcessor.java (original)
+++ webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/subscription/SubscriptionProcessor.java Sun May 27 21:41:10 2007
@@ -17,9 +17,11 @@
 
 package org.apache.savan.subscription;
 
+import org.apache.axiom.soap.SOAPEnvelope;
 import org.apache.axis2.context.ServiceContext;
 import org.apache.savan.SavanException;
 import org.apache.savan.SavanMessageContext;
+import org.apache.savan.publication.client.PublicationClient;
 import org.apache.savan.storage.SubscriberStore;
 import org.apache.savan.subscribers.Subscriber;
 import org.apache.savan.util.CommonUtil;
@@ -84,6 +86,16 @@
 		
 		store.delete(subscriberID);
 	}
+	
+	public void publish(SavanMessageContext publishMessage) throws SavanException{
+		//TODO handle Topics
+		SOAPEnvelope requestEnvelope = publishMessage.getEnvelope();
+		ServiceContext serviceContext = publishMessage.getMessageContext().getServiceContext();
+		PublicationClient client = new PublicationClient(serviceContext.getConfigurationContext());
+		client.sendPublication(requestEnvelope.getBody().getFirstElement(),serviceContext.getAxisService(),null);
+	}
+	
+	
 	
 	public abstract void pauseSubscription (SavanMessageContext pauseSubscriptionMessage) throws SavanException;
 	

Modified: webservices/savan/trunk/java/modules/mar/module.xml
URL: http://svn.apache.org/viewvc/webservices/savan/trunk/java/modules/mar/module.xml?view=diff&rev=542108&r1=542107&r2=542108
==============================================================================
--- webservices/savan/trunk/java/modules/mar/module.xml (original)
+++ webservices/savan/trunk/java/modules/mar/module.xml Sun May 27 21:41:10 2007
@@ -6,10 +6,15 @@
         <actionMapping>http://schemas.xmlsoap.org/ws/2004/08/eventing/Renew</actionMapping>
         <actionMapping>http://schemas.xmlsoap.org/ws/2004/08/eventing/GetStatus</actionMapping>
         <actionMapping>http://schemas.xmlsoap.org/ws/2004/08/eventing/Unsubscribe</actionMapping>
+        <actionMapping>http://wso2.com/ws/2007/05/eventing/Publish</actionMapping>
         <actionMapping>http://wso2.com/eventing/Subscribe</actionMapping>
 		<actionMapping>http://wso2.com/eventing/Renew</actionMapping>
 		<actionMapping>http://wso2.com/eventing/Unsubscribe</actionMapping>
 		<actionMapping>http://wso2.com/eventing/GetStatus</actionMapping>
+    </operation>
+    
+    <operation name="atom" mep="http://www.w3.org/2004/08/wsdl/in-out">
+        <messageReceiver class="org.apache.savan.atom.AtomMessageReceiver"/>
     </operation>
     
 </module>