Konfiguration vom SOAP-Envelope

W

waltraud28

Grünschnabel
Hallo,
ich verwende für einen SOAP-Webservice das Perl Package Soap::Lite 060a-26.

Mein aktueller Soap-Request sieht so aus:

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

<SOAP-ENV:Body>
<namesp1rocessSyncRequest xmlns:namesp1="http://server.webservice.gws.common.tsystems.com/">
<credentials xsi:type="xsd:string">gwsdbip</credentials>
<systemId xsi:type="xsd:string">ODBIP</systemId>

<requestAsXml xsi:type="xsd:string">
&amp;amp;lt;gws:ODBIP_INFO xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:gws="http://www.t-systems.com/gws-odbip"
xsi:schemaLocation="http://kepler.dts.telekom.de/spims/WEB-INF/interfaces-ipls-
rot/gws-odbip.xsd"&amp;gt;

&amp;lt;GET_IP_ADDRESS_RANGE&amp;gt;
&amp;lt;TECHNICAL_ID&amp;gt;SIMULATION&amp;lt;/TECHNICAL_ID&amp;gt;
&amp;lt;BUSINESS_CASE&amp;gt;CANCEL&amp;lt;/BUSINESS_CASE&amp;gt;
&amp;lt;PRODUCT&amp;gt;VPN-Service&amp;lt;/PRODUCT&amp;gt;
&amp;lt;VRF_NAME&amp;gt;221171&amp;lt;/VRF_NAME&amp;gt;
&amp;lt;IPLS_POOL_TYPE&amp;gt;WAN&amp;lt;/IPLS_POOL_TYPE&amp;gt;
&amp;lt;DEVICE_NAME&amp;gt;de-rve-heus-ce-01&amp;lt;/DEVICE_NAME&amp;gt;
&amp;lt;FIRST_IP_ADDRESS&amp;gt;10.207.128.128&amp ;lt;/FIRST_IP_ADDRESS&amp;gt;
&amp;lt;/GET_IP_ADDRESS_RANGE&amp;gt;

&amp;amp;lt;/gws:ODBIP_INFO&amp;gt;

</requestAsXml>

<requestId xsi:type="xsd:int">123456789</requestId>
</namesp1rocessSyncRequest>
</SOAP-ENV:Body>

</SOAP-ENV:Envelope>

Innerhalb des Envelopes befindet sich als Attribut die Information SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"

Meine Frage ist, ob und wenn ja ich Perl-Soap::Lite so konfigurieren kann, daß die obige encodingStyle-Information nicht mit angegeben wird oder der Wert auf "" gesetzt wird !!??

Kann mir da jemand weiterhelfen ?

Schöne Grüße
waltraud28
 
Hast du einen triftigen Grund dafür?

Den Encoding-Style wegzulassen ist bad practice.....
 
Hallo,


ich habe zwar keine Ahnung von Soap, aber das XML Schema besagt, dass encodingStyle vom Typ anyURI sein muss. Dieser muss damit den RFCs 2396 und/oder 2732 entsprechen. Den Attributwert leer zu lassen, wäre also falsch und unsinnig sowieso.

Darf ich fragen, wieso ein Attribut, das definiert, nach welchem Schema die beinhalteten Daten kodiert sind, nicht obligatorisch ist, ist das so "gewachsen"?

Code:
<namesp1rocessSyncRequest xmlns:namesp1="http://server.webservice.gws.common.tsystems.com/" />
Schaut für mich aus wie ein Typo. Sollte das nicht <namesp1:processSyncRequest /> lauten?


cu
 
Hallo,

ich bekomme als SOAP-Response die Fehlermeldung "Reference not allowed in Prolog".

Die Verantwortlichen für den SOAP-Server meinen, daß diese Fehlermeldung im Zusammenhang mit dem encodingStyle steht.

Jetzt suche ich nach einer Möglichkeit, wie ich selbst einen encodingStyle definieren kann. Es ist nachvollziehbar, daß es eigentlich Unsinn ist, einen encodingStyle wegzulassen, aber ich habe da einfach gedacht, wie ich diese Information aus der XML-Struktur bekomme.

Schöne Grüße
waltraud28
 
nee, leider nicht.

Im eigentlichen Perl-Skript sieht es folgendermaßen aus:

