Am Server ankommende XML Daten verarbeiten

XoxoL

Mitglied
Hallo allerseits,
ich habe ein, glaub ich, Anfängerproblem. Ich habe ein UDP Socket wo ich auf ankommende XML-Dateien warte und diese sobald sie angekommen sind verarbeiten soll. Genauer gesagt wird die Information aus den XML-Dateien in eine DB-Tabelle geschrieben. Ich bekomme die Dateien und kann den Inhalt auch ausgeben. Das Auslesen einzelner Daten klappt noch nicht und das Ist mein Problem.

Hier ist der Code:

Java:
import java.io.IOException;
import java.net.*;
import javax.swing.text.Document;
import javax.xml.parsers.ParserConfigurationException;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.xml.sax.*;

public class Main {

    public static void main(String[] args) throws IOException, ParserConfigurationException,    SAXException, JDOMException {
        DatagramSocket socket = new DatagramSocket(44490);
        SAXBuilder builder = new SAXBuilder();
        Document doc;

        int i = 0;
        while (true) {

            //Auf Anfrage warten
            int buflen = socket.getReceiveBufferSize(); //ermittelt die Länge des Packets
            DatagramPacket packet = new DatagramPacket(new byte[buflen], buflen);
            socket.receive(packet);

            // Sender auslesen
            InetAddress address = packet.getAddress();
            int port = packet.getPort();
            int len = packet.getLength();
            byte[] data = packet.getData();

            i++;
            String tmp = new String(data);
            doc = (Document) builder.build(tmp);

            System.out.printf(i + " - Anfrage von %s vom Port %d mit der Länge %d:%n%s%n",
                    address, port, len, tmp);

        }
    }
}

und hier glaube ich ist der Hund begraben: doc = (Document) builder.build(tmp);
oder ich muss das Ganze anders gestalte.
Bitte gent mir einen Anstoß.....
 

XoxoL

Mitglied
das habe ich vergessen, folgenden Fehler bekomme ich beim Ausführen:

Exception in thread "main" java.net.MalformedURLException: no protocol: <?xml version="1.0" ?><DATA>
 
G

Gast2

Gast
Java:
            String tmp = new String(data);

Java-API für 'new String(byte [] value)'

Constructs a new String by decoding the specified array of bytes using the platform's default charset. The length of the new String is a function of the charset, and hence may not be equal to the length of the byte array.

Default-Werte sind immer Mist wenn Sie Aufgrund der Platform existieren ... Platform A verwendet UTF-8 ... Platform B verwendet UTF-32 ... und schon kommt bei einer Platform Müll raus ... gib mal auf beiden Seiten das Encoding mit an (z.B. UTF-8)

ansonsten verwende nach Möglichkeit TCP statt UDP ... mit UDP hast Du nur Probleme ... vor allem wenn das Paket beim Client (oder dazwischen) fragmentiert wird und der zweite Teil vor dem Ersten ankommt ... dann hast Du definitiv kein XML mehr

Java:
int buflen = socket.getReceiveBufferSize();
das ermittelt nur wieviel Bytes im Puffer sind - das ist aber nie die Länge die der Client geschickt hat
 

Noctarius

Top Contributor
Musst du denn unbedingt über SAX parsen?

Java:
final DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
final DocumentBuilder builder = factory.newDocumentBuilder();
final Document document = builder.parse(new StringInputStream(xmlcode));

(PS: Vielleicht reicht dir auch der Parser aus der Signatur bei mir)
 

XoxoL

Mitglied
TCP wäre mir auch lieber aber das ist zu langsam ich bekomme ca. 1000 XML's pro minute deswegen will ich den Parser nutzen. Ich könnte den String in Einzelteile zerlegen und so die Daten raus hollen aber es geht mir alle um geschwindigkeit.
Java:
        int buflen = socket.getReceiveBufferSize();
der Gedanke war das nicht immer begrentzten buffer habe den die Dateien sin untersciedlich lang und ich will das es alles ankommt.....

was ist eure Meinung? wie kann die daten am einfachsten und am schnelsten in eine DB-Tabelle schreiben?
 

Noctarius

Top Contributor
TCP zu langsam? Oo

Wenn du einen richtigen TCP Server mit NIO aufbaust und dahinter einen Threadpool zur Bearbeitung der XML Daten legst sollte das kein Problem sein.
 

XoxoL

Mitglied
für alle das gleiche Problem haben:

Java:
public static void main(String[] args) throws SocketException, JDOMException, IOException {
        DatagramSocket socket = new DatagramSocket(44490);
        
        XMLOutputter out = new XMLOutputter(Format.getPrettyFormat());

        int i = 0;
        while (true) {

            //Auf Anfrage warten

            int buflen = socket.getReceiveBufferSize(); 
            DatagramPacket packet = new DatagramPacket(new byte[buflen], buflen);
            socket.receive(packet);
            ByteArrayInputStream byteIn = new ByteArrayInputStream(packet.getData(), 0, packet.getLength());
            DataInputStream dataIn = new DataInputStream(byteIn);

            String tmp = new String(dataIn.toString());
            org.jdom.Document doc = new SAXBuilder().build(dataIn);
            out.output(doc, System.out);
        }
    }
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
MAGI XML Server Zugriff XML & JSON 1
E XML an Server verschicken XML & JSON 3
T XML und Sonderzeichen, Probleme mit ASP.NET Server XML & JSON 2
T SOAP mit Java ohne HTTP Server möglich? XML & JSON 3
byte XSLT Transformation "ohne Server" XML & JSON 6
B XML-Daten mit SAX Parser verarbeiten in Java XML & JSON 4
A GUI um auf XSD Basis (valide) XML Daten zu erzeugen XML & JSON 3
K XML Datei erstellen und Daten daraus in Java auslesen XML & JSON 6
K Login Daten mit JSoup übermitteln XML & JSON 0
M JAXB @XMLID und @XMLIDREF, wie Daten hinzufügen XML & JSON 2
G Jsoup Daten lesen XML & JSON 0
P XML Daten sortieren - Verständnisfrage XML & JSON 4
F Parsen von Daten aus einer Homepage XML & JSON 6
MiMa Verfahrensweise Daten aus dem Internet abfragen XML & JSON 44
G XML-Daten im Programm verwenden XML & JSON 5
M [XSD-Definition] Eindeutige Daten in NodeList (Bereich) XML & JSON 3
K Visualisierung von Daten XML & JSON 13
T Daten in Xml speichern XML & JSON 4
T Daten aus Programm in XML Datei speichern XML & JSON 2
L XML Daten auslesen und in Tabelle (Array) speichern XML & JSON 1
Mike90 Daten aus DB in ExcelTabelle lesen + bearbeiten + formatieren XML & JSON 2
S Mit welcher Technologie Daten abspeichern? XML & JSON 6
J Daten werden in ArrayList geschrieben, AL nicht in .xml ? XML & JSON 5
O XML-Daten fehlen in der Darstellung XML & JSON 2
I Mit JDOM Daten aus XML in ein Array abfüllen XML & JSON 4
R Daten aus xml lesen und in Strings speichern XML & JSON 4
G XML als "Datenbank" für kleine Daten XML & JSON 2
T [JDOM] XML File, neue Daten hinzufügen XML & JSON 5

Ähnliche Java Themen


Oben