2012-11-23 46 views
2

我有一個帶有NuSoap的Webservice WSDL。我在CodeIgniter中使用它。我有與contexttype數組返回問題。這是我的PHP代碼:NuSoap返回complexType數組不正確?

$this->nusoap_server->wsdl->addComplexType(
        "getJobStatusByIdsResponse", 
        "complexType", 
        "array", 
        "all", 
        "SOAP-ENC:Array", 
        array(), 
        array(
         'Job' => array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:jobStatusResponse[]', 'minOccurs'=>'1', 'maxOccurs'=>'unbounded') 
        ), 
        'tns:jobStatusResponse' 
       ); 


$this->nusoap_server->wsdl->addComplexType(
        "getJobStatusByIdsResponse", 
        "complexType", 
        "array", 
        "all", 
        "SOAP-ENC:Array", 
        array(), 
        array(
         'Job' => array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:jobStatusResponse[]', 'minOccurs'=>'1', 'maxOccurs'=>'unbounded') 
        ), 
        'tns:jobStatusResponse' 
       ); 

$this->nusoap_server->register(
        "getJobStatusByIds", 
        array('getJobStatusByIdsRequest' => 'tns:getJobStatusByIdsRequest'), 
        array('getJobStatusByIdsResponse' => 'tns:getJobStatusByIdsResponse'), 
        false, 
        false, 
        "rpc", 
        "literal", 
        "get JobStatus By Ids" 
); 

function getJobStatusByIds($data) { 
    return array(array('orderId' => '1000', 'jobStatus' => '5'),array('orderId' => '1001', 'jobStatus' => '3'),array('orderId' => '1002', 'jobStatus' => '7')) 
} 

我得到這個作爲返回:

 <ns1:getJobStatusByIdsResponse xmlns:ns1="http://schemas.xmlsoap.org/soap/envelope/"> 
     <getJobStatusByIdsResponse> 
      <item> 
       <orderId>1001</orderId> 
       <jobStatus>5</jobStatus> 
      </item> 
      <item> 
       <orderId>1002</orderId> 
       <jobStatus>3</jobStatus> 
      </item> 
      <item> 
       <orderId>1003</orderId> 
       <jobStatus>7</jobStatus> 
      </item> 
     </getJobStatusByIdsResponse> 
     </ns1:getJobStatusByIdsResponse> 

可不是嗎,是不是?

我怎樣才能得到它像這樣(「工作」而不是「項目」):

<ns1:getJobStatusByIdsResponse xmlns:ns1="http://schemas.xmlsoap.org/soap/envelope/"> 
    <getJobStatusByIdsResponse> 
     <Job> 
      <orderId>1001</orderId> 
      <jobStatus>5</jobStatus> 
     </Job> 
     <Job> 
      <orderId>1002</orderId> 
      <jobStatus>3</jobStatus> 
     </Job> 
     <Job> 
      <orderId>1003</orderId> 
      <jobStatus>7</jobStatus> 
     </Job> 
    </getJobStatusByIdsResponse> 
    </ns1:getJobStatusByIdsResponse> 

誰我能幫忙嗎? 我在哪裏可以找到更多NuSoap的例子?

回答

0

希望這會有所幫助。

添加了代碼註釋以幫助那些無法手動記住NuSoap參數的用戶。

$this->nusoap_server->register(
        "getJobStatusByIds",               // method name 
        array('getJobStatusByIdsRequest' => 'tns:getJobStatusByIdsRequest'),   // input params 
        array('getJobStatusByIdsResponse' => 'tns:getJobStatusByIdsResponse'),   // output params 
        false,                   // namespace 
        false,                   // soap action 
        "rpc",                   // style 
        "literal",                  // use 
        "get JobStatus By Ids"               // documentation 
); 

我認爲響應的定義應該看起來像這樣。

// Job Status Result Complex Type (output) 
$this->nusoap_server->wsdl->addComplexType(
         "getJobStatusByIdsResponse", 
         "complexType", 
         "struct", 
         "all", 
         "SOAP-ENC:Array", 
         array('Job' => array('orderId' => 'your value here', jobStatus => 'your value here')), 
    );