my $value = "
&lt;gws:ODBIP_INFO&gt;
&lt;GET_IP_ADDRESS_RANGE&gt;
&lt;TECHNICAL_ID&gt;SIMULATION&lt;/TECHNICAL_ID&gt;
&lt;BUSINESS_CASE&gt;CANCEL&lt;/BUSINESS_CASE&gt;
&lt;PRODUCT&gt;VPN-Service&lt;/PRODUCT&gt;
&lt;VRF_NAME&gt;221171&lt;/VRF_NAME&gt;
&lt;IPLS_POOL_TYPE&gt;WAN&lt;/IPLS_POOL_TYPE&gt;
&lt;DEVICE_NAME&gt;de-rve-heus-ce-01&lt;/DEVICE_NAME&gt;
&lt;FIRST_IP_ADDRESS&gt;10.207.128.128&lt;/FIRST_IP_ADDRESS&gt;
&lt;/GET_IP_ADDRESS_RANGE&gt;
&lt;/gws:ODBIP_INFO&gt;
";

my $func_call = $soap->processSyncRequest(
SOAP::Data->name('credentials' => 'gws:odbip')->type('string'),
SOAP::Data->name('systemId' => 'ODBIP')->type('string'),
SOAP::Data->name('requestAsXml' => $value)->attr(
{
'xmlns:xsi'=>"http://www.w3.org/2001/XMLSchema-instance",
'xmlns:gws'=>"http://www.t-systems.com/gws-odbip",
'xsi:schemaLocation'=>"http://kepler.dts.telekom.de/spims/WEB-INF/xsd/gws-odbip.xsd"
}
)->type('string'),
SOAP::Data->name('requestId' => '123456789')->type('int'),
);

Der Fehler bezieht sich immer auf requestAsXml. Ich vermute, daß trotz der Typ-Angabe "string" der Webservice das requestAsXml-Tag als eigenes XML-Objekt betrachtet, da sich die Fehlerangabe immer auf dieses Tag bezieht.

Es handelt sich dabei um einen Java-basierenden Webservice.
 
Hallo,

setz das Zeug mal bitte in code-Tags. Das ist sonst sehr schwer zu lesen.
Vielleicht verstehe ich da ja etwas falsch, aber sollten die Namepsaces xsi und gws aus
Code:
SOAP::Data->name('requestAsXml' => $value)->attr(
    {
    'xmlns:xsi'=>"http://www.w3.org/2001/XMLSchema-instance",
    'xmlns:gws'=>"http://www.t-systems.com/gws-odbip",
    'xsi:schemaLocation'=>"http://kepler.dts.telekom.de/spims/WEB-INF/xsd/gws-odbip.xsd"
    }
)->type('string'),
nicht direkt in $value stehen? Wenn der Code wirklich die Ausgabe aus deinem ersten Post erzeugt, würden die Inhalte von $value ja in der Tat schon vor dem verschicken durch Perl-SOAP::lite als XML-Objekt interpretiert, weil dort ja die Namespaces korrekt zugewiesen sind. $value sollte nach meinem Verständnis von XML ja eigentlich unangetastet bleiben.
Code:
my $value = "
&lt;gws:ODBIP_INFO&amp;xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"&amp;xmlns:gws="http://www.t-systems.com/gws-odbip"&amp;xsi:schemaLocation="http://kepler.dts.telekom.de/spims/WEB-INF/xsd/gws-odbip.xsd"&gt;
 &lt;GET_IP_ADDRESS_RANGE&gt;
  &lt;TECHNICAL_ID&gt;SIMULATION&lt;/TECHNICAL_ID&gt;
  &lt;BUSINESS_CASE&gt;CANCEL&lt;/BUSINESS_CASE&gt;
  &lt;PRODUCT&gt;VPN-Service&lt;/PRODUCT&gt;
  &lt;VRF_NAME&gt;221171&lt;/VRF_NAME&gt;
  &lt;IPLS_POOL_TYPE&gt;WAN&lt;/IPLS_POOL_TYPE&gt;
  &lt;DEVICE_NAME&gt;de-rve-heus-ce-01&lt;/DEVICE_NAME&gt;
  &lt;FIRST_IP_ADDRESS&gt;10.207.128.128&lt;/FIRST_IP_ADDRESS&gt;
 &lt;/GET_IP_ADDRESS_RANGE&gt;
&lt;/gws:ODBIP_INFO&gt;
";

SOAP::Data->name('requestAsXml' => $value)->type('string'),

Kann aber auch Käse sein.
 
Zuletzt bearbeitet:
Zurück
Oben