问题创建了SOAP :: Lite Perl Web服务客户端

时间:2013-07-30 12:50:56

标签: perl soap soap-client

我正在使用SOAP :: Lite来创建Web服务客户端。第一个XML数据包是Java Testing GUI发送的。它收到正确的答复。

第二个是我的Perl客户端发送的XML数据包(根据SOAP :: Lite调试输出),我从服务器收到的响应是所有输入的参数(hostnameFQ等)都是空的。< / p>

<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Header/>

<S:Body>
    <ns2:postEvent xmlns:ns2="http://ws.health.server/">
        <hostnameFQ>a</hostnameFQ>
        <eventLabel>b</eventLabel>
        <deviceInst>c</deviceInst>
        <severity>d</severity>
        <message>e</message>
        <eventSource>f</eventSource>
    </ns2:postEvent>
</S:Body>
</S:Envelope>

<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" 
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">

<soap:Body>
    <postEvent xmlns="http://ws.health.server/">
        <hostnameFQ>a</hostnameFQ>
        <eventLabel>b</eventLabel>
        <deviceInst>c</deviceInst>
        <severity>d</severity>
        <message>e</message>
        <eventSource>f</eventSource>
    </postEvent>
</soap:Body>
</soap:Envelope>

他们看起来和我一样......所以我不太确定发生了什么。

这是我的Perl代码,如果这有用:

my $EVENT_LISTENER_PROXY = "http://localhost:8080/EventListener/EventListener"; 

my $soap = SOAP::Lite->new( proxy => $EVENT_LISTENER_PROXY);
$soap->on_action( sub { "http://ws.health.server/#postEvent" });
$soap->autotype(0);
$soap->default_ns('http://ws.health.server/');

my $som = $soap->call("postEvent",
SOAP::Data->name('hostnameFQ')->value( "a" ),
SOAP::Data->name('eventLabel')->value( "b" ),
SOAP::Data->name('deviceInst')->value( "c" ),
SOAP::Data->name('severity')->value( "d" ),
SOAP::Data->name('message')->value( "e" ),
SOAP::Data->name('eventSource')->value( "f" )
);

有人有什么想法吗?

1 个答案:

答案 0 :(得分:0)

好的,由于某种原因,服务器不喜欢使用默认命名空间值的XML输入。我改变了:

$soap->default_ns('http://ws.health.server/');

$soap->ns('http://ws.health.server/');

它有效。