[Gelöst] Problem mit SOAP-Webservice und Umlauten

Bild Microsoft Dynamics NAV 2016

[Gelöst] Problem mit SOAP-Webservice und Umlauten

Beitragvon niehaves » 7. März 2019 10:07

Ich habe einen SOAP-Webservice in NAV 2016 erstellt, mit dem eine Methode aufgerufen werden kann, der einen Parameter als BigText-Variable enthält. Über diesen Parameter kann eine XML-Struktur übergeben werden. Das Problem tritt auf, wenn ein XML-Element als Wert einen String mit Umlauten enthält, wie folgendes Beispiel zeigt:

Variablen:
Code: Alles auswählen
TempBlob      Record          TempBlob (Tabelle zur temporären Nutzung mit Primary Key und einem Blob-Feld)
writeStream   OutStream
readStream    InStream
XMLDOM        DotNet          System.Xml.XmlDocument...


C/AL-Code der Funktion "ImportXML (XMLFile : BigText) : Text[250]" (ist in einer Codeunit enthalten und wird per Webservice aufgerufen):
Code: Alles auswählen
IF ISNULL(XMLDOM) THEN
  XMLDOM := XMLDOM.XmlDocument();
TempBlob.Blob.CREATEOUTSTREAM(writeStream);
XMLFile.WRITE(writeStream);
TempBlob.INSERT;
TempBlob.CALCFIELDS(TempBlob.Blob);
TempBlob.Blob.CREATEINSTREAM(readStream);
XMLDOM.Load(readStream);


Die XML-Struktur, die per Parameter "XMLFile" in obiger Funktion ĂĽbergeben wird, sieht (gekĂĽrzt) so aus:
Code: Alles auswählen
<Bestellung>
  <Kreditor>12345</Kreditor>
  <Nr.>789</Nr.>
  <Name>MĂĽller</Name>
</Bestellung>


Wenn ich jetzt die XML-Struktur in einen SOAP-Envelope einbette und per SoapUI an den NAV-Webservice sende, erhalte ich als Response folgende Fehlermeldung:
Fehler bei einem Aufruf von System.Xml.XmlDocument.Load mit folgender Meldung: UngĂĽltiges Zeichen in der angegebenen Codierung. Zeile 4, Position 10.



Wenn ich der XML-Struktur folgende Zeile mit einer Zeichenkodierung voranstelle, erhalte ich die Fehlermeldung nicht:
<?xml version="1.0" encoding="ISO-8859-1"?>


Das Problem ist, dass ich nicht bestimmen kann, dass die Zeile in der XML-Struktur enthalten ist, da sie von "dritter Seite" geliefert wird und sie standardmäßig nicht enthalten ist.


Meine Frage ist nun, wie ich das Problem in Navision abfangen kann. Kann ich eventuell herausfinden, welche Zeichenkodierung Navision verwendet, damit ich die oben dargestellt Zeile mit der entsprechenden Zeichenkodierung selbst einfĂĽgen kann? Ich bin ĂĽber jeden Hinweis dankbar.
Zuletzt geändert von niehaves am 8. März 2019 17:23, insgesamt 1-mal geändert.
niehaves
 
Beiträge: 12
Registriert: 18. Mai 2018 08:58
Wohnort: MĂĽnchen
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics 365
Microsoft Dynamics Version: Business Central

Re: Problem mit SOAP-Webservice und Umlauten

Beitragvon HattrickHorst » 8. März 2019 12:58

Drei Ansätze bzw. Tipps dazu:
  • Du solltest dem Drittanbieter dein Problem schildern und ihn a) nach dem Encoding fragen und b) inwiefern er das Encoding im XML voranstellen kann (so wie es im Ăśbrigen auch Standard sein sollte).
  • Beim Stream Create gibt es einen weiteren optionalen Parameter, mit dem man das Encoding bestimmen kann.
  • Neben Load gibt es auch LoadXML.
HattrickHorst
 
Beiträge: 585
Registriert: 15. Januar 2009 19:32
Wohnort: Bochum
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 2.00C - heute

Re: Problem mit SOAP-Webservice und Umlauten

Beitragvon niehaves » 8. März 2019 17:21

Danke fĂĽr die Hinweise. Ich setze jetzt, nach Absprache mit dem Drittanbieter, das Encoding voraus und verwende dazu den optionalen Parameter im "CreateOutstream"-Befehl wie folgt:
Code: Alles auswählen
TempBlob.Blob.CREATEOUTSTREAM(writeStream,TEXTENCODING::UTF8);
niehaves
 
Beiträge: 12
Registriert: 18. Mai 2018 08:58
Wohnort: MĂĽnchen
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics 365
Microsoft Dynamics Version: Business Central

Re: [Gelöst] Problem mit SOAP-Webservice und Umlauten

Beitragvon Kowa » 9. März 2019 11:54

Dann sollte die erste Zeile in der XML beim Encoding aber auch dahingehend angepasst werden, denn ISO 8859-1 und UTF-8 sind verschiedene Kodierungen. Das fällt nicht unbedingt sofort auf, bei Sonderzeichen aber schon weil die ISO-Codepage hier den dortigen beschränkten Zeichenvorrat mit einem Byte abbildet, UTF-8 hier den gesamten Unicodezeichenvorrat mit mindestens 2 Bytes anbietet (und max. 4 Bytes bei exotischen Zeichen).
GruĂź, Kai

Frage beantwortet? Schreibe bitte [Gelöst] vor den Titel des ersten Beitrags.
Bitte erst suchen, dann fragen. Bitte beachte den kleinen Community-Knigge.
Kein Support per PN, Mail, Messenger oder Telefon! DafĂĽr ist dieses Forum da.

Download: Dynamics NAV Object Text Explorer (Alternativlink). MVP Alumni
Benutzeravatar
Kowa
Moderator
Moderator
 
Beiträge: 7835
Registriert: 17. Juni 2005 17:32
Wohnort: Bremen
Realer Name: Kai Kowalewski
Arbeitsort: Osterholz-Scharmbeck
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics 365
Microsoft Dynamics Version: BC, NAV 2018 bis Navision 2.01


ZurĂĽck zu NAV 2016

Wer ist online?

Mitglieder in diesem Forum: Google [Bot] und 1 Gast