Seite 1 von 1
Byte-Array
Verfasst: Dienstag 29. August 2006, 14:54
von zed leppelin
hallo,
ich habe die Aufgabe, einen SOAP-Client in Python für JIRA zu entwickeln.
Das ist soweit relativ klar und einfach zu realisieren mit SOAPpy. Alle Methoden, die ich von der SOAP-Schnittstelle benötige funktionieren einwandfrei. Nur das Übertragen von Dateien (Attachments) will nicht gelingen.
JIRA ist in Java geschrieben. Die SOAP-Schnittstelle stellt die Methode
bereit, die als Parameter neben einem Authentifizierungsschlüssel und einem Issue-Key, die Namen der übertragenen Dateien und die Dateien selbst als
Byte-Array verlangt.
Wie mache ich also aus einer Datei ein Byte-Array?
Das gleiche Problem tauchte schon mal im Forum auf:
http://www.python-forum.de/topic-5713.h ... =bytearray
Aber ohne Lösung.
Danke für Hilfe
Zed
Re: Byte-Array
Verfasst: Dienstag 29. August 2006, 19:44
von BlackJack
zed leppelin hat geschrieben:bereit, die als Parameter neben einem Authentifizierungsschlüssel und einem Issue-Key, die Namen der übertragenen Dateien und die Dateien selbst als
Byte-Array verlangt.
Soweit ich mich erinnere war das kein Bytearray sondern ein Array von Bytearrays.
Wie mache ich also aus einer Datei ein Byte-Array?
Ich würd's erst einmal als Zeichenkette versuchen. In diesem Fall also eine Liste von Zeichenketten.
Verfasst: Dienstag 29. August 2006, 22:04
von zed leppelin
Ich würd's erst einmal als Zeichenkette versuchen. In diesem Fall also eine Liste von Zeichenketten.
Das mit der Zeichenkette habe ich schon probiert. Das geht leider nicht. Die Methoden der SOAP-Schnittstelle wollen schon die angegebenen Datentypen, so meine Erfahrung.
Es bleibt also die Frage, wie ich aus einer Datei ein Byte-Array mache.
Verfasst: Mittwoch 30. August 2006, 11:51
von BlackJack
Hast Du die Zeichenkette(n) auch in eine Liste gepackt?
Verfasst: Dienstag 5. September 2006, 09:18
von zed leppelin
Ich habe folgendes gemacht:
Code: Alles auswählen
datei = file(<path to file>)
cont = datei.read()
cont64 = base64.encodestring(cont)
chararray1 = array.array('c')
chararray1.fromstring(cont64)
datei.close()
# Übertragung via SOAP-Schnittstelle
add = swr_jira.addAttachmentsToIssue(auth,issue_id,[<filename>],[chararray1])
Das überträgt die Datei tatsächlich nach JIRA. Allerdings ist sie dann nicht mehr brauchbar. Ein PDF z.B. lässt sich nicht mehr öffnen. Es hat auch einige Bytes zuviel (ca. 1,4%).
Es scheint also ein Codierungs-Problem vorzuliegen.
Aber welcher Art?
Verfasst: Dienstag 5. September 2006, 11:14
von gerold
zed leppelin hat geschrieben:Ich habe folgendes gemacht:
Hi Zed Leppelin!
Blöde Frage -- ich weiß!
Hast du die Datei **binär** geöffnet?
mfg
Gerold

Verfasst: Dienstag 5. September 2006, 20:15
von BlackJack
Mit einer einfachen Zeichenkette mit dem Dateiinhalt in der Liste geht es nicht? Oder nur diese Zeichenkette als base64 ohne sie in ein `array` zu packen?
Und schau Dir mal die Daten genauer an die angekommen sind. Also in einem Hexeditor, wie's aussieht, ob's kompletter Müll ist oder nur etwas kaputt.
Zum Testen könntest Du auch mal 256 Bytes auf verschiedene Weisen übertragen die einfach alle Werte von 0 bis 255 enthalten. Dann lässt sich auf der Empfängerseite leichter ein Muster erkennen.
Verfasst: Mittwoch 6. September 2006, 10:29
von zed leppelin
Es gibt keinen Unterschied, ob ich die Datei binär öffne oder nicht. Nach dem Upload sind beide Ergebnis-Dateien aufs Byte gleich, aber eben größer als die Ursprungsdatei.
Das einfache Übertragen der Zeichenkette in einer Liste geht nicht, egal ob base64 oder nicht. Ich erhalte Fehlermeldungen der SOAP?-Schnittstelle:
java.lang.IllegalArgumentException: argument type mismatch
Das ist eindeutig, denke ich.
Bei der Übertragung einer einfachen .txt-Datei mit 7-bit-ascii-Zeichensatz als Inhalt kommt im Ergebnis nur Müll heraus. Im Hexeditor geöffnet sehe ich in der Ursprungsdatei einen schön regelmäßig angeordneten Hexcode:
00 01 02 03 04 ..
10 11 12 13 14 ..
20 ..
..
F0 ..
In der hochgeladenen Datei hingegen ist es einziges Chaos. Es läßt sich auch kein Muster erkennen.
Ich sehe nach wie vor ein Codierungs-Problem. Nur weiß ich nicht wo.
Hat noch jemand eine Idee?
Vielen Dank für Tipps.
Verfasst: Mittwoch 6. September 2006, 11:51
von BlackJack
Du sagst leider nicht wobei der Müll auftritt oder wie der genau aussieht.
Wie sieht's mit einem `array.array` in einer Liste aus, das die Daten 1:1 enthält, also nicht base64 kodiert?
Poste doch mal ein paar Möglichkeiten der Übertragung von den 256 Testbytes und die jeweiligen Ergebnisse als Hexdumps.
Soweit ich weiss bietet Jira auch eine XML-RPC Schnittstelle, falls die alles notwendige bietet, ist das sicher ein einfacherer Weg.