SOAP Probleme bei UTF-8 und hohen ASCII Zeichen verhindern

English! place to talk about development, programming and coding
Post Reply
hakre
Znuny newbie
Posts: 11
Joined: 14 Aug 2008, 17:39

SOAP Probleme bei UTF-8 und hohen ASCII Zeichen verhindern

Post by hakre »

Die von OTRS eingesetzte SOAP Schnittstelle SOAP::Lite encodiert Strings mit Zeichen ausserhalb vom ASCII 127er Satz und Sonderzeichen im ASCII 127er Satz als base64Binary. Das funktioniert soweit ganz gut, solange man in einer Sprache bleibt und lediglich einen erweiterten ASCII Zeichensatz wie ISO-8859-1 verwendet (siehe auch: Probleme mit SOAP-API bei Aufruf von Ticket::ArticleGet).

Setzt man nun bei OTRS auf seine UTF-8 Features, dann stellt man fest, das der Hersteller dies zwar als Feature nennt, die SOAP Schnittstelle allerdings ausgeklammert ist. Dies liegt im Endeffekt auch nicht am Hersteller von OTRS sondern die SOAP::Lite Komponente macht einem hier ein Strich durch die Rechnung. Die eingesetzte Routine zum Encodieren eines Strings nach Base64 unterstützt nämlich kein UTF-8, ist doch Base64 auch per se nur für Single-Byte-Charsets ausgelegt.

Damit liegt auch ein Lösungsansatz nahe. Der Base64 encodierung sollte UTF-8 'beigebracht' werden. Die CPAN Seite führt bereits diesen Lösungsansatz in den Beispielen auf:

Code: Select all

use MIME::Base64 qw(encode_base64);
use Encode qw(encode);

$encoded = encode_base64(encode("UTF-8", "\x{FFFF}\n"));
print $encoded;
Durch Ergänzung in der Routine as_base64Binary in Lite.pm kann schnell ein Fix gemacht werden:

Code: Select all

sub as_base64Binary {
  my $self = shift;
  my($value, $name, $type, $attr) = @_;
  require MIME::Base64;
  require Encode;
  return [$name, {'xsi:type' => 'xsd:base64Binary', %$attr}, MIME::Base64::encode_base64(Encode::encode("UTF-8", $value),'')];
}
Die Ergänzung dieser Routine hat bei mir zum Erfolg beim Zugriff von PHP aus (mit nuSoap) auf die SOAP OTRS Schnittstelle geführt.
Andre Bauer
Znuny guru
Posts: 2189
Joined: 08 Dec 2005, 17:01
Znuny Version: 5.0.x
Real Name: André Bauer
Company: Magix Software GmbH
Location: Dresden
Contact:

SOAP Probleme bei UTF-8 und hohen ASCII Zeichen verhindern

Post by Andre Bauer »

Wäre als Patch auch was für den Bugtracker ;-)
Prod: Ubuntu Server 16.04 / Zammad 1.2

DO NOT PM ME WITH OTRS RELATED QUESTIONS! ASK IN THE FORUMS!

OtterHub.org
hakre
Znuny newbie
Posts: 11
Joined: 14 Aug 2008, 17:39

SOAP Probleme bei UTF-8 und hohen ASCII Zeichen verhindern

Post by hakre »

Für mich sprechen zwei Dinge zur Zeit gegen einen Patch
  • Bisher nur Kurz getestet
  • Der Patch bezieht sich auf eine CPAN-Klasse.
Gerade der zweite Punkt ist nicht ohne. Die Integration sollte unabhänig vom CPAN Code laufen. Sinnvoller dürfte es sein, diese Routine in einer neuen Klasse anzulegen und dann die as_base64Binary zu "überladen". Die SOAP::Lite Klasse bietet dafür eine Möglichkeit, ich habe den Quellcode gerade nicht zur Hand, allerdings ist da drin beschrieben wie das geht. Könnte sich dann zum anderen Fix wegen den Entities (SOAP Decoding Probleme bei Emailadressen u.ä.) in die rpc.pl gesellen.

Mal schaun, vielleicht wirds ja morgen was. Brauch immer ein bischen um wieder in Perl reinzukommen.
Andre Bauer
Znuny guru
Posts: 2189
Joined: 08 Dec 2005, 17:01
Znuny Version: 5.0.x
Real Name: André Bauer
Company: Magix Software GmbH
Location: Dresden
Contact:

SOAP Probleme bei UTF-8 und hohen ASCII Zeichen verhindern

Post by Andre Bauer »

Ah. OK. Dann isses was fürs Wiki ;-)
Prod: Ubuntu Server 16.04 / Zammad 1.2

DO NOT PM ME WITH OTRS RELATED QUESTIONS! ASK IN THE FORUMS!

OtterHub.org
hakre
Znuny newbie
Posts: 11
Joined: 14 Aug 2008, 17:39

SOAP Probleme bei UTF-8 und hohen ASCII Zeichen verhindern

Post by hakre »

Wie man es nimmt:

http://bugs.otrs.org/show_bug.cgi?id=3240

;) Patch ist da mit dabei.

Als Attachmetn zu Bug 3240 angelegt.

Der Patch fixed auch den Bug 3239 dort (siehe dazu auch SOAP Decoding Probleme bei Emailadressen u.ä.).
Post Reply