2015-10-09 137 views
2

我正在嘗試使用SOAP :: Lite編寫SOAP服務器來與現有的soap客戶端(特別是tr-069 dsl調制解調器)一起工作,但尚不清楚傳入xml觸發器的調用方式。肥皂清單郵件列表主持人對將我添加到他們的清單速度緩慢,所以我想我會看到是否有人在這裏可以幫助我指向正確的方向...Perl SOAP :: Lite服務器基礎知識

對於初學者,我得到:

<faultstring>Unrecognized header has mustUnderstand attribute set to 'true'</faultstring> 

我懷疑這意味着我沒有定義一個函數來處理它想要處理的東西。處理程序代碼(基於例如在SOAP ::服務器手冊頁):

SOAP::Transport::HTTP::CGI 
    ->dispatch_to('PeakACS') 
    ->handle; 
BEGIN { 
    package PeakACS; 
    use vars qw(@ISA); 
    @ISA = qw(Exporter SOAP::Server::Parameters); 
    use SOAP::Lite; 

    my $debugging = 1; 
    my $console = 0; 
    my $prog_id = 'peakacs'; 
    my $log = DebugLog->new($prog_id, $debugging, $console); 
    $log->debug_msg('info', 'handle', '%s', 'handler setup'); 

    sub ID { 
     $log->debug_msg('info', 'id', '%s', 'got an id'); 
    } 

    sub Header { 
     $log->debug_msg('info', 'header', '%s', 'heading'); 
    } 

    sub Inform { 
     $log->debug_msg('info', 'inform', '%s', 'informing'); 
    } 
} 

如果我理解正確的SOAP(這是遠從給定),標籤應轉化爲一個電話通知 - 該XML請求的頂部看起來像:

<SOAP-ENV:Envelope 
    xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" 
    xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:cwmp="urn:dslforum-org:cwmp-1-0"> 
    <SOAP-ENV:Header> 
     <cwmp:ID SOAP-ENV:mustUnderstand="1">1539095918</cwmp:ID> 
    </SOAP-ENV:Header> 
    <SOAP-ENV:Body> 
     <cwmp:Inform> 
     <DeviceId> 

回答

0

如果你想屬性設置的mustUnderstand在頭一些實體,這樣做:

$sheader = SOAP::Header->name('someEntity'); 
$sheader->mustUnderstand(1); 

,並調用一個方法時:

$soap->someMethod($sheader,@request); 

主要生產:

<soap:Header> 
    <someEntity soap:mustUnderstand="1" /> 
</soap:Header> 
+0

這是服務器端,而不是客戶端... – abatie