0

NuSOAPを使用して動作するwebServiceがあります。ここで、要求されたデータを返す前に検証を行う必要があります。すべて問題がなければ、通常どおりに返します。それ以外の場合は、要求された情報を提供しない理由を説明する文字列メッセージを返します。問題は、NuSOAPのRegisterFunctionに2つの異なるタイプのリターンを追加できないことです。ComplexTypeをreturnとして追加すると、Stringを返すことができません。

4

2 に答える 2

2

関数は2つの戻り値を持つことはできません。複合型にerror-message-stringを追加する必要があります。複合型に触れたくない場合は、データ型と文字列を含む別の複合型を作成する必要があります。

例-現在使用している複合型:

$server->wsdl->addComplexType('myData','complexType','struct','all','',
    array(  'important'  => array('name' => 'important','type' => 'xsd:string'),
            'stuff'      => array('name' => 'stuff','type' => 'xsd:string')
    )
);

余分な複雑なタイプ:

$server->wsdl->addComplexType('package','complexType','struct','all','',
    array(  'data'      => array('name' => 'data','type' => 'tns:myData'),
            'errormsg'  => array('name' => 'errormsg','type' => 'xsd:string')
    )
);

機能の登録:

$server->register(
                'getData',     
                array('validation'=>'xsd:string'), 
                array('return'=>'tns:package'),
                $namespace,
                false,
                'rpc',
                'encoded',
                'description'
);

関数:

function GetData($validation)
{
    if($validation == "thegoodguy") {
        $result['data'] = array(
            "important"    => "a top secret information",
            "stuff"        => "another one"
        );
        $result['errormsg'] = null;
    } else {
        $result['data'] = null;
        $result['errormsg'] = "permission denied!";
    }
    return $result;
}

そうすれば、クライアントは受信したデータの分析を試みることができ、それがnullの場合、エラーメッセージが表示されます。

于 2013-01-07T13:49:06.627 に答える
0

最初に、次のように文字列の配列を記述する新しい型を定義する必要があります。

$server->wsdl->addComplexType(
  'ArrayOfString',
  'complexType',
  'array',
  'sequence',
  '',
  array(
    'itemName' => array(
      'name' => 'itemName', 
      'type' => 'xsd:string',
      'minOccurs' => '0', 
      'maxOccurs' => 'unbounded'
    )
  )
);

次に、戻りタイプとしてtns:ArrayOfStringを使用できます。

于 2012-12-22T05:40:16.940 に答える