php allxsd,在PHP中将多维数组传递给soap complexType

博主在尝试通过NuSOAP库在Web服务中传递多维数组时遇到了错误。他们创建了一个复杂的类型来定义邮件票证,并在客户端尝试调用服务,但遇到了XML解析错误。错误提示为'构造函数错误,在第1行解析SOAP有效负载的XML错误:格式不正确(无效令牌)'。最佳答案提供了一个关于如何在NuSOAP中支持多维数组的示例代码。
摘要由CSDN通过智能技术生成

我从邮件服务器上发了一些电子邮件.有一个函数应该拉这些电子邮件并返回一个多维数组.我在客户端Web服务器中使用此数组来为我完成这项工作.我不知道如何将此数组传递给soap complexType.我写了以下代码:

$server->wsdl->addComplexType(

'MailTicket',

'complexType',

'struct',

'all',

'',

array(

'attachment' => array('name' => 'attachment', 'type' => 'xsd:string'),

'body' => array('name' => 'body', 'type' => 'xsd:string'),

'accountID' => array('name' => 'accountID', 'type' => 'xsd:string')

)

);

$server->wsdl->addComplexType(

'MailTicketReturn',

'complexType',

'struct',

'all',

'',

array(

'Done' => array('name' => 'result', 'type' => 'xsd:string')

)

);

// Register the method to expose

$server->register('createMailTicket', // method name

array('mailTicketData' => 'tns:MailTicket'), // input parameters

array('return' => 'tns:MailTicketReturn'), // output parameters

'urn:eticketing', // namespace

'urn:eticketing#createMailTicket', // soapaction

'rpc', // style

'encoded', // use

'create a ticket by mail' // documentation

);

在客户端,我写道:

require_once('nusoap.php');

$wsdlURL="http://127.0.0.1/eticket/ETKWS.php?wsdl";

$client = new nusoap_client($wsdlURL,true);

$client->soap_defencoding = 'UTF-8';

$client->decode_utf8 = false;

$finalArray=Array

(

[attachment] => Array

(

[0] => Array

(

[0] => file1

[1] => file2

)

[1] => Array

(

[0] => file1x

)

)

[body]=>Array

(

[0] => some text

[1] => some other text

)

[accountID] => Array

(

[0] => 5464654

[1] => 4654664

)

)

if(is_array($finalArray)) // creat new tickets

{

$result=$client->call('createMailTicket',$finalArray);

}

$err = $client->getError();

if ($err) {

echo '

Constructor error

' . $err . '
';

echo '

Debug

' . htmlspecialchars($client->getDebug(), ENT_QUOTES) .       '
';

exit();

}

我收到了这个错误:

构造函数错误

在第1行解析SOAP有效负载的XML错误:格式不正确(无效令牌)

最佳答案 NuSOAP支持返回多维数组(xsd:Array)

$server= new nusoap_server();

$namespace = "http://localhost/webservice/";

// create a new soap server

$server = new nusoap_server();

// configure our WSDL

$server->configureWSDL("WebServices212");

// set our namespace

$server->wsdl->schemaTargetNamespace = $namespace;

$server->register(

// method name:

'test',

// parameter list:

array('id'=>'xsd:int'),

// return value(array()):

array('return'=>'xsd:Array'),

// namespace:

$namespace,

// soapaction: (use default)

false,

// style: rpc or document

'rpc',

// use: encoded or literal

'encoded',

// description: documentation for the method

'documentation');

$POST_DATA = isset($GLOBALS['HTTP_RAW_POST_DATA'])

? $GLOBALS['HTTP_RAW_POST_DATA'] : '';

// pass our posted data (or nothing) to the soap service

$server->service($POST_DATA);

客户

client=new nusoap_client("http://localhost/webservice /webservices.php?wsdl");

$client->setCredentials("webadmin","****");

$err = $client->getError();

if ($err) {

echo '

Constructor error

' . $err . '
';

}

$result = $client->call('test', array('id' => '1'));

print_r($result);

如果您从PHP使用Web服务没问题,但在其他语言中存在兼容性问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值