Seite 1 von 1

byte array

Verfasst: Donnerstag 13. April 2006, 23:20
von seppl43
Hallo allerseits,

ich bastele an einer Schnittstelle zu einem Java-Programm. Und dieses Programm verlangt bei der Übergabe von Dateien, dass diese in einem Byte-Array abgeliefert werden.

Wie stelle ich das in Python an, z.B. eine einfache Textdatei in ein solches Byte-Array zu transformieren?

Vielen Dank für Tipps.

Seppl

Verfasst: Freitag 14. April 2006, 06:04
von BlackJack
Wie machst Du denn die Anbindung? Du musst ja irgendwie ein Java-Byte-Array erstellen. Auf Java-Seite bekäme man das zum Beispiel aus einer Java-Zeichenkette mit der `getBytes()` Methode.

Verfasst: Freitag 14. April 2006, 11:42
von seppl43
BlackJack hat geschrieben:Wie machst Du denn die Anbindung? Du musst ja irgendwie ein Java-Byte-Array erstellen. Auf Java-Seite bekäme man das zum Beispiel aus einer Java-Zeichenkette mit der `getBytes()` Methode.

Die Anbinding erfolgt über eine SOAP-Schnittstelle des Java-Programms. Es handelt sich also um eine Webanwendung (JIRA). Für die Übertragung der Dateien steht eine SOAP-Methode zur Verfügung. Diese verlangt die Übergabe als Byte-Array. Ich muss dieses also mit Python erzeugen.

Verfasst: Samstag 15. April 2006, 07:28
von BlackJack
Das kann ich nicht so recht glauben. Eine Datei als (SOAP) Byte-Array zu übertragen ist ziemlich unwahrscheinlich. Da würde jedes Byte einzeln als Dezimalwert in ein XML-Tag umgewandelt werden. Binärdaten werden normalerweise als Base64 kodiert übertragen.

