2009-05-19 3 views
0

Wir verwenden einen Webdienst, der UTF-8 erwartet. Das Framework, das wir auf dem Client verwenden, ist Apache Axis2. Wir rufen den Web-Service auf und der Soap-Body enthält Zeichenfolgen in UTF-8. Das Problem ist, dass der Körper scheinbar "doppelt kodiert" ist. Das heißt, wir haben den Charakter "å". Die utf-8-Darstellung von 'å' in utf-8 ist C3 A5, aber wir sehen in unseren Protokollen, dass der (doppelt) kodierte Wert C3 83 C2 A5 ist.Soap-Körper ist utf-8 zweimal codiert

Hat jemand ähnliche Probleme erlebt?

Antwort

1

Es ist nicht ganz klar, wie Sie den Webdienst aufrufen. Nimmt die Methode im Web-Service nur eine Zeichenfolge? Wenn ja, wie sieht Ihre Zeichenfolge in Java aus? Alle Zeichenfolgen in Java sind UTF-16-codiert - wenn Sie die binäre UTF-8-Repräsentation in eine Zeichenfolge konvertieren, indem Sie jedes Byte in ein Zeichen umwandeln, dann ist das das Problem.

Wenn Sie zeigen könnten, wie die Methode, die Sie anrufen, aussieht und wie Sie sie nennen, würde das viel helfen.

Für was es wert ist, habe ich Axis mit Nicht-ASCII-Strings ohne Probleme in der Vergangenheit verwendet. Ich vermute stark, dass dies ein Problem ist, wie Sie es verwenden, anstatt mit Axis selbst, obwohl ich bereit bin, falsch bewiesen zu werden :)

EDIT: Basierend auf Ihrem Kommentar, es klingt wie Sie Probleme haben Empfangen der HTML-Formulardaten, bevor Sie den Webservice aufrufen. Wenn der Benutzer "å" in das Formular eingegeben hat, sollte dies beim Debuggen in Eclipse angezeigt werden. Wenn Sie fehlerhafte Daten in Ihren Webdienst eingeben, ist es kein Wunder, dass Sie am anderen Ende schlechte Daten erhalten. Ich schlage vor, Sie laufen WireShark zu sehen genau was der Browser sendet Ihnen, sowohl in Bezug auf die Roh-Bytes und auch, welche Inhaltscodierung es angibt. Meine Vermutung ist, dass Ihr Webserver es als ISO-8859-1 behandelt, aber es ist eigentlich UTF-8.

Sobald Sie die Zeichenfolge richtig aus dem Formular erhalten haben, werden Sie vermutlich keine Probleme bei der Weiterleitung an den Webdienst feststellen.

+0

Ich werde versuchen zu erklären, wie wir den Web-Service aufrufen. Der erste Webservice ist ein Drittanbieterdienst. Wir haben Stubs aus der WSDL-Datei generiert. Die Daten werden von einem HTML-Formular gepostet und sehen wie folgt aus: "å" Wenn ich es in Eclipse debugge, wird es als "å" angezeigt. Wir erstellen ein "Abfrage" -Objekt, das im Stub definiert ist. Wir erstellen dann den Umschlag und den Körper und rufen dann die Web-Service-Methode auf. Wir haben auch die Eigenschaft CHARACTER_SET_ENCODING auf UTF-8 (aber das sollte die Standardeinstellung, richtig?) –

+0

Ihr Debugging sagt es. Die Daten werden nicht ordnungsgemäß in Ihre Anwendung eingegeben. Wahrscheinlich möchten Sie mit wireshark herausfinden, wie der Browser die Daten an Ihre Anwendung übermittelt, da das Problem dort existiert. –

+0

Vielen Dank, es waren in der Tat die Daten aus dem Browser, die das Problem verursacht haben. Ich benutzte Wireshark und dachte, Axis wäre der scheiternde Teil. Mein Webserver behandelt die Daten jetzt korrekt als UTF-8. (Für Tomcat verwenden Sie URIncoding = "UTF-8") –