在 nusoap 中返回数组的数组
Returning array of array in nusoap
我正在使用 NUSOAP 在 PHP 中开发 Web 服务,并且我找到了 return 数组的方法。
但是我想做的是 return 一个包含数组的数组。
我正在尝试 return 的数组示例:
$return = array(
'lastName' => "Dupond",
'firstName' => array("Bryan", "Michael"),
'nationality' => "NA",
'gender' => "M"
);
实际上,当我 return 这个数组时,我得到了 "unable to serialize result" 错误。
我确定这是因为它不理解 firstName 中的数组。
我的代码实际上是什么样的:
function hello($name, $firstname)
{
$lastName = "Name";
$firstName = array("firstName1","firstName2");
$nationality = "NA";
$gender = "M";
$return= array(
'lastName' => $lastName,
'firstName' => $firstName,
'nationality' => $nationality,
'gender' => $gender
);
return $return;
}
$server = new soap_server();
$server->configureWSDL("CallHello", "urn:CallHello");
$server->wsdl->addComplexType(
'Game', // the type's name
'complexType',
'struct',
'all',
'',
array(
'lastName' => array('name'=>'test','type'=>'xsd:string'),
'firstName' => array('name'=>'test','type'=>'tns:test'),
'nationality' => array('name'=>'test','type'=>'xsd:string'),
'gender' => array('name'=>'test','type'=>'xsd:string'),
)
);
$server->wsdl->addComplexType(
'test', // the type's name
'complexType',
'struct',
'all',
'',
array(
array('name'=>'firtsname1','type'=>'xsd:string'),
array('name'=>'firstname2','type'=>'xsd:string')
)
);
$server->wsdl->addComplexType(
'Games',
'complexType',
'array',
'',
'SOAP-ENC:Array',
array(),
array(
array(
'ref'=>'SOAP-ENC:arrayType',
'wsdl:arrayType'=>'tns:Game[]'
)
),
'tns:Game'
);
$server->register("hello",
array("name" => "xsd:string","firstname" => "xsd:xml"),
array("return" => "tns:Game"),
"urn:CallHello",
"urn:CallHello#hello",
"rpc",
"encoded",
"Get a Person Data");
//$server->service('php://input');
$server->service($HTTP_RAW_POST_DATA);
这是我的 wsdl 相关部分的样子:
<xsd:complexType name="Game">
<xsd:all>
<xsd:element name="lastName" type="xsd:string"/>
<xsd:element name="firstName" type="tns:test"/>
<xsd:element name="nationality" type="xsd:string"/>
<xsd:element name="gender" type="xsd:string"/>
</xsd:all>
</xsd:complexType>
我也希望它看起来像:
<xsd:complexType name="Game">
<xsd:all>
<xsd:element name="lastName" type="xsd:string"/>
<xsd:complexType name="firstName">
<xsd:all>
<xsd:element name="firstName1" type="xsd:string"/>
<xsd:element name="firstName2" type="xsd:string"/>
</xsd:all>
</xsd:complexType>
<xsd:element name="nationality" type="xsd:string"/>
<xsd:element name="gender" type="xsd:string"/>
</xsd:all>
</xsd:complexType>
我不得不想办法。
这 :
$server->wsdl->addComplexType(
'test', // the type's name
'complexType',
'struct',
'all',
'',
array(
array('name'=>'firtsname1','type'=>'xsd:string'),
array('name'=>'firstname2','type'=>'xsd:string')
));
必须像这样:(添加与标签同名的索引)
$server->wsdl->addComplexType(
'test', // the type's name
'complexType',
'struct',
'all',
'',
array(
'firstName1' => array('name'=>'firstName1','type'=>'xsd:string'),
'firstName2' => array('name'=>'firstName2','type'=>'xsd:string')
)
);
并且我在响应中的数组必须采用相同的格式。
这不是我想要的,但它按预期工作。
我正在使用 NUSOAP 在 PHP 中开发 Web 服务,并且我找到了 return 数组的方法。 但是我想做的是 return 一个包含数组的数组。 我正在尝试 return 的数组示例:
$return = array(
'lastName' => "Dupond",
'firstName' => array("Bryan", "Michael"),
'nationality' => "NA",
'gender' => "M"
);
实际上,当我 return 这个数组时,我得到了 "unable to serialize result" 错误。 我确定这是因为它不理解 firstName 中的数组。
我的代码实际上是什么样的:
function hello($name, $firstname)
{
$lastName = "Name";
$firstName = array("firstName1","firstName2");
$nationality = "NA";
$gender = "M";
$return= array(
'lastName' => $lastName,
'firstName' => $firstName,
'nationality' => $nationality,
'gender' => $gender
);
return $return;
}
$server = new soap_server();
$server->configureWSDL("CallHello", "urn:CallHello");
$server->wsdl->addComplexType(
'Game', // the type's name
'complexType',
'struct',
'all',
'',
array(
'lastName' => array('name'=>'test','type'=>'xsd:string'),
'firstName' => array('name'=>'test','type'=>'tns:test'),
'nationality' => array('name'=>'test','type'=>'xsd:string'),
'gender' => array('name'=>'test','type'=>'xsd:string'),
)
);
$server->wsdl->addComplexType(
'test', // the type's name
'complexType',
'struct',
'all',
'',
array(
array('name'=>'firtsname1','type'=>'xsd:string'),
array('name'=>'firstname2','type'=>'xsd:string')
)
);
$server->wsdl->addComplexType(
'Games',
'complexType',
'array',
'',
'SOAP-ENC:Array',
array(),
array(
array(
'ref'=>'SOAP-ENC:arrayType',
'wsdl:arrayType'=>'tns:Game[]'
)
),
'tns:Game'
);
$server->register("hello",
array("name" => "xsd:string","firstname" => "xsd:xml"),
array("return" => "tns:Game"),
"urn:CallHello",
"urn:CallHello#hello",
"rpc",
"encoded",
"Get a Person Data");
//$server->service('php://input');
$server->service($HTTP_RAW_POST_DATA);
这是我的 wsdl 相关部分的样子:
<xsd:complexType name="Game">
<xsd:all>
<xsd:element name="lastName" type="xsd:string"/>
<xsd:element name="firstName" type="tns:test"/>
<xsd:element name="nationality" type="xsd:string"/>
<xsd:element name="gender" type="xsd:string"/>
</xsd:all>
</xsd:complexType>
我也希望它看起来像:
<xsd:complexType name="Game">
<xsd:all>
<xsd:element name="lastName" type="xsd:string"/>
<xsd:complexType name="firstName">
<xsd:all>
<xsd:element name="firstName1" type="xsd:string"/>
<xsd:element name="firstName2" type="xsd:string"/>
</xsd:all>
</xsd:complexType>
<xsd:element name="nationality" type="xsd:string"/>
<xsd:element name="gender" type="xsd:string"/>
</xsd:all>
</xsd:complexType>
我不得不想办法。 这 :
$server->wsdl->addComplexType(
'test', // the type's name
'complexType',
'struct',
'all',
'',
array(
array('name'=>'firtsname1','type'=>'xsd:string'),
array('name'=>'firstname2','type'=>'xsd:string')
));
必须像这样:(添加与标签同名的索引)
$server->wsdl->addComplexType(
'test', // the type's name
'complexType',
'struct',
'all',
'',
array(
'firstName1' => array('name'=>'firstName1','type'=>'xsd:string'),
'firstName2' => array('name'=>'firstName2','type'=>'xsd:string')
)
);
并且我在响应中的数组必须采用相同的格式。 这不是我想要的,但它按预期工作。