nusoapを使用してPHPWebサービスを作成しました
$namespace="http:/mynamespace.com/mynamespace"
$server = new soap_server();
$server->debug_flag = false;
$server->configureWSDL("test", $namespace);
$server->wsdl->schemaTargetNamespace = $namespace;
$server->wsdl->addComplexType(
'Products',
'complexType',
'struct',
'all',
'',
array('ID' => array('name' => 'ID','type' => 'xsd:int'),
'ProductName' => array('name' => 'ProductName','type' => 'xsd:string'),
'ImageUrl' => array('name' => 'ImageUrl','type' => 'xsd:string')
)
);
$server->wsdl->addComplexType(
'ProductsArray',
'complexType',
'array',
'',
'SOAP-ENC:Array',
array(),
array(
array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:Products[]')
),
'tns:Products'
);
$server->register('GetProductDetails', // method name
array('AgentId' => 'xsd:string'), // input parameters
array('return' => 'tns:ProductsArray'), // output parameters
$namespace, // namespace
$namespace . '#GetProductDetails', // soapaction
'rpc', // style
'sequence', // use
'Get Product Details' // documentation
);
function GetProductDetails($AgentId)
{
$productArray = array();
$sqlQry="SELECT pr.products_id, pr.products_image, pd.products_name FROM `products` pr left join products_description pd on pr.products_id=pd.products_id";
$result=mysql_query($sqlQry);
while($row=mysql_fetch_array($result)){
$product=array();
$product["ID"]=$row['products_id'];
$product["ProductName"]=$row['products_name'];
$product["ImageUrl"]=$row['products_image'];
$productArray[]=$product;
}
return $productArray;
}
$HTTP_RAW_POST_DATA = isset($GLOBALS['HTTP_RAW_POST_DATA'])?$GLOBALS['HTTP_RAW_POST_DATA'] : '';
$server->service($HTTP_RAW_POST_DATA);
そして私はアンドロイドで次のような応答を得ています
[Products{ID=29; Name=product1; Url=product1.jpg; }, Products{ID=30; Name=product2; Url=product2.jpg; }]
この応答はの1つの要素にresponse.getProperty(0)
あり、このコードをhttp://jsonviewer.stack.hu/サイトに貼り付けると、有効なjsonではないことがわかります。nusoapは初めてなので、これによってjsonがどのように提供されるかわかりません。 / XML応答コードに問題はありますか?私もAndroidコードを試しました:
SoapObject response = (SoapObject) envelope.bodyIn;
SoapObject nameResult = (SoapObject) response.getProperty(0);
上記nameResult
では、1つのプロパティですべての応答を取得しています。