Leider mag SOAPpy das WSDL von JIRA nicht. :-(

Verfasst: Sonntag 16. April 2006, 13:35
von seppl43
Leider mag SOAPpy das WSDL von JIRA nicht. :-(
Kann ich nicht bestätigen. Alle Methoden der SOAP-Schnittstelle von JIRA konnte ich bislang ohne Probleme ausführen. Mein SOAP-Client läuft prima. Kniffelig ist nur, die Datenformate herauszubekommen, die die SOAP-Methoden brauchen, Jedenfalls, wenn man kein JIRA-Spezialist und kein JAVA-Profi ist.

Und so ist es auch mit der Methode zum Hinzufügen einer Datei. Im JIRA-Forum erhielt ich folgende Aussage:
The one thing to remember is that you need to send the file as a byte array.
In einem in JAVA geschriebenem Beispiel der JIRA-Macher sieht der Methoden-Aufruf so aus:

Code: Alles auswählen

boolean added = jiraSoapService.addAttachmentsToIssue(token,
                                                      issue.getKey(),
                                                      new String[]{tmpFile.getName()},
                                                      new byte[][]{getBytesFromFile(tmpFile)});
Da sehe ich (als JAVA-Laie) nichts von BASE64. Es bleibt für mich die Frage, wie ich mit Python das geforderte Byte-Array aus einer Datei erstelle.

Wenn dazu jemand noch eine Idee hat, wäre das prima.

Seppl

Verfasst: Montag 17. April 2006, 06:51
von BlackJack
seppl43 hat geschrieben:
Leider mag SOAPpy das WSDL von JIRA nicht. :-(
Kann ich nicht bestätigen. Alle Methoden der SOAP-Schnittstelle von JIRA konnte ich bislang ohne Probleme ausführen. Mein SOAP-Client läuft prima. Kniffelig ist nur, die Datenformate herauszubekommen, die die SOAP-Methoden brauchen, Jedenfalls, wenn man kein JIRA-Spezialist und kein JAVA-Profi ist.
Kannst Du nicht bestätigen, weil Du es offensichtlich nicht ausprobiert hast. WSDL ist eine Schnittstellenbeschreibunssprache (in XML) für SOAP. Damit Du eben nicht selbst herausfinden musst, wie etwas kodiert werden soll. Beim laden der WSDL Datei gibt's aber eine Ausnahme. Jedenfalls bei mir.
Und so ist es auch mit der Methode zum Hinzufügen einer Datei. Im JIRA-Forum erhielt ich folgende Aussage:
The one thing to remember is that you need to send the file as a byte array.
In einem in JAVA geschriebenem Beispiel der JIRA-Macher sieht der Methoden-Aufruf so aus:

Code: Alles auswählen

boolean added = jiraSoapService.addAttachmentsToIssue(token,
                                                      issue.getKey(),
                                                      new String[]{tmpFile.getName()},
                                                      new byte[][]{getBytesFromFile(tmpFile)});
Da sehe ich (als JAVA-Laie) nichts von BASE64. Es bleibt für mich die Frage, wie ich mit Python das geforderte Byte-Array aus einer Datei erstelle.
Zu der Methode ein Auszug aus der WSDL Datei:

Code: Alles auswählen

   <wsdl:message name="addAttachmentsToIssueRequest">

      <wsdl:part name="in0" type="xsd:string"/>

      <wsdl:part name="in1" type="xsd:string"/>

      <wsdl:part name="in2" type="impl:ArrayOf_xsd_string"/>

      <wsdl:part name="in3" type="impl:ArrayOf_xsd_base64Binary"/>

   </wsdl:message>
Da steht was von Base64. Wie gesagt, eine Datei so zu kodieren das jedes Byte einzeln Dezimal in ein XML-Tag verpackt würde, wäre ziemlich, äh, suboptimal.

Verfasst: Montag 17. April 2006, 11:23
von seppl43
Kannst Du nicht bestätigen, weil Du es offensichtlich nicht ausprobiert hast.
Woher zum Teufel willst du wissen, ob ich es probiert habe oder nicht? Lies mal genau, was ich geschrieben habe: Der Client läuft und funktioniert
ganz ausgezeichnet.
WSDL ist eine Schnittstellenbeschreibunssprache (in XML) für SOAP. Damit Du eben nicht selbst herausfinden musst, wie etwas kodiert werden soll.
Es ist immer wieder schön, wenn andere Leute zeigen, was sie so alles wissen. :wink:
Beim laden der WSDL Datei gibt's aber eine Ausnahme. Jedenfalls bei mir.
Tja, bei mir nicht. WSDL-Datei wird geladen, es gibt keine Ausnahme, alle SOAP-Methoden sind aufrufbar und funktionieren. Vielleicht arbeitest du mit einer alten JIRA-Version?
Zu der Methode ein Auszug aus der WSDL Datei:

...

Da steht was von Base64. Wie gesagt, eine Datei so zu kodieren das jedes Byte einzeln Dezimal in ein XML-Tag verpackt würde, wäre ziemlich, äh, suboptimal.
Schön. Was mich aber interessiert ist, ob es eine Entsprechung zum Methoden-Aufruf aus JAVA gibt. Letztlich, ob es in Python etwas Vergleichbares gibt zu:

Code: Alles auswählen

getBytesFromFile(tmpFile);
Vielleicht gibt es das nicht. Ok. Vielleicht kann SOAP.py damit nicht umgehen. OK.
Das wären dann wenigstens konkrete Antworten.

Verfasst: Montag 17. April 2006, 22:33
von BlackJack
seppl43 hat geschrieben:
Kannst Du nicht bestätigen, weil Du es offensichtlich nicht ausprobiert hast.
Woher zum Teufel willst du wissen, ob ich es probiert habe oder nicht?
Okay, ich bin halt davon ausgegangen, das sich Dein SOAPpy + JIRA-WSDL dann auch nicht vertragen hätten. Beides übrigens am Wochenende erst aus dem Netz gezogen.
WSDL ist eine Schnittstellenbeschreibunssprache (in XML) für SOAP. Damit Du eben nicht selbst herausfinden musst, wie etwas kodiert werden soll.
Es ist immer wieder schön, wenn andere Leute zeigen, was sie so alles wissen. :wink:
Da Du sehr spärlich mit Informationen herausrückst, dachte ich, ich sags Dir lieber mal.
Zu der Methode ein Auszug aus der WSDL Datei:

...

Da steht was von Base64. Wie gesagt, eine Datei so zu kodieren das jedes Byte einzeln Dezimal in ein XML-Tag verpackt würde, wäre ziemlich, äh, suboptimal.
Schön. Was mich aber interessiert ist, ob es eine Entsprechung zum Methoden-Aufruf aus JAVA gibt. Letztlich, ob es in Python etwas Vergleichbares gibt zu:

Code: Alles auswählen

getBytesFromFile(tmpFile);
Vielleicht gibt es das nicht. Ok. Vielleicht kann SOAP.py damit nicht umgehen. OK.
Das wären dann wenigstens konkrete Antworten.
Schon mal versucht die Datei einfach zu laden? Also ``open(dateiname, 'rb')`` und dann mit `read()` komplett einlesen?