📄 interop.cpp
字号:
// check if it is the only one
if( m->getParameterCount() > 1 )
{
mdata->out()->setFault( esoap::Fault::Server,
"ERROR: too many parameters =%d", m->getParameterCount() );
return 0;
}
// check if it is array....
if( p->getType() != esoap::xsd_array )
{
mdata->out()->setFault( esoap::Fault::Server,
"ERROR: type is not array =%d", p->getType() );
return 0;
}
// send array back.
esoap::Method *resp = mdata->out()->setMethod( "e:echoFloatArrayResponse", INTEROP_NS_URI );
esoap::Array *a = new esoap::Array( "outputFloatArray" );
for( size_t i = 0; i < p->getParameterCount(); i++ )
{
esoap::Parameter *param = p->getParameter( i );
float f = param->getFloat();
a->addFloat( f );
}
a->setType( esoap::xsd_float );
resp->addParameter( a );
return 0;
}
/**
* Receives one array of int and echoes it back to the caller.
*/
int echoStruct( esoap::MethodDataBlock *mdata )
{
SYSLOG( "Method: echoStruct()\n" );
// let's access the parameters...
esoap::Method *m = mdata->in()->getMethod();
esoap::Parameter *p = mdata->in()->getRealParameter( m->getParameter( 0 ) );
// check if we have a parameter, and it is the only one
if( !p )
{
mdata->out()->setFault( esoap::Fault::Server, "ERROR: missing input Struct" );
return 0;
}
// check if it is the only one
if( m->getParameterCount() > 1 )
{
mdata->out()->setFault( esoap::Fault::Server,
"ERROR: too many parameters for method =%d", m->getParameterCount() );
return 0;
}
if( p->isHref() )
{
p = mdata->in()->getRealParameter( p );
}
// struct has three parameters
if( p->getParameterCount() != 3 )
{
mdata->out()->setFault( esoap::Fault::Server,
"ERROR: too many parameters in struct =%d", p->getParameterCount() );
return 0;
}
// send array back.
esoap::Method *resp = mdata->out()->setMethod( "e:echoStructResponse", INTEROP_NS_URI );
esoap::Parameter *data = new esoap::Parameter( "outputStruct" );
esoap::Parameter *param;
// handle each parameter of the struct ...
param = p->getParameter( "varString" );
if( !param )
{
mdata->out()->setFault( esoap::Fault::Server, "ERROR: missing struct member: varString" );
delete data;
return 0;
}
esoap::String s = param->getString();
data->addString( "varString", s.c_str() );
// handle each parameter of the struct ...
param = p->getParameter( "varInt" );
if( !param )
{
mdata->out()->setFault( esoap::Fault::Server, "ERROR: missing struct member: varInt" );
delete data;
return 0;
}
int i = param->getInteger();
data->addInteger( "varInt", i );
// handle each parameter of the struct ...
param = p->getParameter( "varFloat" );
if( !param )
{
mdata->out()->setFault( esoap::Fault::Server, "ERROR: missing struct member: varFloat" );
delete data;
return 0;
}
float f = param->getFloat();
data->addFloat( "varFloat", f );
// add extra namespace to the envelope...
mdata->out()->addAttribute( "xmlns:ns1", "http://soapinterop.org/xsd" );
data->setType( "ns1:SOAPStruct" );
resp->addParameter( data );
return 0;
}
/**
* Receives one array of "structs" and echoes it back to the caller.
*/
int echoStructArray( esoap::MethodDataBlock *mdata )
{
SYSLOG( "Method: echoStructArray()\n" );
// let's access the parameters...
esoap::Method *m = mdata->in()->getMethod();
esoap::Parameter *p = mdata->in()->getRealParameter( m->getParameter( 0 ) );
// check if we have a parameter, and it is the only one
if( !p )
{
mdata->out()->setFault( esoap::Fault::Server, "ERROR: missing input Array of structs" );
return 0;
}
// check if it is the only one
if( m->getParameterCount() > 1 )
{
mdata->out()->setFault( esoap::Fault::Server,
"ERROR: too many parameters =%d", m->getParameterCount() );
return 0;
}
if( p->isHref() )
{
p = mdata->in()->getRealParameter( p );
}
// check if it is array....
if( p->getType() != esoap::xsd_array )
{
mdata->out()->setFault( esoap::Fault::Server,
"ERROR: type is not array =%d", p->getType() );
return 0;
}
// send array back.
esoap::Method *resp = mdata->out()->setMethod( "e:echoStructArrayResponse", INTEROP_NS_URI );
esoap::Array *a = new esoap::Array( "outputStructArray" );
for( size_t i = 0; i < p->getParameterCount(); i++ )
{
esoap::Parameter *a_i = mdata->in()->getRealParameter( p->getParameter( i ) );
esoap::Parameter *data = new esoap::Parameter( "outputStruct" );
esoap::Parameter *param;
// handle each parameter of the struct ...
param = a_i->getParameter( "varString" );
if( !param )
{
mdata->out()->setFault( esoap::Fault::Server, "ERROR: missing struct member: varString" );
delete data;
delete a;
return 0;
}
esoap::String s = param->getString();
data->addString( "varString", s.c_str() );
// handle each parameter of the struct ...
param = a_i->getParameter( "varInt" );
if( !param )
{
mdata->out()->setFault( esoap::Fault::Server, "ERROR: missing struct member: varInt" );
delete data;
delete a;
return 0;
}
int j = param->getInteger();
data->addInteger( "varInt", j );
// handle each parameter of the struct ...
param = a_i->getParameter( "varFloat" );
if( !param )
{
mdata->out()->setFault( esoap::Fault::Server, "ERROR: missing struct member: varFloat" );
delete data;
delete a;
return 0;
}
float f = param->getFloat();
data->addFloat( "varFloat", f );
a->addParameter( data );
}
// add extra namespace to the envelope...
mdata->out()->addAttribute( "xmlns:ns1", "http://soapinterop.org/xsd" );
a->setType( "ns1:SOAPStruct[]" );
resp->addParameter( a );
return 0;
}
/**
* Receives one string and echoes it back to the caller.
*/
int echoDate( esoap::MethodDataBlock *mdata )
{
SYSLOG( "Method: echoDate()\n" );
// let's access the parameters...
esoap::Method *m = mdata->in()->getMethod();
esoap::Parameter *p = m->getParameter( 0 );
// check if we have a parameter, and it is the only one
if( !p )
{
mdata->out()->setFault( esoap::Fault::Server, "ERROR: missing input string" );
return 0;
}
// check if it is the only one
if( m->getParameterCount() > 1 )
{
mdata->out()->setFault( esoap::Fault::Server,
"ERROR: too many parameters =%d", m->getParameterCount() );
return 0;
}
// seems to be ok.
time_t t = p->getTimeInstant();
esoap::Method *resp = mdata->out()->setMethod( "e:echoDateResponse", INTEROP_NS_URI );
resp->addTimeInstant( "outputDate", t );
return 0;
}
/**
* Receives one string and echoes it back to the caller.
*/
int echoBase64( esoap::MethodDataBlock *mdata )
{
SYSLOG( "Method: echoBase64()\n" );
// let's access the parameters...
esoap::Method *m = mdata->in()->getMethod();
esoap::Parameter *p = m->getParameter( 0 );
// check if we have a parameter, and it is the only one
if( !p )
{
mdata->out()->setFault( esoap::Fault::Server, "ERROR: missing input string" );
return 0;
}
// check if it is the only one
if( m->getParameterCount() > 1 )
{
mdata->out()->setFault( esoap::Fault::Server,
"ERROR: too many parameters =%d", m->getParameterCount() );
return 0;
}
const char *b = 0;
unsigned long len = 0;
if( !p->decode( &b, &len ) )
{
mdata->out()->setFault( esoap::Fault::Server,
"ERROR: error decoding Base64" );
return 0;
}
esoap::Method *resp = mdata->out()->setMethod( "e:echoBase64Response", INTEROP_NS_URI );
resp->addBinary( "outputBase64", b, len );
delete [] ( char *)b;
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -