This is an automated email from the ASF dual-hosted git repository. billblough pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/axis-axis2-java-savan.git
commit c1f8cf5e474c917e8a06115fab29ffe6e643e9bf Author: Hemapani Srinath Perera <hemap...@apache.org> AuthorDate: Mon May 28 09:01:00 2007 +0000 add initial version of test cases --- .../org/apache/savan/atom/AtomMessageReceiver.java | 37 ++- .../savan/atom/AtomSubscriptionProcessor.java | 19 +- .../org/apache/savan/atom/AtomUtilFactory.java | 6 + .../messagereceiver/PublishingMessageReceiver.java | 17 ++ .../java/org/apache/axis2/savan/atom/AtomTest.java | 298 +++++++++++++++++++++ .../apache/axis2/savan/atom/PublisherService.java | 100 +++++++ .../org/apache/axis2/savan/atom/UtilServer.java | 191 +++++++++++++ .../axis2/savan/atom/UtilServerBasedTestCase.java | 68 +++++ .../apache/axis2/savan/atom/publisher.services.xml | 33 +++ modules/mar/module.xml | 6 +- 10 files changed, 768 insertions(+), 7 deletions(-) diff --git a/modules/core/src/main/java/org/apache/savan/atom/AtomMessageReceiver.java b/modules/core/src/main/java/org/apache/savan/atom/AtomMessageReceiver.java index 1c9acdd..181abc6 100644 --- a/modules/core/src/main/java/org/apache/savan/atom/AtomMessageReceiver.java +++ b/modules/core/src/main/java/org/apache/savan/atom/AtomMessageReceiver.java @@ -3,6 +3,8 @@ package org.apache.savan.atom; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; +import java.net.URI; +import java.net.URISyntaxException; import javax.servlet.http.HttpServletRequest; import javax.xml.stream.XMLStreamException; @@ -22,7 +24,6 @@ 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; @@ -49,10 +50,32 @@ public class AtomMessageReceiver implements MessageReceiver{ OMElement feedID = bodyContent.getFirstElement(); String pathWRTRepository = "atom/"+feedID.getText(); - + File atomFile = messageCtx.getConfigurationContext().getRealPath(pathWRTRepository); + if(pathWRTRepository.equals("atom/all.atom") && !atomFile.exists()){ + AtomSubscriber atomSubscriber = new AtomSubscriber(); + atomSubscriber.setId(new URI("All")); + atomSubscriber.setAtomFile(atomFile); + atomSubscriber.setAuthor("DefaultUser"); + atomSubscriber.setTitle("default Feed"); + + String serviceAddress = messageCtx.getTo().getAddress(); + int cutIndex = serviceAddress.indexOf("services"); + if(cutIndex > 0){ + serviceAddress = serviceAddress.substring(0,cutIndex-1); + } + atomSubscriber.setFeedUrl(serviceAddress+"/services/"+messageCtx.getServiceContext().getAxisService().getName() +"/atom?feed=all.atom"); + + + SubscriberStore store = CommonUtil.getSubscriberStore(messageCtx.getAxisService()); + if (store == null) + throw new AxisFault ("Cant find the Savan subscriber store"); + store.store(atomSubscriber); + } + + if(!atomFile.exists()){ - throw new AxisFault("no feed exisits for "+feedID.getText()); + throw new AxisFault("no feed exisits for "+feedID.getText() + " no file found "+ atomFile.getAbsolutePath()); } FileInputStream atomIn = new FileInputStream(atomFile); @@ -96,12 +119,20 @@ public class AtomMessageReceiver implements MessageReceiver{ } } catch (SOAPProcessingException e) { + e.printStackTrace(); throw new AxisFault(e); + } catch (OMException e) { + e.printStackTrace(); throw new AxisFault(e); } catch (FileNotFoundException e) { + e.printStackTrace(); throw new AxisFault(e); } catch (XMLStreamException e) { + e.printStackTrace(); + throw new AxisFault(e); + } catch (URISyntaxException e) { + e.printStackTrace(); throw new AxisFault(e); } } diff --git a/modules/core/src/main/java/org/apache/savan/atom/AtomSubscriptionProcessor.java b/modules/core/src/main/java/org/apache/savan/atom/AtomSubscriptionProcessor.java index da20656..98203d6 100644 --- a/modules/core/src/main/java/org/apache/savan/atom/AtomSubscriptionProcessor.java +++ b/modules/core/src/main/java/org/apache/savan/atom/AtomSubscriptionProcessor.java @@ -38,6 +38,7 @@ 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.storage.SubscriberStore; import org.apache.savan.subscribers.Subscriber; import org.apache.savan.subscription.ExpirationBean; import org.apache.savan.subscription.SubscriptionProcessor; @@ -120,7 +121,7 @@ public class AtomSubscriptionProcessor extends SubscriptionProcessor { String id = UUIDGenerator.getUUID(); smc.setProperty(AtomConstants.TransferedProperties.SUBSCRIBER_UUID,id); atomSubscriber.setId(new URI(id)); - String atomFeedPath = id.replaceAll(":", "_")+ ".atom"; + String atomFeedPath = id2Path(id); atomSubscriber.setAtomFile(new File(realAtomPath,atomFeedPath)); atomSubscriber.setFeedUrl(serviceAddress+"/services/"+smc.getMessageContext().getServiceContext().getAxisService().getName() +"/atom?feed="+ atomFeedPath); @@ -150,10 +151,8 @@ public class AtomSubscriptionProcessor extends SubscriptionProcessor { } atomSubscriber.setFilter(filter); } - //TODO -Srinath atomSubscriber.setAuthor(createFeed.getAuthor()); atomSubscriber.setTitle(createFeed.getTitle()); - smc.setProperty(AtomConstants.Properties.feedUrl, atomSubscriber.getFeedUrl()); return atomSubscriber; } catch (AxisFault e) { @@ -250,5 +249,19 @@ public class AtomSubscriptionProcessor extends SubscriptionProcessor { return findValue(AtomConstants.ATOM_NAMESPACE,AtomConstants.IDEDNTIFIER_ELEMENT, envelope.getHeader(), false); } + + public void unsubscribe(SavanMessageContext endSubscriptionMessage) throws SavanException { + String subscriberID = getSubscriberID (endSubscriptionMessage); + File feedPath = endSubscriptionMessage.getConfigurationContext().getRealPath("atom/"+id2Path(subscriberID)); + if(feedPath.exists()){ + feedPath.delete(); + } + super.unsubscribe(endSubscriptionMessage); + } + + private String id2Path(String id){ + return id.replaceAll(":", "_")+ ".atom"; + } + } diff --git a/modules/core/src/main/java/org/apache/savan/atom/AtomUtilFactory.java b/modules/core/src/main/java/org/apache/savan/atom/AtomUtilFactory.java index 6f1b105..0801849 100644 --- a/modules/core/src/main/java/org/apache/savan/atom/AtomUtilFactory.java +++ b/modules/core/src/main/java/org/apache/savan/atom/AtomUtilFactory.java @@ -26,6 +26,12 @@ import org.apache.savan.subscription.SubscriptionProcessor; import org.apache.savan.util.UtilFactory; public class AtomUtilFactory implements UtilFactory { + + public AtomUtilFactory(){ + + } + + /** * this is a way to map different actions to different types of operations diff --git a/modules/core/src/main/java/org/apache/savan/messagereceiver/PublishingMessageReceiver.java b/modules/core/src/main/java/org/apache/savan/messagereceiver/PublishingMessageReceiver.java new file mode 100644 index 0000000..fe4ebba --- /dev/null +++ b/modules/core/src/main/java/org/apache/savan/messagereceiver/PublishingMessageReceiver.java @@ -0,0 +1,17 @@ +package org.apache.savan.messagereceiver; + +import org.apache.axiom.soap.SOAPEnvelope; +import org.apache.axis2.AxisFault; +import org.apache.axis2.context.MessageContext; +import org.apache.axis2.context.ServiceContext; +import org.apache.axis2.engine.MessageReceiver; +import org.apache.savan.publication.client.PublicationClient; + +public class PublishingMessageReceiver implements MessageReceiver{ + public void receive(MessageContext messageCtx) throws AxisFault { + SOAPEnvelope requestEnvelope = messageCtx.getEnvelope(); + ServiceContext serviceContext = messageCtx.getServiceContext(); + PublicationClient client = new PublicationClient(serviceContext.getConfigurationContext()); + client.sendPublication(requestEnvelope.getBody().getFirstElement(),serviceContext.getAxisService(),null); + } +} diff --git a/modules/core/src/test/java/org/apache/axis2/savan/atom/AtomTest.java b/modules/core/src/test/java/org/apache/axis2/savan/atom/AtomTest.java new file mode 100644 index 0000000..bad3eb8 --- /dev/null +++ b/modules/core/src/test/java/org/apache/axis2/savan/atom/AtomTest.java @@ -0,0 +1,298 @@ +/* + * Copyright 2004,2005 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.axis2.savan.atom; + +//todo + +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; + +import javax.xml.namespace.QName; + +import org.apache.axiom.om.OMAbstractFactory; +import org.apache.axiom.om.OMElement; +import org.apache.axiom.om.OMFactory; +import org.apache.axiom.om.OMNamespace; +import org.apache.axis2.AxisFault; +import org.apache.axis2.addressing.EndpointReference; +import org.apache.axis2.client.Options; +import org.apache.axis2.client.ServiceClient; +import org.apache.axis2.context.ConfigurationContext; +import org.apache.axis2.context.ConfigurationContextFactory; +import org.apache.axis2.context.MessageContext; +import org.apache.axis2.context.ServiceContext; +import org.apache.axis2.description.AxisService; +import org.apache.axis2.engine.AxisConfiguration; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.savan.atom.AtomEventingClient; +import org.apache.savan.eventing.EventingConstants; +import org.apache.savan.eventing.client.EventingClient; +import org.apache.savan.eventing.client.EventingClientBean; +import org.apache.savan.eventing.client.SubscriptionStatus; + +import com.wso2.eventing.atom.CreateFeedResponseDocument.CreateFeedResponse; + +public class AtomTest extends UtilServerBasedTestCase { + + private static final Log log = LogFactory.getLog(AtomTest.class); + protected QName transportName = new QName("http://localhost/my", + "NullTransport"); + private final int MIN_OPTION = 1; + private final int MAX_OPTION = 9; + + private final String SUBSCRIBER_1_ID = "subscriber1"; + private final String SUBSCRIBER_2_ID = "subscriber2"; + + private final String AXIS2_REPO = "target/repository/"; + + private ServiceClient serviceClient = null; + private Options options = null; + private EventingClient eventingClient = null; + + private String toAddressPart = "/axis2/services/PublisherService"; + private String listner1AddressPart = "/axis2/services/ListnerService1"; + private String listner2AddressPart = "/axis2/services/ListnerService2"; + + private final String applicationNamespaceName = "http://tempuri.org/"; + private final String dummyMethod = "dummyMethod"; + + private static String repo = null; + private static int port = 5556; + private static String serverIP = "127.0.0.1"; + + protected AxisConfiguration engineRegistry; + protected MessageContext mc; + protected ServiceContext serviceContext; + protected AxisService service; + private QName serviceName = new QName("PublisherService"); + + protected boolean finish = false; + + public AtomTest() { + super(AtomTest.class.getName()); + } + + public AtomTest(String testName) { + super(testName); + } + + + + protected void setUp() throws Exception { + UtilServer.start(AXIS2_REPO); +// service = Utils.createSimpleService(serviceName, +// PublisherService.class.getName(), +// new QName("dummyMethod")); +// service.addModuleref("savan"); +// +// UtilServer.deployService(service); + +// AxisService service1 = Utils.createSimpleService(new QName("ListnerService1"), +// SavenTest.class.getName(), +// new QName("publish")); +// UtilServer.deployService(service1); + + } + + protected void tearDown() throws Exception { + //UtilServer.unDeployService(serviceName); + UtilServer.unDeployClientService(); + } + + + public void testAtomSubcription()throws Exception{ + //Thread.sleep(1000*60*100); + ConfigurationContext configContext = ConfigurationContextFactory.createConfigurationContextFromFileSystem(AXIS2_REPO,AXIS2_REPO+"/conf/axis2.xml"); + serviceClient = new ServiceClient (configContext,null); //TODO give a repo + + options = new Options (); + serviceClient.setOptions(options); + serviceClient.engageModule(new QName ("addressing")); + + eventingClient = new EventingClient (serviceClient); + + String toAddress = "http://" + serverIP + ":" + port + toAddressPart; + + //String toAddress = "http://" + serverIP + ":" + port + "/axis2/services/RMSampleService"; + options.setTo(new EndpointReference (toAddress)); + + + AtomEventingClient atomEventingClient = new AtomEventingClient(serviceClient); + CreateFeedResponse createFeedResponse = atomEventingClient.createFeed("test Title","Srinath Perera"); + + options.setAction("http://wso2.com/eventing/dummyMethod"); + serviceClient.fireAndForget(getDummyMethodRequestElement ()); + + options.setAction(EventingConstants.Actions.Publish); + serviceClient.fireAndForget(getDummyMethodRequestElement ()); + + //Thread.sleep(1000*10*1000); + + int i = 0; + while(i<1){ + System.out.println(createFeedResponse.getFeedUrl()); + URL url = new URL(createFeedResponse.getFeedUrl()); + System.out.println(readFromStream(url.openStream())); + Thread.sleep(1000*10); + i++; + } +// + atomEventingClient.deleteFeed(); + + + } + + + +// public void testEvents() throws Exception{ +// initClient (); +// performAction (1); +// } + + + public void publish(OMElement param) throws Exception { + System.out.println("\n"); + System.out.println("'1' got a new publication..."); + System.out.println(param); + System.out.println("\n"); + } + + + private void initClient () throws AxisFault { + +// String CLIENT_REPO = null; +// String AXIS2_XML = null; +// +// if (repo!=null) { +// CLIENT_REPO = repo; +// AXIS2_XML = repo + File.separator + "axis2.xml"; +// } else { +//// throw new AxisFault ("Please specify the client repository as a program argument.Use '-h' for help."); +// } + + ConfigurationContext configContext = ConfigurationContextFactory.createConfigurationContextFromFileSystem(AXIS2_REPO,AXIS2_REPO+"/conf/axis2.xml"); + serviceClient = new ServiceClient (configContext,null); //TODO give a repo + + options = new Options (); + serviceClient.setOptions(options); + serviceClient.engageModule(new QName ("addressing")); + + eventingClient = new EventingClient (serviceClient); + + String toAddress = "http://" + serverIP + ":" + port + toAddressPart; + + //String toAddress = "http://" + serverIP + ":" + port + "/axis2/services/RMSampleService"; + options.setTo(new EndpointReference (toAddress)); + } + + private void performAction (int action) throws Exception { + + switch (action) { + case 1: + doSubscribe(SUBSCRIBER_1_ID); + break; + case 2: + doSubscribe(SUBSCRIBER_2_ID); + break; + case 3: + doSubscribe(SUBSCRIBER_1_ID); + doSubscribe(SUBSCRIBER_2_ID); + break; + case 4: + doUnsubscribe(SUBSCRIBER_1_ID); + break; + case 5: + doUnsubscribe(SUBSCRIBER_2_ID); + break; + case 6: + doUnsubscribe(SUBSCRIBER_1_ID); + doUnsubscribe(SUBSCRIBER_2_ID); + break; + case 7: + doGetStatus(SUBSCRIBER_1_ID); + break; + case 8: + doGetStatus(SUBSCRIBER_2_ID); + break; + case 9: + System.exit(0); + break; + default: + break; + } + } + + private void doSubscribe (String ID) throws Exception { + EventingClientBean bean = new EventingClientBean (); + + String subscribingAddress = null; + if (SUBSCRIBER_1_ID.equals(ID)) { + subscribingAddress = "http://" + serverIP + ":" + port + listner1AddressPart; + } else if (SUBSCRIBER_2_ID.equals(ID)) { + subscribingAddress = "http://" + serverIP + ":" + port + listner2AddressPart; + } + + bean.setDeliveryEPR(new EndpointReference (subscribingAddress)); + + //uncomment following to set an expiration time of 10 minutes. +// Date date = new Date (); +// date.setMinutes(date.getMinutes()+10); +// bean.setExpirationTime(date); + + eventingClient.subscribe(bean,ID); + Thread.sleep(1000); //TODO remove if not sequired + } + + private void doUnsubscribe (String ID) throws Exception { + eventingClient.unsubscribe(ID); + Thread.sleep(1000); //TODO remove if not sequired + } + + private void doGetStatus (String ID) throws Exception { + SubscriptionStatus status = eventingClient.getSubscriptionStatus(ID); + Thread.sleep(1000); //TODO remove if not sequired + + String statusValue = status.getExpirationValue(); + System.out.println("Status of the subscriber '" + ID +"' is" + statusValue); + } + + private OMElement getDummyMethodRequestElement() { + OMFactory fac = OMAbstractFactory.getOMFactory(); + OMNamespace namespace = fac.createOMNamespace(applicationNamespaceName,"ns1"); + return fac.createOMElement(dummyMethod, namespace); + } + + public static String readFromStream(InputStream in) throws Exception{ + try { + StringBuffer wsdlStr = new StringBuffer(); + + int read; + + byte[] buf = new byte[1024]; + while((read = in.read(buf)) > 0){ + wsdlStr.append(new String(buf,0,read)); + } + in.close(); + return wsdlStr.toString(); + } catch (IOException e) { + throw new Exception(e); + } + } + +} diff --git a/modules/core/src/test/java/org/apache/axis2/savan/atom/PublisherService.java b/modules/core/src/test/java/org/apache/axis2/savan/atom/PublisherService.java new file mode 100644 index 0000000..1cde14a --- /dev/null +++ b/modules/core/src/test/java/org/apache/axis2/savan/atom/PublisherService.java @@ -0,0 +1,100 @@ +/* + * Copyright 2004,2005 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.axis2.savan.atom; + +import java.net.URI; +import java.util.Random; + +import org.apache.axiom.om.OMAbstractFactory; +import org.apache.axiom.om.OMElement; +import org.apache.axiom.om.OMNamespace; +import org.apache.axiom.soap.SOAPFactory; +import org.apache.axis2.AxisFault; +import org.apache.axis2.context.ServiceContext; +import org.apache.savan.publication.client.PublicationClient; +import org.apache.savan.storage.SubscriberStore; +import org.apache.savan.util.CommonUtil; + +public class PublisherService { + + ServiceContext serviceContext = null; + private String eventName = "testTopic"; + + public void init(ServiceContext serviceContext) throws AxisFault { + try { + System.out.println("Eventing Service INIT called"); + this.serviceContext = serviceContext; + + PublisherThread thread = new PublisherThread (); + thread.start(); + Thread.sleep(10000); + } catch (InterruptedException e) { + throw new AxisFault(e); + } + } + + public void dummyMethod(OMElement param) throws Exception { + System.out.println("Eventing Service dummy method called"); + } + + private class PublisherThread extends Thread { + + String Publication = "Publication"; + String publicationNamespaceValue = "http://tempuri/publication/"; + Random r = new Random (); + + public void run () { + try { + while (true) { + + + + //publishing + System.out.println("Publishing next publication..."); + + SubscriberStore store = CommonUtil.getSubscriberStore(serviceContext.getAxisService()); + if (store==null) + throw new Exception ("Cant find the Savan subscriber store"); + + OMElement envelope = getNextPublicationEvent (); + PublicationClient client = new PublicationClient(serviceContext.getConfigurationContext()); + client.sendPublication(envelope,serviceContext.getAxisService(),null); + Thread.sleep(10000); + } + + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + private int eventID = 0; + + public OMElement getNextPublicationEvent () { + SOAPFactory factory = OMAbstractFactory.getSOAP11Factory(); + OMNamespace namespace = factory.createOMNamespace(publicationNamespaceValue,"ns1"); + OMElement publicationElement = factory.createOMElement(Publication,namespace); + + factory.createOMElement("foo",namespace,publicationElement).setText("Event "+eventID); + + OMElement publishMethod = factory.createOMElement("publish",namespace); + publishMethod.addChild(publicationElement); + + return publishMethod; + } + } +} diff --git a/modules/core/src/test/java/org/apache/axis2/savan/atom/UtilServer.java b/modules/core/src/test/java/org/apache/axis2/savan/atom/UtilServer.java new file mode 100644 index 0000000..cf9b96c --- /dev/null +++ b/modules/core/src/test/java/org/apache/axis2/savan/atom/UtilServer.java @@ -0,0 +1,191 @@ +package org.apache.axis2.savan.atom; + +import java.io.File; +import java.io.FilenameFilter; + +import javax.xml.namespace.QName; + +import junit.framework.TestCase; + +import org.apache.axis2.AxisFault; +import org.apache.axis2.context.ConfigurationContext; +import org.apache.axis2.context.ConfigurationContextFactory; +import org.apache.axis2.context.ServiceContext; +import org.apache.axis2.context.ServiceGroupContext; +import org.apache.axis2.deployment.DeploymentConstants; +import org.apache.axis2.deployment.DeploymentEngine; +import org.apache.axis2.deployment.DeploymentException; +import org.apache.axis2.deployment.repository.util.ArchiveReader; +import org.apache.axis2.deployment.util.Utils; +import org.apache.axis2.description.AxisModule; +import org.apache.axis2.description.AxisService; +import org.apache.axis2.description.AxisServiceGroup; +import org.apache.axis2.description.Flow; +import org.apache.axis2.engine.AxisConfiguration; +import org.apache.axis2.engine.ListenerManager; +import org.apache.axis2.transport.http.SimpleHTTPServer; + +/** + * + */ +public class UtilServer { + private static int count = 0; + + private static SimpleHTTPServer receiver; + + public static final int TESTING_PORT = 5555; + + public static synchronized void deployService(AxisService service) + throws AxisFault { + receiver.getConfigurationContext().getAxisConfiguration().addService( + service); + } + + public static synchronized void unDeployService(QName service) + throws AxisFault { + receiver.getConfigurationContext().getAxisConfiguration() + .removeService(service.getLocalPart()); + } + + public static synchronized void unDeployClientService() throws AxisFault { + if (receiver.getConfigurationContext().getAxisConfiguration() != null) { + receiver.getConfigurationContext().getAxisConfiguration() + .removeService("AnonymousService"); + } + } + + public static synchronized void start() throws Exception { + start(org.apache.axis2.Constants.TESTING_REPOSITORY); + } + + public static synchronized void start(String repository) throws Exception { + if (count == 0) { + ConfigurationContext er = getNewConfigurationContext(repository); + // er.getAxisConfiguration().addModule(new DeploymentEngine().) + + receiver = new SimpleHTTPServer(er, TESTING_PORT); + + receiver.start(); + System.out + .print("Server started on port " + TESTING_PORT + "....."); + + try { + Thread.sleep(2000); + } catch (InterruptedException e1) { + throw new AxisFault("Thread interupted", e1); + } + + } + count++; + } + + + + public static ConfigurationContext getNewConfigurationContext( + String repository) throws Exception { + File file = new File(repository); + if (!file.exists()) { + throw new Exception("repository directory " + + file.getAbsolutePath() + " does not exists"); + } + return ConfigurationContextFactory + .createConfigurationContextFromFileSystem(file + .getAbsolutePath(), file.getAbsolutePath()+"/conf/axis2.xml"); + } + + public static synchronized void stop() throws AxisFault { + if (count == 1) { + receiver.stop(); + while (receiver.isRunning()) { + try { + Thread.sleep(1000); + } catch (InterruptedException e1) { + } + } + count = 0; + System.out.print("Server stopped ....."); + } else { + count--; + } + ListenerManager listenerManager = receiver.getConfigurationContext() + .getListenerManager(); + if (listenerManager != null) { + listenerManager.stop(); + } + } + + public static ConfigurationContext getConfigurationContext() { + return receiver.getConfigurationContext(); + } + + static class AddressingFilter implements FilenameFilter { + public boolean accept(File dir, String name) { + return name.startsWith("addressing") && name.endsWith(".mar"); + } + } + + private static File getAddressingMARFile() { + File dir = new File(org.apache.axis2.Constants.TESTING_REPOSITORY); + File[] files = dir.listFiles(new AddressingFilter()); + TestCase.assertTrue(files.length == 1); + File file = files[0]; + TestCase.assertTrue(file.exists()); + return file; + } + + public static ServiceContext createAdressedEnabledClientSide( + AxisService service) throws AxisFault { + File file = getAddressingMARFile(); + TestCase.assertTrue(file.exists()); + + ConfigurationContext configContext = ConfigurationContextFactory + .createConfigurationContextFromFileSystem( + "target/test-resources/integrationRepo", null); + AxisModule axisModule = DeploymentEngine.buildModule(file, + configContext.getAxisConfiguration()); + configContext.getAxisConfiguration().addModule(axisModule); + + configContext.getAxisConfiguration().addService(service); + + return new ServiceGroupContext(configContext, + (AxisServiceGroup) service.getParent()) + .getServiceContext(service); + } + + public static ConfigurationContext createClientConfigurationContext() + throws AxisFault { + File file = getAddressingMARFile(); + TestCase.assertTrue(file.exists()); + + ConfigurationContext configContext = ConfigurationContextFactory + .createConfigurationContextFromFileSystem( + "target/test-resources/integrationRepo", null); + AxisModule axisModule = DeploymentEngine.buildModule(file, + configContext.getAxisConfiguration()); + configContext.getAxisConfiguration().addModule(axisModule); + configContext.getAxisConfiguration().engageModule( + new QName("addressing")); + return configContext; + } + + public static ServiceContext createAdressedEnabledClientSide( + AxisService service, String clientHome) throws AxisFault { + File file = getAddressingMARFile(); + TestCase.assertTrue(file.exists()); + + ConfigurationContext configContext = ConfigurationContextFactory + .createConfigurationContextFromFileSystem(clientHome, null); + AxisModule axisModule = DeploymentEngine.buildModule(file, + configContext.getAxisConfiguration()); + + configContext.getAxisConfiguration().addModule(axisModule); + // sysContext.getAxisConfiguration().engageModule(moduleDesc.getName()); + + configContext.getAxisConfiguration().addService(service); + + return new ServiceGroupContext(configContext, + (AxisServiceGroup) service.getParent()) + .getServiceContext(service); + } + +} diff --git a/modules/core/src/test/java/org/apache/axis2/savan/atom/UtilServerBasedTestCase.java b/modules/core/src/test/java/org/apache/axis2/savan/atom/UtilServerBasedTestCase.java new file mode 100644 index 0000000..4a8f13c --- /dev/null +++ b/modules/core/src/test/java/org/apache/axis2/savan/atom/UtilServerBasedTestCase.java @@ -0,0 +1,68 @@ +/* +* Copyright 2004-2006 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.axis2.savan.atom; + +import junit.extensions.TestSetup; +import junit.framework.Test; +import junit.framework.TestCase; + +public class UtilServerBasedTestCase extends TestCase { + + public UtilServerBasedTestCase() { + super(UtilServerBasedTestCase.class.getName()); + } + + public UtilServerBasedTestCase(java.lang.String string) { + super(string); + } + + protected static Test getTestSetup(Test test) { + return new TestSetup(test) { + public void setUp() throws Exception { + UtilServer.start(); + } + + public void tearDown() throws Exception { + UtilServer.stop(); + } + }; + } + + protected static Test getTestSetup2(Test test, final String param) { + return new TestSetup(test) { + public void setUp() throws Exception { + UtilServer.start(param); + } + + public void tearDown() throws Exception { + UtilServer.stop(); + } + }; + } + + protected static Test getTestSetup3(Test test, final String param1, final String param2) { + return new TestSetup(test) { + public void setUp() throws Exception { + UtilServer.start(param1); + } + + public void tearDown() throws Exception { + UtilServer.stop(); + } + }; + } +} diff --git a/modules/core/src/test/java/org/apache/axis2/savan/atom/publisher.services.xml b/modules/core/src/test/java/org/apache/axis2/savan/atom/publisher.services.xml new file mode 100644 index 0000000..75ac177 --- /dev/null +++ b/modules/core/src/test/java/org/apache/axis2/savan/atom/publisher.services.xml @@ -0,0 +1,33 @@ +<!-- +/* + * Copyright 2001-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. + */ + --> +<service name="PublisherService"> + + <parameter name="ServiceClass" locked="xsd:false">org.apache.axis2.savan.atom.PublisherService</parameter> + + <description> + The Publisher Service of the Axis2 Eventing sample. + </description> + + <module ref="savan" /> + + <operation name="dummyMethod" mep="http://www.w3.org/2004/08/wsdl/in-only"> + <messageReceiver class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver" /> + <actionMapping>http://wso2.com/eventing/dummyMethod</actionMapping> + </operation> + +</service> \ No newline at end of file diff --git a/modules/mar/module.xml b/modules/mar/module.xml index 70327a7..65a7bcf 100644 --- a/modules/mar/module.xml +++ b/modules/mar/module.xml @@ -6,7 +6,6 @@ <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> @@ -17,4 +16,9 @@ <messageReceiver class="org.apache.savan.atom.AtomMessageReceiver"/> </operation> + <operation name="publish" mep="http://www.w3.org/2004/08/wsdl/in-out"> + <messageReceiver class="org.apache.savan.messagereceiver.PublishingMessageReceiver"/> + <actionMapping>http://wso2.com/ws/2007/05/eventing/Publish</actionMapping> + </operation> + </module>