Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]12295[/thread]

SOAP::Lite Request schlaegt fehl

Leser: 4


<< >> 4 Einträge, 1 Seite
sechbeutel
 2008-08-04 14:58
#113067 #113067
User since
2008-08-04
2 Artikel
BenutzerIn
[default_avatar]
Hallo community,

ich bin gerade dabei mich in Perl einzuarbeiten um eine SOAP Schnittstelle an zu steuern.
Ich habe schon einen Javaclient der funktioniert. Daher ist es ein wenig einfacher zu debuggen.

Mein Problem ist folgendes. Wenn ich mit meinem Perlclient einen logonversuch starte bekomme ich vom server folgenden Fehler zurueck:
soap:Server
Found element {http://authorization.xxxx.de/}TMWLogonReq but could not find matching RPC/Literal part

Hier der Perlcode:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#!/usr/bin/perl -w

use strict;
use SOAP::Lite;
use SOAP::Data;
use Digest::MD5 qw(md5_hex);

my $logonData = SOAP::Data->name('TMWLogonReq' => {'version'       => '100',
                                                   'username'      => 'user',
                                                   'password'      => md5_hex('passwd')});

my $method = SOAP::Data->name('logon')
                       ->attr({xmlns => 'http://authorization.xxxx.de/'});

my $result =  SOAP::Lite
               -> uri('http://authorization.xxxx.de/') 
               -> proxy('http://user:passwd@xxxx.de/services/TradeLinkBMAuthorization')                                   
               -> call($method => $logonData);

if($result->fault) {
  print "Fault\n";
  print join("\n", $result->faultcode, $result->faultstring);
  print "\n";
} else {
  print "TRUE\n";
  print $result->result();
  print "\n";
}


Mit dem Java Client wird beim Funktionsaufruf noch ein Namespace angegeben. Ich habe das mal mit
einem wget simmuliert:

Hier die Perlclientsimulation die der Server anscheinend nicht parsen kann:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
POST /services/TradeLinkBMAuthorization HTTP/1.0
User-Agent: Wget/1.9.1
Host: xxxx.de
Accept: */*
Connection: Keep-Alive
Authorization: Basic dmZsddddddVzc2lh
Content-Type: application/x-www-form-urlencoded
Content-Length: 485

<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<logon xmlns="http://authorization.xxxx.de/">
<TMWLogonReq>
<password xsi:type="xsd:string">0359e686d1887ig28dka176013295fe2c</password>
<username xsi:type="xsd:string">user</uuername>
<version xsi:type="xsd:int">100</version>
</TMWLogonReq>
</logon>
</soap:Body>
</soap:Envelope>



HTTP/1.1 500 Internal Server Error
Date: Mon, 04 Aug 2008 09:48:29 GMT
Server: Jetty(6.1.9)
Content-Type: text/xml; charset=utf-8
Content-Length: 311
Connection: close

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<soap:Fault>
<faultcode>soap:Server</faultcode>
<faultstring>Found element {http://authorization.xxxx.de/}TMWLogonReq but could not find matching RPC/Literal part</faultstring>
</soap:Fault>
</soap:Body>
</soap:Envelope>


Und hier die Javaclientsimulation die ohne Probleme geht:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
POST /services/TradeLinkBMAuthorization HTTP/1.0
User-Agent: Wget/1.9.1
Host: xxxx.de
Accept: */*
Connection: Keep-Alive
Authorization: Basic dmddddddzc2lh
Content-Type: application/x-www-form-urlencoded
Content-Length: 494

<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns:logon xmlns:ns="http://authorization.xxxx.de/">
<TMWLogonReq>
<password xsi:type="xsd:string">0359e686d188chdefc7176013295fe2c</password>
<username xsi:type="xsd:string">user</username>
<version xsi:type="xsd:int">100</version>
</TMWLogonReq>
</ns:logon>
</soap:Body>
</soap:Envelope>



HTTP/1.1 200 OK
Date: Mon, 04 Aug 2008 09:51:59 GMT
Server: Jetty(6.1.9)
Content-Type: text/xml; charset=utf-8
SOAPAction: ""
Content-Length: 716
Connection: close

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns1:logonResponse xmlns:ns1="http://authorization.xxxx.de/">
<return>
<branchIDObjectList>
<branchID>FTX</branchID>
</branchIDObjectList>
<branchIDObjectList>
<branchID>CSO</branchID>
</branchIDObjectList>
<branchIDObjectList>
<branchID>DBK</branchID>
</branchIDObjectList>
<branchIDObjectList>
<branchID>ETR</branchID>
</branchIDObjectList>
<code>0</code>
<sessionID>E89D6FA76B57B1ADBD4B9474CFDB88C9BF28B0DF</sessionID>
<userActionObject>
<adminSystemAllowed>false</adminSystemAllowed>
<adminUserAllowed>true</adminUserAllowed>
<tradeAllowed>true</tradeAllowed>
</userActionObject>
</return>
</ns1:logonResponse>
</soap:Body>
</soap:Envelope>


Hat jemand eine Idee wie ich meinen Perlcode aendern koennte damit die Anfrage passt?

Danke und Gruss
renee
 2008-08-04 15:25
#113068 #113068
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ich kenne mich mit dem Modul nicht aus, aber schau Dir mal die Methode use_prefix an...

Oder probier mal als Workaround my $method = SOAP::Data->name('ns:logon')->...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
sechbeutel
 2008-08-04 15:57
#113070 #113070
User since
2008-08-04
2 Artikel
BenutzerIn
[default_avatar]
Hmmm. Im nachhinein komm ich mir schon etwas b.loed vor :-)

Mit folgendem Methodenaufruf gehts:

Code: (dl )
1
2
my $method = SOAP::Data->name('ns:logon')
->attr({'xmlns:ns' => 'http://authorization.xxxx.de/'});


Aber manchmal sieht man den Wald vor lauter Baeumen nicht.

Danke Renee.
kristian
 2008-11-26 21:33
#116635 #116635
User since
2005-04-14
684 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hallo

sechbeutel+2008-08-04 13:57:29--
Hmmm. Im nachhinein komm ich mir schon etwas b.loed vor :-)
Mit folgendem Methodenaufruf gehts:
Code: (dl )
1
2
my $method = SOAP::Data->name('ns:logon')
->attr({'xmlns:ns' => 'http://authorization.xxxx.de/'});

Aber manchmal sieht man den Wald vor lauter Baeumen nicht.
Danke Renee.


Ich glaube, es gibt bei der Thematik keinen Grund "sich blöd vorzukommen".
Blöd ist im Nachhinein doch nur, das man an das System geblaubt hat und die Regeln als verbindlich empfand.

Danke an Dich und Renee für Eure Beiträge, es hat mir sehr geholfen.

Mit freundlichstem Gruß
Kristian
<< >> 4 Einträge, 1 Seite



View all threads created 2008-08-04 14:58.