Author: hemapani
Date: Wed May 23 03:23:33 2007
New Revision: 540918
URL: http://svn.apache.org/viewvc?view=rev&rev=540918
Log:
initial version for the Savan Atom support
Added:
webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/atom/
webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/atom/AtomConstants.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/AtomMessageReceiverDeligater.java
webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/atom/AtomSubscriber.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/AtomUtilFactory.java
webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/atom/Feed.java
Modified:
webservices/savan/trunk/java/modules/core/pom.xml
webservices/savan/trunk/java/modules/core/src/main/config/savan-config.xml
webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/util/CommonUtil.java
webservices/savan/trunk/java/modules/mar/module.xml
webservices/savan/trunk/java/pom.xml
Modified: webservices/savan/trunk/java/modules/core/pom.xml
URL:
http://svn.apache.org/viewvc/webservices/savan/trunk/java/modules/core/pom.xml?view=diff&rev=540918&r1=540917&r2=540918
==============================================================================
--- webservices/savan/trunk/java/modules/core/pom.xml (original)
+++ webservices/savan/trunk/java/modules/core/pom.xml Wed May 23 03:23:33 2007
@@ -31,6 +31,45 @@
<target>1.4</target>
</configuration>
</plugin>
+<plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <version>1.1</version>
+ <executions>
+ <execution>
+ <id>generate-sources</id>
+ <phase>generate-sources</phase>
+ <configuration>
+ <tasks>
+ <property name="schema.out"
value="target/tmp/schema" />
+ <mkdir
dir="${schema.out}"/>
+ <mkdir
dir="${schema.out}/src"/>
+ <taskdef name="xmlbean"
classname="org.apache.xmlbeans.impl.tool.XMLBean">
+ <classpath
refid="maven.dependency.classpath"/>
+ <classpath refid="maven.compile.classpath"/>
+ <classpath refid="maven.runtime.classpath"/>
+ </taskdef>
+
+ <xmlbean debug="true"
download="true"
+
srcgendir="${schema.out}/src"
+ srconly="false"
+
typesystemname="intercepter"
+
destfile="${schema.out}/savan_types-0.1.jar">
+
+ <classpath
refid="maven.dependency.classpath"/>
+ <classpath refid="maven.compile.classpath"/>
+ <classpath refid="maven.runtime.classpath"/>
+ <fileset
dir="src/main/resources/" includes="*"/>
+ </xmlbean>
+ <unzip dest="target/classes"
src="${schema.out}/savan_types-0.1.jar"></unzip>
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
</plugins>
</build>
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=540918&r1=540917&r2=540918
==============================================================================
--- 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
Wed May 23 03:23:33 2007
@@ -21,6 +21,17 @@
</parameters>
-->
</protocol>
+ <protocol>
+ <name>atom</name>
+ <utilFactory>org.apache.savan.atom.AtomUtilFactory</utilFactory>
+ <mapping-rules>
+ <action>http://wso2.com/eventing/Subscribe</action>
+ <action>http://wso2.com/eventing/Renew</action>
+ <action>http://wso2.com/eventing/Unsubscribe</action>
+ </mapping-rules>
+ <defaultSubscriber>atom-subscriber</defaultSubscriber>
+ <defaultFilter>empty</defaultFilter>
+ </protocol>
</protocols>
<subscriberStores>
@@ -48,6 +59,10 @@
<name>eventing</name>
<class>org.apache.savan.eventing.subscribers.EventingSubscriber</class>
</subscriber>
+ <subscriber>
+ <name>atom-subscriber</name>
+ <class>org.apache.savan.atom.AtomSubscriber</class>
+ </subscriber>
</subscribers>
</savan-config>
Added:
webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/atom/AtomConstants.java
URL:
http://svn.apache.org/viewvc/webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/atom/AtomConstants.java?view=auto&rev=540918
==============================================================================
---
webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/atom/AtomConstants.java
(added)
+++
webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/atom/AtomConstants.java
Wed May 23 03:23:33 2007
@@ -0,0 +1,70 @@
+
+package org.apache.savan.atom;
+
+public class AtomConstants {
+ public static String ATOM_NAMESPACE = "http://www.w3.org/2005/Atom";
+ public static String ATOM_PREFIX = "atom";
+
+ public static String ATOM_MSG_NAMESPACE =
"http://wso2.com/eventing/atom/";
+
+ public static String ENDTO_ELEMENT = "EndTo";
+ public static String EXPIRES_ELEMENT = "Expires";
+ public static String FILTER_ELEMENT = "Filter";
+ public static String TITLE_ELEMENT = "title";
+ public static String ID_ELEMENT = "id";
+ public static String AUTHOR_ELEMENT = "author";
+ public static String DIALECT_ELEMENT = "Dialect";
+
+ public static String RENEW_FEED = "renewFeed";
+ public static String IDEDNTIFIER_ELEMENT = "Identifier";
+
+ public static String DEFAULT_FILTER_IDENTIFIER = FilterDialects.XPath;
+
+ interface FilterDialects {
+ String XPath = "http://www.w3.org/TR/1999/REC-xpath-19991116";
+ }
+
+
+ interface Actions {
+ String Subscribe = "http://wso2.com/eventing/Subscribe";
+ String SubscribeResponse =
"http://wso2.com/eventing/SubscribeResponse";
+ String Renew = "http://wso2.com/eventing/Renew";
+ String RenewResponse = "http://wso2.com/eventing/RenewResponse";
+ String Unsubscribe = "http://wso2.com/eventing/Unsubscribe";
+ String UnsubscribeResponse =
"http://wso2.com/eventing/UnsubscribeResponse";
+ String GetStatus = "http://wso2.com/eventing/GetStatus";
+ String GetStatusResponse =
"http://wso2.com/eventing/GetStatusResponse";
+ }
+
+ interface TransferedProperties {
+ String SUBSCRIBER_UUID = "SAVAN_EVENTING_SUBSCRIBER_UUID";
+ }
+
+ interface ElementNames {
+ String Subscribe = "Subscribe";
+ String EndTo = "EndTo";
+ String Delivery = "Delivery";
+ String Mode = "Mode";
+ String NotifyTo = "NotifyTo";
+ String Expires = "Expires";
+ String Filter = "Filter";
+ String Dialect = "Dialect";
+ String SubscribeResponse = "SubscribeResponse";
+ String SubscriptionManager = "SubscriptionManager";
+ String Renew = "Renew";
+ String RenewResponse = "RenewResponse";
+ String Identifier = "Identifier";
+ String Unsubscribe = "Unsubscribe";
+ String GetStatus = "GetStatus";
+ String GetStatusResponse = "GetStatusResponse";
+ String FeedUrl = "FeedUrl";
+
+ String deleteFeedResponse = "DeleteFeedResponse";
+ }
+
+ interface Properties {
+ String SOAPVersion = "SOAPVersion";
+ String feedUrl = "feedUrl";
+ }
+
+}
Added:
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=auto&rev=540918
==============================================================================
---
webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/atom/AtomEventingClient.java
(added)
+++
webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/atom/AtomEventingClient.java
Wed May 23 03:23:33 2007
@@ -0,0 +1,78 @@
+package org.apache.savan.atom;
+
+import java.util.Iterator;
+
+import javax.xml.namespace.QName;
+
+import org.apache.axiom.om.OMAbstractFactory;
+import org.apache.axiom.om.OMElement;
+import org.apache.axis2.AxisFault;
+import org.apache.axis2.addressing.AddressingConstants;
+import org.apache.axis2.addressing.EndpointReference;
+import org.apache.axis2.client.ServiceClient;
+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.CreateFeedDocument.CreateFeed;
+import com.wso2.eventing.atom.CreateFeedResponseDocument.CreateFeedResponse;
+
+public class AtomEventingClient {
+ private ServiceClient serviceClient = null;
+ private EndpointReference feedEpr;
+
+ public AtomEventingClient(ServiceClient serviceClient){
+ this.serviceClient = serviceClient;
+ }
+ public CreateFeedResponse createFeed(String title,String author) throws
AxisFault{
+ try {
+
serviceClient.getOptions().setAction(AtomConstants.Actions.Subscribe);
+
+ CreateFeedDocument createFeedDocument =
CreateFeedDocument.Factory.newInstance();
+ CreateFeed createFeed =
createFeedDocument.addNewCreateFeed();
+
+ createFeed.setAuthor(author);
+ createFeed.setTitle(title);
+ //createFeed.setId("foo");
+
+ OMElement request = CommonUtil.toOM(createFeedDocument);
+ request.build();
+ OMElement element = serviceClient.sendReceive(request);
+ CreateFeedResponseDocument createFeedResponseDocument =
CreateFeedResponseDocument.Factory.parse(element.getXMLStreamReader());
+ System.out.println(createFeedDocument.xmlText());
+
+ //read epr for subscription from response and store it
+ OMElement responseAsOM =
CommonUtil.toOM(createFeedResponseDocument);
+ OMElement eprAsOM =
responseAsOM.getFirstChildWithName(new
QName(AtomConstants.ATOM_MSG_NAMESPACE,"SubscriptionManager"));
+
+ feedEpr = new
EndpointReference(eprAsOM.getFirstElement().getText());
+ OMElement referanceParameters =
eprAsOM.getFirstChildWithName(new
QName(eprAsOM.getFirstElement().getNamespace().getNamespaceURI(),
+
AddressingConstants.EPR_REFERENCE_PARAMETERS));
+ Iterator refparams =
referanceParameters.getChildElements();
+ while(refparams.hasNext()){
+
feedEpr.addReferenceParameter((OMElement)refparams.next());
+ }
+
+ return
createFeedResponseDocument.getCreateFeedResponse();
+ } catch (XmlException e) {
+ throw new AxisFault(e);
+ }
+ }
+
+ public void deleteFeed(EndpointReference epr)throws AxisFault{
+
serviceClient.getOptions().setAction(AtomConstants.Actions.Unsubscribe);
+ serviceClient.getOptions().setTo(epr);
+
+ OMElement request =
OMAbstractFactory.getOMFactory().createOMElement(new
QName(AtomConstants.ATOM_MSG_NAMESPACE,"DeleteFeed"));
+ serviceClient.sendReceive(request);
+ }
+
+ public void deleteFeed()throws AxisFault{
+ if(feedEpr != null){
+ deleteFeed(feedEpr);
+ }else{
+ throw new AxisFault("No feed epr alreday stored, you
must have create a feed using same AtomEventingClient Object");
+ }
+ }
+}
Added:
webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/atom/AtomMessageReceiverDeligater.java
URL:
http://svn.apache.org/viewvc/webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/atom/AtomMessageReceiverDeligater.java?view=auto&rev=540918
==============================================================================
---
webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/atom/AtomMessageReceiverDeligater.java
(added)
+++
webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/atom/AtomMessageReceiverDeligater.java
Wed May 23 03:23:33 2007
@@ -0,0 +1,274 @@
+/*
+ * Copyright 1999-2004 The Apache Software Foundation.
+ *
+ * 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.savan.atom;
+
+import java.util.Calendar;
+import java.util.Date;
+
+import javax.xml.namespace.QName;
+
+import org.apache.axiom.om.OMAbstractFactory;
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMException;
+import org.apache.axiom.om.OMNamespace;
+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.databinding.utils.ConverterUtil;
+import org.apache.savan.SavanConstants;
+import org.apache.savan.SavanException;
+import org.apache.savan.SavanMessageContext;
+import org.apache.savan.messagereceiver.MessageReceiverDeligater;
+import org.apache.savan.storage.SubscriberStore;
+import org.apache.savan.subscribers.Subscriber;
+import org.apache.savan.util.CommonUtil;
+import org.apache.xmlbeans.XmlCursor;
+import org.apache.xmlbeans.XmlObject;
+import org.w3.x2005.x08.addressing.EndpointReferenceType;
+
+import com.wso2.eventing.atom.CreateFeedResponseDocument;
+import com.wso2.eventing.atom.RenewFeedResponseDocument;
+import com.wso2.eventing.atom.CreateFeedResponseDocument.CreateFeedResponse;
+
+
+public class AtomMessageReceiverDeligater extends MessageReceiverDeligater {
+ private SOAPEnvelope findOrCreateSoapEnvelope(SavanMessageContext
subscriptionMessage, MessageContext outMessage) throws AxisFault{
+ MessageContext subscriptionMsgCtx =
subscriptionMessage.getMessageContext();
+
+ SOAPEnvelope outMessageEnvelope = outMessage.getEnvelope();
+ SOAPFactory factory = null;
+
+ if (outMessageEnvelope!=null) {
+ factory = (SOAPFactory)
outMessageEnvelope.getOMFactory();
+ } else {
+ factory = (SOAPFactory)
subscriptionMsgCtx.getEnvelope().getOMFactory();
+ outMessageEnvelope = factory.getDefaultEnvelope();
+ outMessage.setEnvelope(outMessageEnvelope);
+ }
+ return outMessageEnvelope;
+ }
+
+
+
+ public void handleSubscriptionRequest(SavanMessageContext
subscriptionMessage, MessageContext outMessage) throws SavanException {
+ try {
+ if (outMessage != null){
+ MessageContext subscriptionMsgCtx =
subscriptionMessage.getMessageContext();
+
+ SOAPEnvelope outMessageEnvelope =
findOrCreateSoapEnvelope(subscriptionMessage, outMessage);
+ //setting the action
+
outMessage.getOptions().setAction(AtomConstants.Actions.SubscribeResponse);
+
+ CreateFeedResponseDocument
createFeedResponseDocument = CreateFeedResponseDocument.Factory.newInstance();
+ CreateFeedResponse createFeedResponse =
createFeedResponseDocument.addNewCreateFeedResponse();
+ EndpointReferenceType savenEpr =
createFeedResponse.addNewSubscriptionManager();
+
savenEpr.addNewAddress().setStringValue(subscriptionMsgCtx.getOptions().getTo().getAddress());
+
+ String id = (String)
subscriptionMessage.getProperty(AtomConstants.TransferedProperties.SUBSCRIBER_UUID);
+ if (id != null){
+ XmlCursor c =
savenEpr.addNewReferenceParameters().newCursor();
+ c.toNextToken();
+ addNameValuePair(c,new
QName(AtomConstants.ATOM_NAMESPACE,AtomConstants.ElementNames.Identifier), id);
+ }else{
+ throw new SavanException ("Subscription
UUID is not set");
+ }
+
+// HttpServletRequest request =
(HttpServletRequest)
subscriptionMessage.getProperty(HTTPConstants.MC_HTTP_SERVLETREQUEST);
+// request.getServerPort()
+
+
+
+
createFeedResponse.setFeedUrl((String)subscriptionMessage.getProperty(AtomConstants.Properties.feedUrl));
+
outMessageEnvelope.getBody().addChild(CommonUtil.toOM(createFeedResponseDocument));
+ }else{
+ throw new SavanException ("Eventing protocol
need to sent the SubscriptionResponseMessage. But the outMessage is null");
+ }
+ //setting the message type
+ outMessage.setProperty(SavanConstants.MESSAGE_TYPE,new
Integer (SavanConstants.MessageTypes.SUBSCRIPTION_RESPONSE_MESSAGE));
+ } catch (SOAPProcessingException e) {
+ throw new SavanException(e);
+ } catch (AxisFault e) {
+ throw new SavanException(e);
+ } catch (OMException e) {
+ throw new SavanException(e);
+ }
+ }
+
+ public void handleRenewRequest(SavanMessageContext renewMessage,
MessageContext outMessage) throws SavanException {
+
+ try {
+ if (outMessage==null)
+ throw new SavanException ("Eventing protocol
need to sent the SubscriptionResponseMessage. But the outMessage is null");
+
+ SOAPEnvelope outMessageEnvelope =
findOrCreateSoapEnvelope(renewMessage, outMessage);
+ RenewFeedResponseDocument renewFeedResponseDocument =
RenewFeedResponseDocument.Factory.newInstance();
+
+
+ //setting the action
+
outMessage.getOptions().setAction(AtomConstants.Actions.RenewResponse);
+ String subscriberID = (String)
renewMessage.getProperty(AtomConstants.TransferedProperties.SUBSCRIBER_UUID);
+ if (subscriberID==null) {
+ String message = "SubscriberID
TransferedProperty is not set";
+ throw new SavanException (message);
+ }
+
+ SubscriberStore store =
CommonUtil.getSubscriberStore(renewMessage.getMessageContext().getAxisService());
+ Subscriber subscriber = store.retrieve(subscriberID);
+ AtomSubscriber atomSubscriber = (AtomSubscriber)
subscriber;
+ if (atomSubscriber==null) {
+ String message = "Cannot find the
AbstractSubscriber with the given ID";
+ throw new SavanException (message);
+ }
+
+ Date expiration =
atomSubscriber.getSubscriptionEndingTime();
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTime(expiration);
+
renewFeedResponseDocument.addNewRenewFeedResponse().setExpires(calendar);
+
outMessageEnvelope.getBody().addChild(CommonUtil.toOM(renewFeedResponseDocument));
+ //setting the message type
+ outMessage.setProperty(SavanConstants.MESSAGE_TYPE,new
Integer (SavanConstants.MessageTypes.RENEW_RESPONSE_MESSAGE));
+ } catch (AxisFault e) {
+ throw new SavanException(e);
+ }
+ }
+
+ public void handleEndSubscriptionRequest(SavanMessageContext
renewMessage, MessageContext outMessage) throws SavanException {
+ try {
+ if (outMessage==null)
+ throw new SavanException ("Eventing protocol
need to sent the SubscriptionResponseMessage. But the outMessage is null");
+ //setting the action
+
outMessage.getOptions().setAction(AtomConstants.Actions.UnsubscribeResponse);
+ SOAPEnvelope outMessageEnvelope =
findOrCreateSoapEnvelope(renewMessage, outMessage);
+
outMessageEnvelope.getBody().addChild(OMAbstractFactory.getOMFactory().createOMElement(new
QName(AtomConstants.ATOM_MSG_NAMESPACE,AtomConstants.ElementNames.deleteFeedResponse)));
+ outMessage.setProperty(SavanConstants.MESSAGE_TYPE,new
Integer (SavanConstants.MessageTypes.UNSUBSCRIPTION_RESPONSE_MESSAGE));
+ } catch (AxisFault e) {
+ throw new SavanException(e);
+ } catch (OMException e) {
+ throw new SavanException(e);
+ }
+ }
+
+ public void handleGetStatusRequest(SavanMessageContext
getStatusMessage, MessageContext outMessage) throws SavanException {
+
+ if (outMessage==null)
+ throw new SavanException ("Eventing protocol need to
sent the SubscriptionResponseMessage. But the outMessage is null");
+
+ MessageContext subscriptionMsgCtx =
getStatusMessage.getMessageContext();
+
+ String id = (String)
getStatusMessage.getProperty(AtomConstants.TransferedProperties.SUBSCRIBER_UUID);
+ if (id==null)
+ throw new SavanException ("Cannot fulfil request.
AbstractSubscriber ID not found");
+
+ //setting the action
+
outMessage.getOptions().setAction(AtomConstants.Actions.UnsubscribeResponse);
+
+ SOAPEnvelope outMessageEnvelope = outMessage.getEnvelope();
+ SOAPFactory factory = null;
+
+ if (outMessageEnvelope!=null) {
+ factory = (SOAPFactory)
outMessageEnvelope.getOMFactory();
+ } else {
+ factory = (SOAPFactory)
subscriptionMsgCtx.getEnvelope().getOMFactory();
+ outMessageEnvelope = factory.getDefaultEnvelope();
+
+ try {
+ outMessage.setEnvelope(outMessageEnvelope);
+ } catch (AxisFault e) {
+ throw new SavanException (e);
+ }
+ }
+
+ SubscriberStore store =
CommonUtil.getSubscriberStore(getStatusMessage.getMessageContext().getAxisService());
+
+
+ if (store==null) {
+ throw new SavanException ("AbstractSubscriber Store was
not found");
+ }
+
+ AtomSubscriber subscriber = (AtomSubscriber) store.retrieve(id);
+ if (subscriber==null) {
+ throw new SavanException ("AbstractSubscriber not
found");
+ }
+
+ OMNamespace ens =
factory.createOMNamespace(AtomConstants.ATOM_NAMESPACE,AtomConstants.ATOM_PREFIX);
+ OMElement getStatusResponseElement =
factory.createOMElement(AtomConstants.ElementNames.GetStatusResponse,ens);
+
+ Date expires = subscriber.getSubscriptionEndingTime();
+ if (expires!=null) {
+ OMElement expiresElement =
factory.createOMElement(AtomConstants.ElementNames.Expires,ens);
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTime(expires);
+ String expirationString =
ConverterUtil.convertToString(calendar);
+ expiresElement.setText(expirationString);
+ getStatusResponseElement.addChild(expiresElement);
+ }
+
+ outMessageEnvelope.getBody().addChild(getStatusResponseElement);
+
+ //setting the message type
+ outMessage.setProperty(SavanConstants.MESSAGE_TYPE,new Integer
(SavanConstants.MessageTypes.GET_STATUS_RESPONSE_MESSAGE));
+ }
+ public static void addNameValuePair(XmlCursor c,QName name,Object
value){
+ c.beginElement(name);
+
+ if(value instanceof String){
+ c.insertChars((String)value);
+ }else {
+ //Make sure this works, code is taken from
+ //http://xmlbeans.apache.org/docs/2.0.0/guide/conHandlingAny.html
+ XmlCursor cc = ((XmlObject)value).newCursor();
+ cc.toFirstContentToken();
+ cc.copyXml(c);
+ cc.dispose();
+ }
+ c.toParent();
+ }
+
+
+
+
+
+ public void doProtocolSpecificProcessing(SavanMessageContext
inSavanMessage, MessageContext outMessage) throws SavanException {
+ int msgtype =
((Integer)inSavanMessage.getProperty(SavanConstants.MESSAGE_TYPE)).intValue();
+ switch(msgtype){
+ case SavanConstants.MessageTypes.SUBSCRIPTION_MESSAGE:
+ handleSubscriptionRequest(inSavanMessage,
outMessage);
+ break;
+ case SavanConstants.MessageTypes.RENEW_MESSAGE:
+ handleRenewRequest(inSavanMessage, outMessage);
+ break;
+ case SavanConstants.MessageTypes.UNSUBSCRIPTION_MESSAGE:
+ handleEndSubscriptionRequest(inSavanMessage,
outMessage);
+ break;
+ default:
+ throw new SavanException("Unknow Message type
["+msgtype+ "]");
+ }
+ }
+
+
+
+ public void doProtocolSpecificProcessing(SavanMessageContext
inSavanMessage) throws SavanException {
+ // TODO Auto-generated method stub
+
+ }
+
+
+
+}
Added:
webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/atom/AtomSubscriber.java
URL:
http://svn.apache.org/viewvc/webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/atom/AtomSubscriber.java?view=auto&rev=540918
==============================================================================
---
webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/atom/AtomSubscriber.java
(added)
+++
webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/atom/AtomSubscriber.java
Wed May 23 03:23:33 2007
@@ -0,0 +1,126 @@
+package org.apache.savan.atom;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.net.URI;
+import java.util.Date;
+
+import javax.xml.stream.XMLStreamException;
+
+import org.apache.axiom.om.OMElement;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.savan.SavanException;
+import org.apache.savan.filters.Filter;
+import org.apache.savan.subscribers.Subscriber;
+import org.apache.savan.subscription.ExpirationBean;
+import org.w3.x2005.x08.addressing.EndpointReferenceType;
+
+public class AtomSubscriber implements Subscriber{
+ private static final Log log = LogFactory.getLog(AtomSubscriber.class);
+ private Date subscriptionEndingTime = null;
+ private Feed feed;
+ private Filter filter = null;
+ private File atomFile;
+ private String feedUrl;
+
+ private URI id;
+ private String title;
+ private String author;
+ public URI getId() {
+ return id;
+ }
+ public void renewSubscription(ExpirationBean bean) {
+ throw new UnsupportedOperationException();
+ }
+ public void sendEventData(OMElement eventData) throws SavanException {
+ try {
+ Date date = new Date ();
+
+ boolean expired = false;
+ if (subscriptionEndingTime!=null &&
date.after(subscriptionEndingTime))
+ expired = true;
+
+ if (expired) {
+ String message = "Cant notify the listner since
the subscription has been expired";
+ log.debug(message);
+ }
+ if(feed == null){
+ feed = new Feed(title,id.toString(),author);
+ }
+ feed.addEntry(eventData);
+
+ if(!atomFile.getParentFile().exists()){
+ atomFile.getParentFile().mkdir();
+ }
+ FileOutputStream out = new FileOutputStream(atomFile);
+ feed.write(out);
+ out.close();
+ System.out.println("Atom file at "+ atomFile + " is
updated");
+ } catch (FileNotFoundException e) {
+ throw new SavanException(e);
+ } catch (XMLStreamException e) {
+ throw new SavanException(e);
+ } catch (IOException e) {
+ throw new SavanException(e);
+ }
+ }
+ public void setId(URI id) {
+ this.id = id;
+ }
+
+
+
+
+
+
+ public void setSubscriptionEndingTime(Date subscriptionEndingTime) {
+ this.subscriptionEndingTime = subscriptionEndingTime;
+ }
+
+ public void setEndToEPr(EndpointReferenceType endToEPR) {
+ throw new UnsupportedOperationException();
+ }
+
+ public String getAuthor() {
+ return author;
+ }
+
+ public void setAuthor(String author) {
+ this.author = author;
+ }
+
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+
+ public String getFeedUrl(){
+ return feedUrl;
+ }
+
+ public Date getSubscriptionEndingTime() {
+ return subscriptionEndingTime;
+ }
+ public Filter getFilter() {
+ return filter;
+ }
+ public void setFilter(Filter filter) {
+ this.filter = filter;
+ }
+ public void setAtomFile(File atomFile) {
+ this.atomFile = atomFile;
+ }
+ public void setFeedUrl(String feedUrl) {
+ this.feedUrl = feedUrl;
+ }
+
+
+}
Added:
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=auto&rev=540918
==============================================================================
---
webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/atom/AtomSubscriptionProcessor.java
(added)
+++
webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/atom/AtomSubscriptionProcessor.java
Wed May 23 03:23:33 2007
@@ -0,0 +1,363 @@
+/*
+ * Copyright 1999-2004 The Apache Software Foundation.
+ *
+ * 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.savan.atom;
+
+import java.io.File;
+import java.net.URI;
+import java.net.URISyntaxException;
+
+import javax.xml.namespace.QName;
+
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMException;
+import org.apache.axiom.om.util.UUIDGenerator;
+import org.apache.axiom.soap.SOAPBody;
+import org.apache.axiom.soap.SOAPEnvelope;
+import org.apache.axiom.soap.SOAPHeader;
+import org.apache.axis2.AxisFault;
+import org.apache.axis2.context.ConfigurationContext;
+import org.apache.savan.SavanConstants;
+import org.apache.savan.SavanException;
+import org.apache.savan.SavanMessageContext;
+import org.apache.savan.configuration.ConfigurationManager;
+import org.apache.savan.configuration.Protocol;
+import org.apache.savan.filters.Filter;
+import org.apache.savan.filters.XPathBasedFilter;
+import org.apache.savan.subscribers.Subscriber;
+import org.apache.savan.subscription.ExpirationBean;
+import org.apache.savan.subscription.SubscriptionProcessor;
+import org.apache.xmlbeans.XmlException;
+
+import com.wso2.eventing.atom.CreateFeedDocument;
+import com.wso2.eventing.atom.RenewFeedDocument;
+import com.wso2.eventing.atom.CreateFeedDocument.CreateFeed;
+
+public class AtomSubscriptionProcessor extends SubscriptionProcessor {
+
+ public void init (SavanMessageContext smc) throws SavanException {
+ //setting the subscriber_id as a property if possible.
+
+ String id = getSubscriberID(smc);
+ if (id!=null) {
+
smc.setProperty(AtomConstants.TransferedProperties.SUBSCRIBER_UUID,id);
+ }
+ }
+
+ /**
+ * Sample subscription
+ * <createFeed xmlns="http://wso2.com/eventing/atom">
+ * <EndTo>endpoint-reference</EndTo> ?
+ * <Delivery Mode="xs:anyURI"? >xs:any</Delivery>
+ * <Expires>[xs:dateTime | xs:duration]</Expires> ?
+ * <Filter Dialect="xs:anyURI"? > xs:any </Filter> ?
+ * </createFeed>
+ *
+ */
+
+
+
+ public Subscriber getSubscriberFromMessage(SavanMessageContext smc)
throws SavanException {
+
+ try {
+ ConfigurationManager configurationManager =
(ConfigurationManager)
smc.getConfigurationContext().getProperty(SavanConstants.CONFIGURATION_MANAGER);
+ if (configurationManager == null)
+ throw new SavanException ("Configuration
Manager not set");
+
+ Protocol protocol = smc.getProtocol();
+ if (protocol== null)
+ throw new SavanException ("Protocol not found");
+
+ SOAPEnvelope envelope = smc.getEnvelope();
+ 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);
+
+ if (!(subscriber instanceof AtomSubscriber)) {
+ String message = "Savan only support
implementations of Atom subscriber as Subscribers";
+ throw new SavanException (message);
+ }
+
+ //find the real path for atom feeds
+ File repositoryPath =
smc.getConfigurationContext().getRealPath("/");
+ File realAtomPath = new
File(repositoryPath.getAbsoluteFile(),"../atom");
+
+ //Get the service URL from request
+ String serviceAddress =
smc.getMessageContext().getTo().getAddress();
+ int cutIndex = serviceAddress.indexOf("services");
+ if(cutIndex > 0){
+ serviceAddress =
serviceAddress.substring(0,cutIndex-1);
+ }
+
+ AtomSubscriber atomSubscriber = (AtomSubscriber)
subscriber;
+ String id = UUIDGenerator.getUUID();
+
smc.setProperty(AtomConstants.TransferedProperties.SUBSCRIBER_UUID,id);
+ atomSubscriber.setId(new URI(id));
+ String atomFeedPath = id.replaceAll(":", "_")+ ".atom";
+ atomSubscriber.setAtomFile(new
File(realAtomPath,atomFeedPath));
+ atomSubscriber.setFeedUrl(serviceAddress +"/atom/"+
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.getFilter() != null) {
+ Filter filter = null;
+ String filterKey =
createFeed.getFilter().getDialect();
+
+ filter =
configurationManager.getFilterInstanceFromId(filterKey);
+ if (filter==null)
+ throw new SavanException ("The Filter
defined by the dialect is not available");
+
+ if(filter instanceof XPathBasedFilter){
+
((XPathBasedFilter)filter).setXPathString(createFeed.getFilter().getStringValue());
+ }else{
+ throw new SavanException("Only Xpath
fileters are supported");
+ }
+ 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) {
+ throw new SavanException(e);
+ } catch (XmlException e) {
+ throw new SavanException(e);
+ } catch (URISyntaxException e) {
+ throw new SavanException(e);
+ }
+ }
+
+ 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);
+ OMElement ele = parent.getFirstChildWithName(name);
+ if(ele != null){
+ return ele.getText();
+ }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");
+ }
+
+ public void resumeSubscription(SavanMessageContext
resumeSubscriptionMessage) throws SavanException {
+ throw new UnsupportedOperationException ("Eventing
specification does not support this type of messages");
+ }
+
+ /**
+ * <renewFeed><Expires></Expires></renewFeed>
+ */
+
+ public ExpirationBean getExpirationBean(SavanMessageContext
renewMessage) throws SavanException {
+ try {
+ SOAPEnvelope envelope = renewMessage.getEnvelope();
+
+ RenewFeedDocument renewFeedDocument =
RenewFeedDocument.Factory.parse( envelope.getBody().getXMLStreamReader());
+// SOAPBody body = envelope.getBody();
+//
+ ExpirationBean expirationBean = new ExpirationBean();
+// OMElement renewFeedEle = findElement(AtomConstants.RENEW_FEED,
body, true);
+// Date expieringTime =
getExpirationBeanFromString(findValue(AtomConstants.EXPIRES_ELEMENT,
renewFeedEle, true));
+ expirationBean.setDuration(false);
+
expirationBean.setDateValue(renewFeedDocument.getRenewFeed().getExpires().getTime());
+
+ String subscriberID = getSubscriberID(renewMessage);
+ if (subscriberID==null) {
+ String message = "Cannot find the subscriber
ID";
+ throw new SavanException (message);
+ }
+
+
renewMessage.setProperty(AtomConstants.TransferedProperties.SUBSCRIBER_UUID,subscriberID);
+
+ expirationBean.setSubscriberID(subscriberID);
+ return expirationBean;
+ } catch (OMException e) {
+ throw new SavanException(e);
+ } catch (XmlException e) {
+ throw new SavanException(e);
+ }
+ }
+
+ public String getSubscriberID(SavanMessageContext smc) throws
SavanException {
+ SOAPEnvelope envelope = smc.getEnvelope();
+ SOAPHeader header = envelope.getHeader();
+ if (header==null) {
+ return null;
+ }
+
+ 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;
+// }
+
+}
Added:
webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/atom/AtomUtilFactory.java
URL:
http://svn.apache.org/viewvc/webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/atom/AtomUtilFactory.java?view=auto&rev=540918
==============================================================================
---
webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/atom/AtomUtilFactory.java
(added)
+++
webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/atom/AtomUtilFactory.java
Wed May 23 03:23:33 2007
@@ -0,0 +1,70 @@
+/*
+ * Copyright 1999-2004 The Apache Software Foundation.
+ *
+ * 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.savan.atom;
+
+import org.apache.axis2.context.MessageContext;
+import org.apache.savan.SavanConstants;
+import org.apache.savan.SavanMessageContext;
+import org.apache.savan.messagereceiver.MessageReceiverDeligater;
+import org.apache.savan.subscribers.Subscriber;
+import org.apache.savan.subscription.SubscriptionProcessor;
+import org.apache.savan.util.UtilFactory;
+
+public class AtomUtilFactory implements UtilFactory {
+
+ /**
+ * this is a way to map different actions to different types of
operations
+ */
+ public SavanMessageContext initializeMessage(SavanMessageContext smc) {
+ MessageContext messageContext = smc.getMessageContext();
+ //setting the message type.
+ String action = messageContext.getOptions().getAction();
+ if (AtomConstants.Actions.Subscribe.equals(action))
+
smc.setMessageType(SavanConstants.MessageTypes.SUBSCRIPTION_MESSAGE);
+ else if (AtomConstants.Actions.Renew.equals(action))
+
smc.setMessageType(SavanConstants.MessageTypes.RENEW_MESSAGE);
+ else if (AtomConstants.Actions.Unsubscribe.equals(action))
+
smc.setMessageType(SavanConstants.MessageTypes.UNSUBSCRIPTION_MESSAGE);
+ else if (AtomConstants.Actions.GetStatus.equals(action))
+
smc.setMessageType(SavanConstants.MessageTypes.GET_STATUS_MESSAGE);
+ else if (AtomConstants.Actions.SubscribeResponse.equals(action))
+
smc.setMessageType(SavanConstants.MessageTypes.SUBSCRIPTION_RESPONSE_MESSAGE);
+ else if (AtomConstants.Actions.RenewResponse.equals(action))
+
smc.setMessageType(SavanConstants.MessageTypes.RENEW_RESPONSE_MESSAGE);
+ else if
(AtomConstants.Actions.UnsubscribeResponse.equals(action))
+
smc.setMessageType(SavanConstants.MessageTypes.UNSUBSCRIPTION_RESPONSE_MESSAGE);
+ else if (AtomConstants.Actions.GetStatusResponse.equals(action))
+
smc.setMessageType(SavanConstants.MessageTypes.GET_STATUS_RESPONSE_MESSAGE);
+ else
+ smc.setMessageType(SavanConstants.MessageTypes.UNKNOWN);
+ return smc;
+ }
+
+ public SubscriptionProcessor createSubscriptionProcessor() {
+ return new AtomSubscriptionProcessor ();
+ }
+
+ public MessageReceiverDeligater createMessageReceiverDeligater() {
+ return new AtomMessageReceiverDeligater ();
+ }
+
+ public Subscriber createSubscriber() {
+ return new AtomSubscriber ();
+ }
+
+}
Added:
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=auto&rev=540918
==============================================================================
---
webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/atom/Feed.java
(added)
+++
webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/atom/Feed.java
Wed May 23 03:23:33 2007
@@ -0,0 +1,110 @@
+package org.apache.savan.atom;
+
+import java.io.OutputStream;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+
+import javax.xml.stream.XMLStreamException;
+
+import org.apache.axiom.om.OMAbstractFactory;
+import org.apache.axiom.om.OMDocument;
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMFactory;
+import org.apache.axiom.om.OMNamespace;
+
+public class Feed {
+ private String title;
+ private String id;
+ private Date lastUpdated;
+ private String author;
+ private ArrayList entries;
+ private OMDocument document;
+ private int entryCount;
+ private OMFactory factory;
+ private OMNamespace atomNs;
+
+// <feed xmlns="http://www.w3.org/2005/Atom">
+// <id>http://www.example.org/myfeed</id>
+// <title>My Podcast Feed</title>
+// <updated>2005-07-15T12:00:00Z</updated>
+// <author>
+// <name>James M Snell</name>
+// </author>
+// <link href="http://example.org" />
+// <link rel="self" href="http://example.org/myfeed" />
+// <entry>
+// <id>http://www.example.org/entries/1</id>
+// <title>Atom 1.0</title>
+// <updated>2005-07-15T12:00:00Z</updated>
+// <link href="http://www.example.org/entries/1" />
+// <summary>An overview of Atom 1.0</summary>
+// <link rel="enclosure"
+// type="audio/mpeg"
+// title="MP3"
+// href="http://www.example.org/myaudiofile.mp3"
+// length="1234" />
+// <link rel="enclosure"
+// type="application/x-bittorrent"
+// title="BitTorrent"
+// href="http://www.example.org/myaudiofile.torrent"
+// length="1234" />
+// <content type="xml">
+// ..
+// </content>
+// </entry>
+// </feed>
+
+
+ public Feed(String title, String id, String author) {
+ this.title = title;
+ this.id = id;
+ this.author = author;
+ lastUpdated = new Date();
+ factory = OMAbstractFactory.getOMFactory();
+ document = factory.createOMDocument();
+ atomNs =
factory.createOMNamespace(AtomConstants.ATOM_NAMESPACE,AtomConstants.ATOM_PREFIX);
+ OMElement feedEle =
factory.createOMElement("feed",atomNs,document);
+
+ factory.createOMElement("id",atomNs,feedEle).setText(id);
+ if(title != null){
+
factory.createOMElement("title",atomNs,feedEle).setText(id);
+ }
+ factory.createOMElement("updated",atomNs,feedEle).setText( new
SimpleDateFormat("dd-mm-yy'T1'HH:MM:ssZ").format(lastUpdated));
+ if(author != null){
+ OMElement authorEle =
factory.createOMElement("author",atomNs,feedEle);
+
factory.createOMElement("name",atomNs,authorEle).setText(author);
+ }
+ }
+ public void addEntry(OMElement entry){
+ entryCount++;
+ 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("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.addChild(entry);
+
+
+
+ document.getOMDocumentElement().addChild(entryEle);
+ }
+
+ public void write(OutputStream out) throws XMLStreamException{
+ document.serialize(out);
+ }
+
+// public static void main(String[] args) throws Exception{
+// Feed feed = new Feed("testtitle","test_id","john");
+// StAXOMBuilder builder = new StAXOMBuilder(new
ByteArrayInputStream("<foo>bar</foo>".getBytes()));
+// feed.addEntry(builder.getDocumentElement());
+// feed.write(System.out);
+// System.out.flush();
+//
+// }
+
+}
Modified:
webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/util/CommonUtil.java
URL:
http://svn.apache.org/viewvc/webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/util/CommonUtil.java?view=diff&rev=540918&r1=540917&r2=540918
==============================================================================
---
webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/util/CommonUtil.java
(original)
+++
webservices/savan/trunk/java/modules/core/src/main/java/org/apache/savan/util/CommonUtil.java
Wed May 23 03:23:33 2007
@@ -27,6 +27,7 @@
import javax.xml.stream.XMLStreamReader;
import org.apache.axiom.om.OMAbstractFactory;
+import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.impl.llom.factory.OMXMLBuilderFactory;
import org.apache.axiom.soap.SOAPEnvelope;
import org.apache.axiom.soap.SOAPFactory;
@@ -36,6 +37,7 @@
import org.apache.axis2.description.Parameter;
import org.apache.savan.SavanConstants;
import org.apache.savan.storage.SubscriberStore;
+import org.apache.xmlbeans.XmlObject;
/**
* A common set of methods that may be used in various places of Savan.
@@ -86,5 +88,11 @@
return null;
return (SubscriberStore) parameter.getValue();
+ }
+
+ public static OMElement toOM(XmlObject element){
+ org.apache.axiom.om.impl.builder.StAXOMBuilder builder = new
org.apache.axiom.om.impl.builder.StAXOMBuilder
+ (org.apache.axiom.om.OMAbstractFactory.getOMFactory(),new
org.apache.axis2.util.StreamWrapper(element.newXMLStreamReader())) ;
+ return builder.getDocumentElement();
}
}
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=540918&r1=540917&r2=540918
==============================================================================
--- webservices/savan/trunk/java/modules/mar/module.xml (original)
+++ webservices/savan/trunk/java/modules/mar/module.xml Wed May 23 03:23:33 2007
@@ -2,11 +2,14 @@
<operation name="SavanInOutOperation"
mep="http://www.w3.org/2004/08/wsdl/in-out">
<messageReceiver
class="org.apache.savan.messagereceiver.SavanInOutMessageReceiver"/>
-
<actionMapping>http://schemas.xmlsoap.org/ws/2004/08/eventing/Subscribe</actionMapping>
<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/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>
</module>
Modified: webservices/savan/trunk/java/pom.xml
URL:
http://svn.apache.org/viewvc/webservices/savan/trunk/java/pom.xml?view=diff&rev=540918&r1=540917&r2=540918
==============================================================================
--- webservices/savan/trunk/java/pom.xml (original)
+++ webservices/savan/trunk/java/pom.xml Wed May 23 03:23:33 2007
@@ -84,6 +84,12 @@
<artifactId>axis2-adb</artifactId>
<version>${axis2.version}</version>
</dependency>
+ <dependency>
+ <groupId>xmlbeans</groupId>
+ <artifactId>xbean</artifactId>
+ <version>2.2.0</version>
+ </dependency>
+
</dependencies>
@@ -103,6 +109,7 @@
<artifactId>maven-surefire-plugin</artifactId>
<version>2.2</version>
</plugin>
+
<!--
<plugin>
<groupId>org.apache.maven.plugins</groupId>