VisualBasic Java Klassen - VB.net Entsprechungen gesucht

Smagjus

Rear Admiral
Registriert
Feb. 2011
Beiträge
6.133
Hallo,

ich muss ein Java Programm in VB.net umsetzen und suche daher nach entsprechenden Klassen zur Umsetzung in VB.net. Es geht um einen Client für das Versenden/Empfangen einer XML-Anweisung via SOAP auf Port 443. Ich habe gerade erst von SOAP gehört und weiß nicht viel darüber. Wie dem auch sei. Ich habe hier die Importanweisungen aus dem Java-Programm aufgelistet, um zu zeigen, um welche Klassen es geht.

Code:
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.net.HttpURLConnection;
import java.net.URL;
Die Klassen in VB.net sollten möglichst ähnliche Funktionalitäten haben. Eventuell kennt ja jemand sogar eine Quelle im Internet, wo ich leicht an solche Informationen rankomme.

Vielen Dank für alle Antworten.

Code:
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.io.BufferedReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class WSGUploader implements Uploader {

    private DocumentBuilder docBuilder;
    private static final String WSG_HEADER = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
            "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"\n" +
            "  xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"\n" +
            "  xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n" +
            "  xmlns:wsa=\"http://schemas.xmlsoap.org/ws/2004/03/addressing\"\n" +
            "  xmlns:wsse=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd\"\n" +
            "  xmlns:wsu=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd\">\n" +
            "  <soap:Header>\n" +
            "    <wsse:Security soap:mustUnderstand=\"1\">\n" +
            "      <wsse:UsernameToken\n" +
            "        xmlns:wsu=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd\"\n" +
            "        wsu:Id=\"SecurityToken-115b71ae-7ae2-47c6-a1cd-87c540312330\">\n" +
            "        <wsse:Username>XXX</wsse:Username>\n" +
            "        <wsse:Password Type=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText\" >xxx</wsse:Password>\n" +
            "      </wsse:UsernameToken>\n" +
            "    </wsse:Security>\n" +
            "  </soap:Header>\n" +
            "  <soap:Body>";

    private static final String WSG_FOOTER = "</soap:Body>\n" +
            "</soap:Envelope>";

    public WSGUploader() throws Exception {
        DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
        docBuilder = builderFactory.newDocumentBuilder();
    }

    public void upload(String xmlContent, String serviceOperation, String serviceVersion, boolean useCertSystem) throws Exception {

        String xmlResponse;
        String soapBody = xmlContent.replaceFirst("<\\?xml[^>]*\\?>", "");

        URL wsgUrl = new URL("https://sop-ws.deutschepost.de/sbb/services/Invoke");

        HttpURLConnection httpConnection = (HttpURLConnection)wsgUrl.openConnection();
        httpConnection.setRequestMethod("POST");
        httpConnection.setRequestProperty("Content-Type", "text/xml; charset=UTF-8");

        if (useCertSystem == true) {
          httpConnection.addRequestProperty("SOAPAction", "OrderManagement/CertificationOrderManagement/" + serviceVersion + "#" + serviceOperation);
        }
        else
        {
          httpConnection.addRequestProperty("SOAPAction", "OrderManagement/OrderManagement/" + serviceVersion + "#" + serviceOperation);
        }

        httpConnection.setDoOutput(true);
        httpConnection.connect();


        OutputStreamWriter outStream = new OutputStreamWriter(httpConnection.getOutputStream(), "UTF-8");
        outStream.write(WSG_HEADER);
        outStream.write('\n');
        outStream.write(soapBody);
        outStream.write('\n');
        outStream.write(WSG_FOOTER);
        outStream.write('\n');
        outStream.flush();

        int responseCode = httpConnection.getResponseCode();

        if (responseCode == 200) {
            InputStream responseStream = httpConnection.getInputStream();
            final BufferedReader reader = new BufferedReader(new InputStreamReader(responseStream, "UTF-8"));
            StringBuffer result = new StringBuffer();
            String line;

            while((line = reader.readLine()) != null) {
                result.append(line + "\n");
            }
            responseStream.close();
            xmlResponse = result.toString();

        } else {
            throw new RuntimeException("Gateway returned response code " + responseCode);
        }
    }
}
 
