/*
 * This file was auto-generated by the Axis C++ Web Service Generator (WSDL2Ws)
 * This file contains definitions of the web service
 */

#include "SimpleArrays.hpp"


SimpleArrays::SimpleArrays()
{
}

SimpleArrays::~SimpleArrays()
{
}

/* This function is called by the AxisEngine when something went wrong
 with the current web service request processing. Appropriate actions should
 be taken here.*/
void SimpleArrays::onFault()
{
}

xsd__boolean_Array * SimpleArrays::echoBooleanArray(xsd__boolean_Array * Value0)  
{
	return Value0;
}
xsd__base64Binary SimpleArrays::echoByteArray(xsd__base64Binary Value0)  
{
	return Value0;
}
xsd__short_Array * SimpleArrays::echoShortArray(xsd__short_Array * Value0)  
{
	return Value0;
}
xsd__int_Array * SimpleArrays::echoIntArray(xsd__int_Array * Value0)  
{
	return Value0;
}
xsd__long_Array * SimpleArrays::echoLongArray(xsd__long_Array * Value0)  
{
	return Value0;
}
xsd__float_Array * SimpleArrays::echoFloatArray(xsd__float_Array * Value0)  
{
	return Value0;
}
xsd__double_Array * SimpleArrays::echoDoubleArray(xsd__double_Array * Value0)  
{
	return Value0;
}
xsd__string_Array * SimpleArrays::echoStringArray(xsd__string_Array * Value0)  
{
	return Value0;
}
