Added: webservices/muse/trunk/src/examples/client/src/test/org/apache/ws/resource/example/Disk.java URL: http://svn.apache.org/viewcvs/webservices/muse/trunk/src/examples/client/src/test/org/apache/ws/resource/example/Disk.java?rev=232376&view=auto ============================================================================== --- webservices/muse/trunk/src/examples/client/src/test/org/apache/ws/resource/example/Disk.java (added) +++ webservices/muse/trunk/src/examples/client/src/test/org/apache/ws/resource/example/Disk.java Fri Aug 12 13:38:04 2005 @@ -0,0 +1,309 @@ +/*=============================================================================*
+ * Copyright 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.ws.resource.example; + +import org.apache.xmlbeans.GDuration; +import java.io.Serializable; +import java.math.BigInteger; +import java.util.Calendar; +import java.util.HashSet; +import java.util.Set; + +/** + * Example bean representing a "backend" managed resource. + * + * NOTE: Here's a high-level algo for mapping resource prop XSD types to member var types: + * <pre> + * if ( minOccurs == "1" && maxOccurs == "1" ) + * type = single object or primitive + * elif ( maxOccurs != "unbounded" ) + * type = array of objects or primitives w/ size=maxOccurs + * elif + * type = java.util.List + * fi + * </pre> + * + * @author Ian P. Springer + */ +public class Disk + implements Serializable +{ + private BigInteger m_number_of_blocks = ExampleConstants.INITIAL_PROP_VALUE__NUMBER_OF_BLOCKS; + private Set m_filesystems = buildFileSystemSet( ); + private Set m_state_info_set = buildStateInfoSet( ); + private String m_manufacturer = ExampleConstants.INITIAL_PROP_VALUE__MANUFACTURER; + private int m_block_size = ExampleConstants.INITIAL_PROP_VALUE__BLOCK_SIZE; + private boolean m_isStarted; + private final String m_serialNumber; + private GDuration m_activeTime = ExampleConstants.INITIAL_PROP_VALUE__ACTIVE_TIME; + + /** + * Creates a new [EMAIL PROTECTED] Disk} object with the specified serial number. + */ + public Disk( String serialNumber ) + { + m_serialNumber = serialNumber; + } + + /** + * DOCUMENT_ME + * + * @param activeTime DOCUMENT_ME + */ + public void setActiveTime( GDuration activeTime ) + { + m_activeTime = activeTime; + } + + /** + * DOCUMENT_ME + * + * @return DOCUMENT_ME + */ + public GDuration getActiveTime( ) + { + return m_activeTime; + } + + /** + * DOCUMENT_ME + * + * @param blockSize DOCUMENT_ME + */ + public void setBlockSize( int blockSize ) + { + m_block_size = blockSize; + } + + /** + * DOCUMENT_ME + * + * @return DOCUMENT_ME + */ + public int getBlockSize( ) + { + return m_block_size; + } + + /** + * Returns the current capacity, computed via the formula: NumberOfBlocks * BlockSize + */ + public BigInteger getCapacity( ) + { + return computeCapacity( m_number_of_blocks, m_block_size ); + } + + /** + * DOCUMENT_ME + * + * @return DOCUMENT_ME + */ + public String getSerialNumber( ) + { + return m_serialNumber; + } + + /** + * Computes the capacity of a disk with the specified number of blocks and block size. + * + * @param numberOfBlocks number of blocks + * @param blockSize block size + * + * @return the capacity of a disk with specified number of blocks and block size + */ + public static BigInteger computeCapacity( BigInteger numberOfBlocks, + int blockSize ) + { + return numberOfBlocks.multiply( new BigInteger( String.valueOf( blockSize ) ) ); + } + + /** + * DOCUMENT_ME + * + * @return DOCUMENT_ME + */ + public String[] getFilesystems( ) + { + return (String[]) m_filesystems.toArray( new String[0] ); + } + + /** + * DOCUMENT_ME + * + * @param manufacturer DOCUMENT_ME + */ + public void setManufacturer( String manufacturer ) + { + m_manufacturer = manufacturer; + } + + /** + * DOCUMENT_ME + * + * @return DOCUMENT_ME + */ + public String getManufacturer( ) + { + return m_manufacturer; + } + + /** + * DOCUMENT_ME + * + * @param numberOfBlocks DOCUMENT_ME + */ + public void setNumberOfBlocks( BigInteger numberOfBlocks ) + { + m_number_of_blocks = numberOfBlocks; + } + + /** + * DOCUMENT_ME + * + * @return DOCUMENT_ME + */ + public BigInteger getNumberOfBlocks( ) + { + return m_number_of_blocks; + } + + /** + * DOCUMENT_ME + * + * @return DOCUMENT_ME + */ + public boolean isStarted( ) + { + return m_isStarted; + } + + /** + * DOCUMENT_ME + * + * @return DOCUMENT_ME + */ + public StateInfo[] getStateInfoList( ) + { + return (StateInfo[]) m_state_info_set.toArray( new StateInfo[0] ); + } + + /** + * DOCUMENT_ME + * + * @param filesystem DOCUMENT_ME + */ + public void addFilesystem( String filesystem ) + { + m_filesystems.add( filesystem ); + } + + /** + * DOCUMENT_ME + * + * @param stateInfo DOCUMENT_ME + */ + public void addStateInfo( StateInfo stateInfo ) + { + m_state_info_set.add( stateInfo ); + } + + /** + * DOCUMENT_ME + */ + public void removeAllFilesystems( ) + { + m_filesystems = new HashSet( ); + } + + /** + * DOCUMENT_ME + */ + public void removeAllStateInfos( ) + { + m_state_info_set.clear( ); + } + + /** + * DOCUMENT_ME + * + * @param filesystem DOCUMENT_ME + */ + public void removeFilesystem( String filesystem ) + { + m_filesystems.remove( filesystem ); + } + + /** + * DOCUMENT_ME + * + * @param stateInfo DOCUMENT_ME + */ + public void removeStateInfo( StateInfo stateInfo ) + { + m_state_info_set.remove( stateInfo ); + } + + /** + * DOCUMENT_ME + * + * @throws Exception DOCUMENT_ME + */ + public void start( ) + throws Exception + { + if ( !m_isStarted ) + { + m_isStarted = true; + System.out.println( "Backend disk with serial # " + m_serialNumber + " has been started." ); + } + } + + /** + * DOCUMENT_ME + * + * @throws Exception DOCUMENT_ME + */ + public void stop( ) + throws Exception + { + if ( m_isStarted ) + { + m_isStarted = false; + System.out.println( "Backend disk with serial # " + m_serialNumber + " has been stopped." ); + } + } + + private Set buildFileSystemSet( ) + { + Set set = new HashSet( ); + set.add( "/" ); + return set; + } + + private Set buildStateInfoSet( ) + { + Set set = new HashSet( ); + StateInfo stateInfo1 = new StateInfo( ); + stateInfo1.setState( "http://stopped" ); + stateInfo1.setTimeEntered( Calendar.getInstance( ) ); + set.add( stateInfo1 ); + StateInfo stateInfo2 = new StateInfo( ); + stateInfo2.setState( "http://starting" ); + stateInfo2.setTimeEntered( Calendar.getInstance( ) ); + set.add( stateInfo2 ); + return set; + } +} \ No newline at end of file Added: webservices/muse/trunk/src/examples/client/src/test/org/apache/ws/resource/example/ExampleConstants.java URL: http://svn.apache.org/viewcvs/webservices/muse/trunk/src/examples/client/src/test/org/apache/ws/resource/example/ExampleConstants.java?rev=232376&view=auto ============================================================================== --- webservices/muse/trunk/src/examples/client/src/test/org/apache/ws/resource/example/ExampleConstants.java (added) +++ webservices/muse/trunk/src/examples/client/src/test/org/apache/ws/resource/example/ExampleConstants.java Fri Aug 12 13:38:04 2005 @@ -0,0 +1,83 @@ +/*=============================================================================* + * Copyright 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.ws.resource.example; + +import org.apache.xmlbeans.GDuration; +import javax.xml.namespace.QName; +import java.math.BigInteger; + +/** + * Example-related constants. + * + * @author Ian P. Springer + */ +public interface ExampleConstants +{ + /** DOCUMENT_ME */ + BigInteger INITIAL_PROP_VALUE__NUMBER_OF_BLOCKS = new BigInteger( "20000000000" ); + + /** Target namespace prefix for the disk WSDL */ + String NSPREFIX_XYZ = "xyz"; + + /** Target namespace URI of the disk WSDL */ + String NSURI_XYZ = "http://xyz.com/"; + + /** QNames */ + QName RESOURCE_PROP_QNAME_ACTIVE_TIME = new QName( NSURI_XYZ, "ActiveTime", NSPREFIX_XYZ ); + + /** DOCUMENT_ME */ + QName RESOURCE_PROP_QNAME_BLOCK_SIZE = new QName( NSURI_XYZ, "BlockSize", NSPREFIX_XYZ ); + + /** DOCUMENT_ME */ + QName RESOURCE_PROP_QNAME_CAPACITY = new QName( NSURI_XYZ, "Capacity", NSPREFIX_XYZ ); + + /** DOCUMENT_ME */ + QName RESOURCE_PROP_QNAME_FILE_SYSTEM = new QName( NSURI_XYZ, "FileSystem", NSPREFIX_XYZ ); + + /** DOCUMENT_ME */ + QName RESOURCE_PROP_QNAME_MANUFACTURER = new QName( NSURI_XYZ, "Manufacturer", NSPREFIX_XYZ ); + + /** DOCUMENT_ME */ + QName RESOURCE_PROP_QNAME_NUMBER_OF_BLOCKS = new QName( NSURI_XYZ, "NumberOfBlocks", NSPREFIX_XYZ ); + + /** DOCUMENT_ME */ + QName RESOURCE_PROP_QNAME_STATE_INFO = new QName( NSURI_XYZ, "StateInfo", NSPREFIX_XYZ ); + + /** DOCUMENT_ME */ + QName RESOURCE_PROP_QNAME_TOPIC_SPACE = new QName( NSURI_XYZ, "TopicSpace", NSPREFIX_XYZ ); + + /** DOCUMENT_ME */ + String INITIAL_PROP_VALUE__MANUFACTURER = "Hewlett-Packard Company"; + + /** Name of the deployed disk Web service */ + String SERVICE_NAME = "disk"; + + /** Qualified name of the deployed disk Web service */ + QName SERVICE_QNAME = new QName( NSURI_XYZ, SERVICE_NAME ); + + /** URL path of the disk Web service */ + String SERVICE_URL_PATH = "/axis/services/" + SERVICE_NAME; + + /** DOCUMENT_ME */ + int INITIAL_PROP_VALUE__BLOCK_SIZE = 1024; + + /** DOCUMENT_ME */ + BigInteger INITIAL_PROP_VALUE__CAPACITY = + Disk.computeCapacity( INITIAL_PROP_VALUE__NUMBER_OF_BLOCKS, INITIAL_PROP_VALUE__BLOCK_SIZE ); + + /** DOCUMENT_ME */ + GDuration INITIAL_PROP_VALUE__ACTIVE_TIME = new GDuration( "P0M" ); +} \ No newline at end of file Added: webservices/muse/trunk/src/examples/client/src/test/org/apache/ws/resource/example/StateInfo.java URL: http://svn.apache.org/viewcvs/webservices/muse/trunk/src/examples/client/src/test/org/apache/ws/resource/example/StateInfo.java?rev=232376&view=auto ============================================================================== --- webservices/muse/trunk/src/examples/client/src/test/org/apache/ws/resource/example/StateInfo.java (added) +++ webservices/muse/trunk/src/examples/client/src/test/org/apache/ws/resource/example/StateInfo.java Fri Aug 12 13:38:04 2005 @@ -0,0 +1,69 @@ +/*=============================================================================* + * Copyright 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.ws.resource.example; + +import java.io.Serializable; +import java.util.Calendar; + +/** + * @author Ian P. Springer + */ +public class StateInfo + implements Serializable +{ + private Calendar m_timeEntered; + private String m_state; + + /** + * DOCUMENT_ME + * + * @param state DOCUMENT_ME + */ + public void setState( String state ) + { + m_state = state; + } + + /** + * DOCUMENT_ME + * + * @return DOCUMENT_ME + */ + public String getState( ) + { + return m_state; + } + + /** + * DOCUMENT_ME + * + * @param timeEntered DOCUMENT_ME + */ + public void setTimeEntered( Calendar timeEntered ) + { + m_timeEntered = timeEntered; + } + + /** + * DOCUMENT_ME + * + * @return DOCUMENT_ME + */ + public Calendar getTimeEntered( ) + { + return ( m_timeEntered ); + } +} \ No newline at end of file Added: webservices/muse/trunk/src/examples/client/src/test/org/apache/ws/resource/example/discovery/DiskDiscoveryAgent.java URL: http://svn.apache.org/viewcvs/webservices/muse/trunk/src/examples/client/src/test/org/apache/ws/resource/example/discovery/DiskDiscoveryAgent.java?rev=232376&view=auto ============================================================================== --- webservices/muse/trunk/src/examples/client/src/test/org/apache/ws/resource/example/discovery/DiskDiscoveryAgent.java (added) +++ webservices/muse/trunk/src/examples/client/src/test/org/apache/ws/resource/example/discovery/DiskDiscoveryAgent.java Fri Aug 12 13:38:04 2005 @@ -0,0 +1,100 @@ +package org.apache.ws.resource.example.discovery; + + +import javax.xml.namespace.QName; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.ws.resource.discovery.DiscoveryAgent; +import org.apache.ws.resource.discovery.RegistrationManager; +import org.apache.ws.resource.discovery.faults.RegistrationFailureException; +import org.apache.ws.resource.discovery.impl.DiscoveryAgentProperty; + +import axis.com.xyz.DiskWsdmServiceWSResource; + +/** + * This is a sample discovery agent that will add one new instance of a + * disk resource for each Agent property with an id of ResourceID. + * Its value will be the resource id to be used. + * <p/> + * Below is a sample of how to instantiate 2 instances of + * disk resource, one with the id of 1234 and another with one + * of 5678. + * <p/> + * <pre> + * <agent-list > + * <agent> + * <name>Disk Resource Discovery Agent</name> + * <class>org.apache.ws.resource.example.discovery.DiskDiscoveryAgent</class> + * <properties> + * <property id="ResourceID">1234</property> + * <property id="ResourceID">5678</property> + * </properties> + * </agent> + * </agent-list> + * </pre> + * + * @author wire + * @version $Revision: 1.1 $ + */ +public class DiskDiscoveryAgent + implements DiscoveryAgent +{ + /** + * Provides log access for this class. + */ + private static final Log LOG = LogFactory.getLog( DiskDiscoveryAgent.class ); + + /** + * @see DiscoveryAgent#discover(String, RegistrationManager, DiscoveryAgentProperty[]) + */ + public void discover( String agentname, + RegistrationManager registrationManager, + DiscoveryAgentProperty[] agentProps ) + { + // See how many agentProps there are with ResourceID + // For each one, create a DiskResource and register it + int discoveredCount = 0; + for ( int i = 0; i < agentProps.length; i++ ) + { + DiscoveryAgentProperty agentProp = agentProps[i]; + if ( agentProp.getId( ).equals( "ResourceID" ) ) + { + DiskWsdmServiceWSResource resource = null; + try + { + String resourceId = agentProp.getValue( ); + resource = new DiskWsdmServiceWSResource( resourceId ); + resource.getPropertiesManager( ).setReadOnly(new QName( "http://xyz.com/", "Capacity", "xyz" ), true ); + discoveredCount++; + } + catch ( Throwable t ) + { + LOG.error( "Discovery failed for DiskWsdmServiceWSResource with Id " + agentProp.getId( ), t ); + continue; + } + + LOG.info( "Attempting to register an instance of DiskWsdmServiceWSResource ResourceID=" + + agentProp.getValue( ) ); + try + { + registrationManager.register( resource ); + } + catch ( RegistrationFailureException rfe ) + { + LOG.error( "Discovery failed to register " + agentProp.getId( ), rfe ); + } + } + } + + //Just for conveniance, if nothing was discovered, write that to the log. + if ( discoveredCount == 0 ) + { + LOG.warn( "Discovery completed on agent " + agentname + " but no new resources where added." ); + } + else + { + LOG.info( "Discovery agent <" + agentname + "> finished." ); + } + } +} \ No newline at end of file Added: webservices/muse/trunk/src/examples/client/src/test/org/apache/ws/test/AbstractAxisTestCase.java URL: http://svn.apache.org/viewcvs/webservices/muse/trunk/src/examples/client/src/test/org/apache/ws/test/AbstractAxisTestCase.java?rev=232376&view=auto ============================================================================== --- webservices/muse/trunk/src/examples/client/src/test/org/apache/ws/test/AbstractAxisTestCase.java (added) +++ webservices/muse/trunk/src/examples/client/src/test/org/apache/ws/test/AbstractAxisTestCase.java Fri Aug 12 13:38:04 2005 @@ -0,0 +1,239 @@ +/*=============================================================================* + * Confidential Copyright (c) 2004 Hewlett-Packard Development Company, L.P. * + *=============================================================================*/ +package org.apache.ws.test; + +import org.apache.ws.http.NotSoSimpleAxisServer; +import org.apache.ws.rpc.JaxRpcConstants; +import org.apache.ws.soap.SaajConstants; + +import junit.framework.AssertionFailedError; +import junit.framework.TestCase; + +import org.apache.axis.configuration.FileProvider; + +import java.net.MalformedURLException; +import java.net.ServerSocket; +import java.net.URL; + +/** + * Provides some conviencence functionality for easier testing of web services. + * Methods provided by this JUnit test case superclass will allow an embedded + * Axis server to be started and stopped. + * + * @author mazz + */ +public abstract class AbstractAxisTestCase + extends TestCase +{ + private static final int ANY_FREE_PORT = 0; + + /* + * Make sure JAX-RPC and SAAJ factories all are set to Axis' impls. + */ + static + { + System.setProperty( JaxRpcConstants.SYSPROP_SERVICE_FACTORY, JaxRpcConstants.IMPL_SERVICE_FACTORY_AXIS ); + System.setProperty( SaajConstants.SYSPROP_SOAP_FACTORY, SaajConstants.IMPL_SOAP_FACTORY_AXIS ); + System.setProperty( SaajConstants.SYSPROP_MESSAGE_FACTORY, SaajConstants.IMPL_MESSAGE_FACTORY_AXIS ); + System.setProperty( SaajConstants.SYSPROP_SOAP_CONNECTION_FACTORY, + SaajConstants.IMPL_SOAP_CONNECTION_FACTORY_AXIS ); + System.setProperty( SaajConstants.SYSPROP_SOAP_ELEMENT_FACTORY, SaajConstants.IMPL_SOAP_ELEMENT_FACTORY_AXIS ); + } + + /** + * the embedded Axis server + */ + private NotSoSimpleAxisServer m_simpleAxisServer; + + + /** + * @see TestCase#TestCase() + */ + public AbstractAxisTestCase( ) + { + super( ); + } + + /** + * @see TestCase#TestCase(String) + */ + public AbstractAxisTestCase( String name ) + { + super( name ); + } + + /** + * Returns the base URL used to contact the Axis server. To access a web service hosted inside + * of the embedded Axis server, append the name of the web service to this base URL. + * <p/> + * Subclasses may override this method if the default is not acceptable. The + * default is <code>http://127.0.0.1:####/axis/services/</code> where <code>####</code> + * is the [EMAIL PROTECTED] #getAxisServerSocketPort() Axis port number} and <code>axis</code> is + * the [EMAIL PROTECTED] #getAxisContextName() Axis context name}. + * + * @return base URL for all web services hosted in the embedded Axis server + */ + protected URL getAxisBaseUrl( ) + { + try + { + return new URL( "http", + "127.0.0.1", + m_simpleAxisServer.getServerSocket().getLocalPort(), + "/" + getAxisContextName( ) + "/services/" ); + } + catch ( MalformedURLException murle ) + { // should never occur - throw error so as not to force a throws clause in signature + throw new AssertionFailedError( murle.toString( ) ); + } + } + + /** + * Returns the full directory path containing the WSDD configuration file(s). + * This is the base path that is prepended to the + * [EMAIL PROTECTED] #getAxisConfigFileName() configuration file name}. + * <p/> + * Subclasses may override this method if the default is not acceptable. The + * default is the current directory as defined by the system property + * <code>user.dir</code>. + * + * @return filename of the WSDD configuration file + */ + protected String getAxisConfigBasePath( ) + { + return System.getProperty( "user.dir" ); + } + + /** + * Returns the filename of the actual Axis WSDD configuration file, excluding + * all directory paths. + * <p/> + * Subclasses may override this method if the default is not acceptable. The + * default is <code>server-config.wsdd</code>. + * + * @return filename of the WSDD configuration file + */ + protected String getAxisConfigFileName( ) + { + return "server-config.wsdd"; + } + + /** + * Returns the context name of the Axis servlet for use within an endpoint URL. + * + * @return context name of the Axis servlet + */ + protected String getAxisContextName( ) + { + return "axis"; + } + + /** + * This setter is to allow subclasses to tell us if we should use an already existing Axis server. + * + * @param server the embedded Axis server to be used by the tests + */ + protected void setAxisServer( NotSoSimpleAxisServer server ) + { + m_simpleAxisServer = server; + } + + /** + * @return the embedded Axis server to be used by the tests + */ + protected NotSoSimpleAxisServer getAxisServer( ) + { + return m_simpleAxisServer; + } + + /** + * Returns the number of the port that the embedded Axis server will accept + * requests on. + * <p/> + * Subclasses may override this method if the default is not acceptable. The + * default is <code>8080</code>. + * + * @return port number that the Axis server will listen to + */ + protected int getAxisServerSocketPort( ) + { + return ANY_FREE_PORT; + } + + + /** + * Returns a URL used to request a WSDL document for a web service with the given name. + * This method uses [EMAIL PROTECTED] #getAxisBaseUrl()} to determine the base URL. + * + * @param serviceName the name of the web service + * + * @return URL used to request a web service WSDL document + * + * @see #getAxisBaseUrl() + */ + protected URL getAxisWebServiceUrl( String serviceName ) + { + try + { + return new URL( getAxisBaseUrl( ), serviceName ); + } + catch ( MalformedURLException murle ) + { // should never occur - throw error so as not to force a throws clause in signature + throw new AssertionFailedError( murle.toString( ) ); + } + } + + /** + * Returns a URL used to request a WSDL document for a web service with the given name. + * This method uses [EMAIL PROTECTED] #getAxisBaseUrl()} to determine the base URL. + * + * @param serviceName the name of the web service + * + * @return URL used to request a web service WSDL document + * + * @see #getAxisBaseUrl() + */ + protected URL getAxisWebServiceWsdlUrl( String serviceName ) + { + try + { + return new URL( getAxisBaseUrl( ).toString( ) + serviceName + "?wsdl" ); + } + catch ( MalformedURLException murle ) + { // should never occur - throw error so as not to force a throws clause in signature + throw new AssertionFailedError( murle.toString( ) ); + } + } + + /** + * Reads in the Axis configuration file, creates a server socket to accept + * requests and then starts the embedded Axis server. + * + * @throws Exception if failed to get the configuration file, failed to start + * the server socket or failed to start the server + */ + protected void startAxisServer( ) + throws Exception + { + FileProvider config = new FileProvider( getAxisConfigBasePath( ), + getAxisConfigFileName( ) ); + ServerSocket ss = new ServerSocket( getAxisServerSocketPort( ) ); + m_simpleAxisServer = new NotSoSimpleAxisServer( ); + m_simpleAxisServer.setServerSocket( ss ); + m_simpleAxisServer.setMyConfig( config ); + m_simpleAxisServer.start( ); + } + + /** + * Stops the embedded Axis server if it is running. + */ + protected void stopAxisServer( ) + { + if ( m_simpleAxisServer != null ) + { + m_simpleAxisServer.stop( ); + m_simpleAxisServer = null; + } + } +} \ No newline at end of file Added: webservices/muse/trunk/src/examples/client/src/test/org/apache/ws/test/AbstractMultipleAxisTestCase.java URL: http://svn.apache.org/viewcvs/webservices/muse/trunk/src/examples/client/src/test/org/apache/ws/test/AbstractMultipleAxisTestCase.java?rev=232376&view=auto ============================================================================== --- webservices/muse/trunk/src/examples/client/src/test/org/apache/ws/test/AbstractMultipleAxisTestCase.java (added) +++ webservices/muse/trunk/src/examples/client/src/test/org/apache/ws/test/AbstractMultipleAxisTestCase.java Fri Aug 12 13:38:04 2005 @@ -0,0 +1,55 @@ +/*=============================================================================* + * Confidential Copyright (c) 2004 Hewlett-Packard Development Company, L.P. * + *=============================================================================*/ +package org.apache.ws.test; + +import junit.framework.TestCase; + +/** + * A JUnit test case superclass that will setup each individual test with its own + * Axis server. Multiple Axis servers will be started/stopped - one per test method. + * + * @author mazz + */ +public abstract class AbstractMultipleAxisTestCase + extends AbstractAxisTestCase +{ + /** + * @see AbstractAxisTestCase#AbstractAxisTestCase() + */ + public AbstractMultipleAxisTestCase( ) + { + } + + /** + * @see AbstractAxisTestCase#AbstractAxisTestCase(String) + */ + public AbstractMultipleAxisTestCase( String name ) + { + super( name ); + } + + /** + * Starts the embedded Axis server. + * + * @see TestCase#setUp() + */ + protected void setUp( ) + throws Exception + { + super.setUp( ); + startAxisServer( ); + } + + /** + * Stops the embedded Axis server. + * + * @see TestCase#tearDown() + */ + protected void tearDown( ) + throws Exception + { + super.tearDown( ); + stopAxisServer( ); + } +} Added: webservices/muse/trunk/src/examples/client/src/test/org/apache/ws/test/AbstractNoAxisTestCase.java URL: http://svn.apache.org/viewcvs/webservices/muse/trunk/src/examples/client/src/test/org/apache/ws/test/AbstractNoAxisTestCase.java?rev=232376&view=auto ============================================================================== --- webservices/muse/trunk/src/examples/client/src/test/org/apache/ws/test/AbstractNoAxisTestCase.java (added) +++ webservices/muse/trunk/src/examples/client/src/test/org/apache/ws/test/AbstractNoAxisTestCase.java Fri Aug 12 13:38:04 2005 @@ -0,0 +1,23 @@ +/*=============================================================================* + * Confidential Copyright (c) 2004 Hewlett-Packard Development Company, L.P. * + *=============================================================================*/ +package org.apache.ws.test; + +/** + * For running tests against an Axis instance running in another JVM (i.e. under Tomcat). + * + * @author Ian P. Springer + */ +public abstract class AbstractNoAxisTestCase + extends AbstractAxisTestCase +{ + /** + * Context is wsdm when not running under a [EMAIL PROTECTED] org.apache.axis.transport.http.SimpleAxisServer}. + * + * @return "wsdm" + */ + protected String getAxisContextName( ) + { + return "wsdm"; + } +} \ No newline at end of file Added: webservices/muse/trunk/src/examples/client/src/test/org/apache/ws/test/AbstractOneAxisTestCase.java URL: http://svn.apache.org/viewcvs/webservices/muse/trunk/src/examples/client/src/test/org/apache/ws/test/AbstractOneAxisTestCase.java?rev=232376&view=auto ============================================================================== --- webservices/muse/trunk/src/examples/client/src/test/org/apache/ws/test/AbstractOneAxisTestCase.java (added) +++ webservices/muse/trunk/src/examples/client/src/test/org/apache/ws/test/AbstractOneAxisTestCase.java Fri Aug 12 13:38:04 2005 @@ -0,0 +1,167 @@ +/*=============================================================================* + * Confidential Copyright (c) 2004 Hewlett-Packard Development Company, L.P. * + *=============================================================================*/ +package org.apache.ws.test; + +import org.apache.ws.http.NotSoSimpleAxisServer; + +import junit.framework.Test; +import junit.framework.TestCase; + +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.Vector; + +/** + * A JUnit test case superclass that will setup one global Axis server for use across all + * individual test methods. An embedded Axis server is started before the + * first test is run and that one Axis server remains running until the last test completes + * its run at which time the Axis server is stopped. + * + * @author Ian P. Springer + */ +public abstract class AbstractOneAxisTestCase + extends AbstractAxisTestCase +{ + /** number of test methods that have been run (static since JUnit creates one instance of this class per test method) */ + private static int s_testsRun = 0; + + /** total number of test methods found in the test case (static since JUnit creates one instance of this class per test method) */ + private static int s_testCount = 0; + + /** axis server for use across all tests in the test case (static since JUnit creates one instance of this class per test method) */ + private static NotSoSimpleAxisServer s_simpleAxisServer; + + /** + * @see AbstractAxisTestCase#AbstractAxisTestCase() + */ + public AbstractOneAxisTestCase( ) + { + super( ); + } + + /** + * @see AbstractAxisTestCase#AbstractAxisTestCase(String) + */ + public AbstractOneAxisTestCase( String name ) + { + super( name ); + } + + /** + * Starts the embedded Axis server iff this is the first test being run within this test case. + * + * @see TestCase#setUp() + */ + protected void setUp( ) + throws Exception + { + super.setUp( ); + + if ( s_testsRun++ == 0 ) + { + startAxisServer( ); + s_simpleAxisServer = getAxisServer( ); + } + else + { + // a prior test method was run so the Axis server is already started, reuse it + setAxisServer( s_simpleAxisServer ); + } + } + + /** + * Stops the embedded Axis server after the last test within this test case has finished running. + * + * @see TestCase#tearDown() + */ + protected void tearDown( ) + throws Exception + { + super.tearDown( ); + if ( s_testsRun == getTestCount( ) ) + { + stopAxisServer( ); + s_simpleAxisServer = null; + + // reset the counters to prepare for the next test case + s_testsRun = 0; + s_testCount = 0; + } + } + + /** + * Returns the number of tests in this TestCase. + * + * @return the number of tests in this TestCase + */ + private int getTestCount( ) + { + if ( s_testCount == 0 ) + { + s_testCount = countTests( this.getClass( ) ); + } + return s_testCount; + } + + /** + * Examines the given <code>Method</code> and returns <code>true</code> if it is a JUnit test method. + * + * A method is considered a test method if all of the following are <code>true</code>: + * <ol> + * <li>The method's name starts with "test"</li> + * <li>The method takes 0 parameters</li> + * <li>The method returns "void"</li> + * <li>The method is public</li> + * </ol> + * + * @param m the method to check + * + * @return <code>true</code> if the given method is a JUnit test method; <code>false</code> otherwise + */ + private boolean isTestMethod( Method m ) + { + String name = m.getName( ); + Class[] parameters = m.getParameterTypes( ); + Class returnType = m.getReturnType( ); + boolean is_public = Modifier.isPublic( m.getModifiers( ) ); + + return ( parameters.length == 0 ) && name.startsWith( "test" ) && returnType.equals( Void.TYPE ) + && is_public; + } + + /** + * Counts the test methods in the specified JUnit TestCase class. + * + * @param testCaseClass a JUnit TestCase class + * + * @return the number of test methods in the specified TestCase class + * + * @see #isTestMethod(Method) + */ + private int countTests( final Class testCaseClass ) + { + Class superClass = testCaseClass; + Vector tests = new Vector( ); + + while ( Test.class.isAssignableFrom( superClass ) ) + { + Method[] methods = superClass.getDeclaredMethods( ); + + for ( int i = 0; i < methods.length; i++ ) + { + if ( !tests.contains( methods[i].getName( ) ) ) + { + if ( isTestMethod( methods[i] ) ) + { + tests.add( methods[i].getName( ) ); + } + } + } + + superClass = superClass.getSuperclass( ); + } + + return tests.size( ); + } +} \ No newline at end of file Added: webservices/muse/trunk/src/examples/client/src/test/org/apache/ws/test/AbstractSerializationTestCase.java URL: http://svn.apache.org/viewcvs/webservices/muse/trunk/src/examples/client/src/test/org/apache/ws/test/AbstractSerializationTestCase.java?rev=232376&view=auto ============================================================================== --- webservices/muse/trunk/src/examples/client/src/test/org/apache/ws/test/AbstractSerializationTestCase.java (added) +++ webservices/muse/trunk/src/examples/client/src/test/org/apache/ws/test/AbstractSerializationTestCase.java Fri Aug 12 13:38:04 2005 @@ -0,0 +1,96 @@ +/*=============================================================================* + * Confidential Copyright (c) 2004 Hewlett-Packard Development Company, L.P. * + *=============================================================================*/ +package org.apache.ws.test; + +import junit.framework.TestCase; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; + +/** + * Superclass test case for use if a test case wants to perform serialization checks. + * + * @author mazz + */ +public abstract class AbstractSerializationTestCase + extends TestCase +{ + private static final Log LOG = LogFactory.getLog( AbstractSerializationTestCase.class ); + + /** + * De-Serializes the given string into an object. + * + * @param s bytes to de-serialize + * + * @return de-serialized object + */ + protected Object deSerializeObject( byte[] s ) + { + Object ret_obj; + + try + { + ByteArrayInputStream bais = new ByteArrayInputStream( s ); + ObjectInputStream ois = new ObjectInputStream( bais ); + + ret_obj = ois.readObject( ); + + assertNotNull( ret_obj ); + + LOG.debug( "DeserializedObject.toString(): " + ret_obj ); // just to see what the de-serialized data looks like + + return ret_obj; + } + catch ( Exception e ) + { + fail( "Cannot de-serialize object: " + e ); + + return null; // never gets here + } + } + + /** + * Serializes the given object then immediately de-serializes it. + * + * @param o object to serialize then de-serialize + * + * @return the de-serialized object - should be equal to the input though will not be the same + */ + protected Object roundTrip( Object o ) + { + return deSerializeObject( serializeObject( o ) ); + } + + /** + * Serializes the given object. + * + * @param o object to serialize + * + * @return serialized data + */ + protected byte[] serializeObject( Object o ) + { + try + { + ByteArrayOutputStream baos = new ByteArrayOutputStream( ); + ObjectOutputStream oos = new ObjectOutputStream( baos ); + + oos.writeObject( o ); + + //System.out.println( baos.toString( ) ); // just to see what the serialized data looks like + return baos.toByteArray( ); + } + catch ( IOException ioe ) + { + fail( "Cannot serialize object '" + o.getClass( ) + "': " + ioe ); + + return null; // never gets here + } + } +} \ No newline at end of file --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