Du bist der Größte...wenn du ein wenig mehr Respekt an den Tag legen würdest, wäre das nett.

Damit habe ich jetzt die Webrequest Klasse gefunden, die so wie ich das sehe, die URL Klasse überflüssig macht.

Der Rest bleibt offen.
 
Afaik gibt es keine Liste mit direkten Entsprechungen .Net- und Java-Klassen. Wird auch bei dem Umfang ein wenig schwer (.Net -> ~16.000 Klassen; Java -> ~8.000 Klassen; oder etwas in dem Dreh).

Du kannst dich also nur Stück für Stück durchhangeln und manuell suchen.

Edit:
Aber sagen kann ich dir ein paar Klassen, die dem Zweck nach ähnlich sind:
Java -> .Net
DocumentBuilder -> System.XML.XMLDocument
HttpURLConnection -> verschiedene: HTTPWebRequest, WebClient, WebRequest, alle aus dem System.Net-Namespace
OutputStreamWriter -> System.IO.StreamWriter (analog: StreamReader; eventuell interessant: BinaryReader, BufferedStream, FileStream, MemoryStream, Stream, StringReader, TestReader; alle aus demselben Namespace)

Hier kann man nachschauen: http://msdn.microsoft.com/de-de/library/gg145045(v=vs.100)
 
Zuletzt bearbeitet:
Wunderbar, besser geht's nicht! Danke euch beiden.

@e-laurin
Hattest du schon Vorwissen oder wie hast du die Klassen so schnell gefunden? MSDN ist mir ein Begriff, aber die Suche dort hat mich bisher selten zum Erfolg geführt. Nur durch Zufall bin ich gerade aber auf diesen Artikel gestoßen http://msdn.microsoft.com/de-de/library/ms996427.aspx

Die Streams hättest du mir übrigens nicht raussuchen müssen. Die Streamklassen sind nämlich meine persönlichen Lieblinge in .NET ;)
 
Vorwissen hab ich etwas, ja. Man stolpert ja irgendwann zwangsweise über diese Klassen.

Da fällt mir gerade ein: Schau mal nach den Klassen XMLWriter und XMLTextWriter. Damit schlägst du eventuell XMLDocument, StreamWriter und WebRequest mit einem mal. Zumindest mit XMLTextReader sollte es möglich sein, XML-Daten im Web abzufragen.
 
Zuletzt bearbeitet:
Werde ich machen. Allerdings dann erst morgen. Ich suche mir heute erstmal alles nötige für dieses kleinere Projekt raus und fange morgen dann an, daran zu werkeln. Habe hier leider keine Entwicklungsumgebung - weder für Java noch für .NET.
 
So, eine kleine Zusammenfassung:
Das Programm habe ich mit Hilfe von WebRequest erstellt. Funktioniert wunderbar, nachdem anfängliche Probleme beseitigt wurden. WebRequest ist sogar etwas konfortabler als HttpURLConnection, da sich um vieles automatisch gekümmert wird.

Für die Verarbeitung der XML-Response habe ich auf eine Verwendung einer spezialisierten Klasse verzichtet. Es hat sich herausgestellt, dass nur von Interesse ist, ob die Übertragung erfolgreich war oder nicht. Zu dem Zweck wird neben der Response ein "OK" übermittelt, falls alles funktioniert hat. Die Response wird aus Gründen der Vollständigkeit trotzdem in einer Datei weggeschrieben. Dies geschieht über VB-Funktionen (FileOpen, FileAppend?, FileClose) tadellos.

Für den Netzwerkstream verwende ich den Standardstream (Stream-Klasse). Mehr funktionalität brauche ich in dem speziellen Fall nicht.

Die Antwort kommt jetzt leider so spät, da es auf dem Rechner, wo die Anwendung laufen sollte, ein paar Berichtigungsprobleme gab. Einerseits fehlten die Leseberechtigungen für wichtige Konfigurationsdateien von .net. Andererseits hat der Admin auf der Maschine keine Rechte für ein Netzlaufwerk - der normale Nutzer aber schon. Das Programm läuft aber jetzt.
 
Zurück
Oben