XML mit JAVA an URL senden (http post)

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo Leute!

ich habe ein Problem: ich bin gerade in meiner Ausbildung, und habe die Aufgabe bekommen, eine klee Java Applikation zu basteln. das problem ist, das wir Java erst nächstes Jahr in der Schule lernen...

Sie Aufgabe: Ein kleines Programm, das ein "Öffnen" Fenster hat, um Dateien auswählen zu können –> dann sollen XML Dateien beim klicken auf öffnen an eine URL gesendet werden, mit Hilfe von HTTP Post.

So hört sich ja relativ einfach an^^. kann mir da jemand helfen?

Danke schonmal!
 

Niki

Top Contributor
Zum Senden von Files über HTTP gibts was nettes: HTTPClient von jakarta

Hier der Code mit dem es geht
Code:
	private static final String uploadServlet = "/mywebapp/upload";

	private HttpConnection connection = null;

	public MyHttpClient() {
		this(System.getProperty("http.host"), Integer.parseInt(System
				.getProperty("http.port")));
	}

	public MyHttpClient(String host, int port) {
		SimpleHttpConnectionManager connectionManager = new SimpleHttpConnectionManager(
				false);
		HostConfiguration hostConfiguration = new HostConfiguration();
		hostConfiguration.setHost(host, port);
		connection = connectionManager.getConnection(hostConfiguration);
	}

	public int fileUpload(File f) throws IOException {
		if (!connection.isOpen())
			connection.open();

		PostMethod filePost = new PostMethod(uploadServlet);
		Part[] parts = { new StringPart("fileupload_request", f.getName()),
				new FilePart(f.getName(), f) };
		filePost.setRequestEntity(new MultipartRequestEntity(parts, filePost
				.getParams()));

		return filePost.execute(new HttpState(), connection);
	}

Ich hab das ganze mit einem eigenen Servlet gemacht, welches mir das File entgegen nimmt. Wenn das ganze über eine URL geht gibts sicher ein bisschen was zu ändern, aber es könnte dir trotzdem helfen
 

Ötzman

Mitglied
Hallo!

Ich beschäftige mich gerade mit dem von Niki angesprochenem Thema.

Ich möchte eine XML-Datei an ein Servlet senden und diese im Servlet bearbeiten.

Der Client und das Servlet laufen jedoch nicht auf einem Rechner. Die Verbindung läuft also über eine URL.

Wie muss ich da den Code von Niki modifizieren? Ich bin leider etwas unerfahren bei diesem Thema.

Und was mach ich auf Seiten des Servlets? Kommt das File auf den Request InputStream des Servlets und ich schreib das in ein Byte-Array?

Ich bin für jeden Hinweis dankbar! Gerne auch Links zum Thema!

mfg
 

Niki

Top Contributor
Wenn du dich bis morgen geduldest kann ich den das notwendige Servlet posten. Benötigen tust du dafür die commons-io und commons-fileupload library!
 

Niki

Top Contributor
Hier der Code des Servlets:
Code:
protected void service(HttpServletRequest request, HttpServletResponse arg1)
			throws ServletException, IOException {
		File dir = getDir(request);
		RequestContext reqCon = new ServletRequestContext(request); 
		boolean isMultipart = ServletFileUpload.isMultipartContent(reqCon);

		if (isMultipart) {
			try {
				FileItemFactory factory = new DiskFileItemFactory();

				ServletFileUpload upload = new ServletFileUpload(factory);

				List<FileItem> items = upload.parseRequest(request);

				for (FileItem fi : items) {
					if (!fi.isFormField()) {
						byte[] b = fi.get();
						File newFile = Util.getUniqueFile(dir, fi.getName());
						store(newFile, b);
					}
				}
			} catch (Exception ex) {
				ex.printStackTrace();			
				throw new ServletException(ex);
			}
		}
	}

	private void store(File f, byte[] b) throws IOException {
		FileOutputStream fos = null;

		try {
			fos = new FileOutputStream(f);
			fos.write(b);
		} finally {
			if (fos != null) {
				fos.flush();
				fos.close();
			}
		}

		System.out.println(f.getCanonicalPath() + " saved");
	}

	private File getDir(HttpServletRequest request) {
		String s = request.getSession().getServletContext().getRealPath(
				"upload");
		File dir = new File(s);

		if (!dir.exists()) {
			dir.mkdirs();
		}

		return dir;
	}
 

Niki

Top Contributor
Das ist eine eigene Klasse. Die Funktion liefert einfach ein eindeutiges File zurück. In etwa so:
Code:
public static synchronized File getUniqueFile(File dir, String name){
  int index = name.lastIndexOf(".");
  String praefix = null;
  String suffix = null;
  if(index > -1){
    praefix = name.substring(0, index);
    suffix = name.substring(index);
  } else {
    praefix = name;
    suffix = "";
  }

  File f = new File(dir, name);
  int i = 2;
  while(f.exists()){
    name = praefix + i + suffix;
    f = new File(dir, name);
  }
  return f;
}
 

Rookie123

Mitglied
Hallo Leute!

Ich habe eine ähnliches Problem wie hier beschrieben. Ich möchte zwischen zwei HttpServlets XML-Daten per Http Post hin und her schicken. Es ist mein erstes Projket mit XML. Mit Servlets habe ich ein wenig Erfahrung, aber einen Datenaustausch habe ich noch nicht realisiert.

Was ich habe ist folgendes. Ich hole mir Daten aus einem HTML-Formular und schicke diese an ein Servlet um sie dort in eine XML Struktur zu bringen. Der Code der Klasse für die XML Erstellung sieht so aus:

Code:
import java.io.FileWriter;
import java.io.IOException;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;

import data.Bestelldaten;

public class MyXMLWriter {

	public Document createXMLDocument(Bestelldaten daten) {
        Document document = DocumentHelper.createDocument();
        Element root = document.addElement("controlCard");

        Element element = root.addElement("State")
            .addText(daten.getStaat());
        
        element = root.addElement("Name")
        	.addText(daten.getBehoerde());
        
        element = root.addElement("Address")
        	.addText(daten.getAdresse());
        
        element = root.addElement("BodyName")
        	.addText(daten.getKontroll());
        
        element = root.addElement("BodyAddress")
        	.addText(daten.getAnschrift());
        
        element = root.addElement("PreferredLanguage")
        	.addText(daten.getSprache());

        return document;
    }
	
	public boolean writeXMLFile(Document doc) {
		
		try {
			// lets write to a file
			XMLWriter writer = new XMLWriter(
			    new FileWriter( "output.xml" )
			);
			writer.write( doc );
			writer.close();


			// Pretty print the document to System.out
			OutputFormat format = OutputFormat.createPrettyPrint();
			writer = new XMLWriter( System.out, format );
			writer.write( doc );

			// Compact format to System.out
			format = OutputFormat.createCompactFormat();
			writer = new XMLWriter( System.out, format );
			writer.write( doc );
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return true;
	}
}

Die Erzeugung funktioniert prima und auch das Schreiben auf meine HDD funktioniert. Was ich jedoch möchte ist, die XML Datei an ein Servlet per HTTP Post schicken. Und zwar möchte ich diese dazu vorher nicht auf HDD Speichern.

Wie macht man das denn so generell? Schickt man das "Document" Objekt rüber? Wandelt man das ganze in ein String um? Mir fehlt an dieser Stelle wohl ziemlich das Basis Wissen.
Ich habe die Jakarte Libs ausprobiert und ein FileUpload hinbekommen, wo ich eine Datei von der HDD einlese und dann an ein Servlet schicke, aber so möchte ich es ja nicht machen.
Es wäre super, wenn mir jemand an dieser Stelle ein paar Hinweise geben kann.

Vielen Dank für eure Hilfe!
 

Niki

Top Contributor
Die schönste Lösung wäre ein WebService, welches als Parameter das XML-Element bekommt. Das angenehme ist dass du dir einfach ein Interface definierst, welches die Schnittstelle für das WebService darstellt. Das Interface hat eine Methode welches ein Objekt übergeben bekommt. Dieses Objekt kann beliebige Daten enthalten. Aus diesem Interface kannst du dir dann die wsdl Datei generieren lassen. Diese beschreibt dein Service. Du brauchst dann nur noch das Service installieren und schon kannst du dir einen Client basteln der das ganze aufruft.
Ich hab meine WebServices bis jetzt immer mit axis/axis2 implementiert.
 

Rookie123

Mitglied
Hi Niki,

das hört sich gut an. Ich hab mir das mit Axis mal angeschaut und würde das auch gerne machen, aber dafür fehlt mir die Zeit.

Ich möchte einfach nur die XML Datei übertragen.

Sollte ich dazu die Datei in einen String umwandeln und an den Request hängen?

Achso, danke vielmals für deine schnelle Antwort!


Gruß
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Aus Java XML-File an PHP-Skript senden: Encodingproblem? XML & JSON 3
W jaxws jaxb wsdl Java-Klassen generieren und binding.xml verwenden XML & JSON 1
iman XML Attribute mit JAVA einlesen mit Spring Batch XML & JSON 0
T Tags in XML Datei mit Java erstellen XML & JSON 3
E JAXB und java.nio.file.Path XML & JSON 4
B XML-Daten mit SAX Parser verarbeiten in Java XML & JSON 4
S Java REST Client + Json XML & JSON 8
L Lässt sich folgendes so oder so ähnlich mit Java und XML umsetzen XML & JSON 3
K XML Datei erstellen und Daten daraus in Java auslesen XML & JSON 6
L login - Java IOException jaas.config File or Directory not present XML & JSON 1
M Text eines Elements in XML Datei mit JAVA bearbeiten und kompletten Element-Zweig hinzufügen XML & JSON 16
J JSON zu Java mit der GSON Google API XML & JSON 0
B JAXB - java.util.Locale does not have a no-arg default constructor XML & JSON 2
E JAVA simple.JSONObject cannot be cast to simple.JSONArray XML & JSON 9
P Einheiten in Java XML & JSON 4
T Visualisierung von XML Dateien in einer Java SwingGui XML & JSON 11
A WSDL und Java XML & JSON 5
A XMLRPC für Java XML & JSON 3
S XML auf Java Klassen Mappen XML & JSON 10
N Java XML schreiben funktioniert nicht XML & JSON 1
B aus xsd Java Klassen generieren XML & JSON 3
MiMa Mehrfachvariablen in Java durch XML XML & JSON 4
Q XML-File als Objekt in Java XML & JSON 6
Q Konvertierung von json zum Java Objekt nach vorgegebenem Schema XML & JSON 3
AMStyles XPATH Befehl SVG Java XML & JSON 2
S Wie aktualisiert man den Java-Kode mit FOP1.0? XML & JSON 1
L XSL: Aufruf Java-class XML & JSON 11
N Java Code aus XML Datei generieren XML & JSON 8
GUI-Programmer java.io.File aus .jar beziehen XML & JSON 6
A Unterschiedliche Datenstruktur XML <-> Java mappen XML & JSON 9
R XSD aus Java Klassen erzeugen?? XML & JSON 2
N xsd pattern in java einlesen XML & JSON 6
M java.lang.RuntimeException: Failed to parse document XML & JSON 4
F SOAP in Java XML & JSON 6
Q Atom/RSS-Feed lesen - per XSD zu Java-Code XML & JSON 4
S JAXB 2 und Java Annotationen/Interfaces generieren XML & JSON 3
N Google Wetter XML (nur current_condition) auslesen mit Java XML & JSON 15
F Einlesen von JDBC connection in Java von XML XML & JSON 4
D xsd->java mit Eclipse?! oder wie? XML & JSON 27
M Probleme mit XPath bei Java XML & JSON 5
_dp Java XML Parse error: findet end-tags nicht XML & JSON 10
V JAXB schema 2 java XML & JSON 3
S XJC --> Java-Objects compile Problem XML & JSON 4
G Mit JSON Java und C# verbinden XML & JSON 4
K XML Datei in ein Java package „einbinden" XML & JSON 3
H Java - XML - Rekursion - Verwirrung XML & JSON 6
F XML Datei in Java einlesen XML & JSON 4
J XSD > XML > Java XML & JSON 7
F XML mit Java XML & JSON 2
algorismi SVG Datein mit Batik in Java reinladen XML & JSON 3
S Java - Klassen erzeugen aus xsd bzw. wsdl XML & JSON 3
D ID's aus XML Datei rauslesen und in Java ausgeben XML & JSON 7
N value Wert einer XML Datei mit JAVA bearbeiten XML & JSON 21
Mike90 -xlsx Dateien in Java lesen XML & JSON 3
T StAX / SAX => Wie XML Datenstruktur in Java abbilden? XML & JSON 2
H XML plattformunabhängig/Open Source für Java XML & JSON 4
C Java-Imports bei Jaxb XML & JSON 8
slawaweis Problem mit XSLT (wahrscheinlich ein Bug in Java 6) XML & JSON 16
Fadi .classpath(XML) mit Java lesen XML & JSON 2
M Frage zu Erklärung im Online book "Java ist auch eine I XML & JSON 4
M Problem mit FOP in Java Programm XML & JSON 2
H Fop / Java /Fonts XML & JSON 6
H XSL Aufruf via Java mit neuen Fonts XML & JSON 9
T Java Klasse für gegebenes XML erstellen XML & JSON 4
M Xlink in Java-Objekt umwandeln XML & JSON 9
S Jdom+java webstart XML & JSON 4
P Einstieg in XML mit Java XML & JSON 3
G MS-Word Dokument mit Java erstellen XML & JSON 2
N AXIOM mit Java 1.4 XML & JSON 4
J DTD in Java integrieren? XML & JSON 3
L XML Datei in Java angeben Pfad? XML & JSON 3
G Problem mit XML-Schema Validierung mit Java XML & JSON 12
D Java DOM Ausgabe ohne XML header XML & JSON 4
S XML Strings in JAVA einlesen, aber wie? XML & JSON 8
S Java 6 und Xerces-j-2-9 XML & JSON 3
E XML mit java einlesn XML & JSON 2
L mit Java eine HTML-Datei erstellen XML & JSON 3
O OpenDocument-Tabelle mit Java lesen und schreiben XML & JSON 3
G JAVA und DOM XML & JSON 2
M Java und XSLT: Performanz-Problem XML & JSON 5
P DTD -> Java XML & JSON 4
K xml --> sax --> java objekthierarchie XML & JSON 2
B DTD aus Java erzeugen XML & JSON 2
S JAVA XML Parser der einen String parst XML & JSON 3
K java + xpath -> performanceproblem XML & JSON 9
J schema-Validierung mit xerces und jdom: bug in java 1.4? XML & JSON 9
A Kann XML weitere XMLs inkludieren? Oder kann es Java? XML & JSON 5
vogella *Erledigt* XML und Java DOM Tutorial XML & JSON 3
T SOAP mit Java ohne HTTP Server möglich? XML & JSON 3
C HTML-Befehle per Java entfernen XML & JSON 7
W Java und XML - help request XML & JSON 3
M [SOLVED]Ausgabe mit Java XML & JSON 2
P Unterschiede java 1.4 und 1.3 XML & JSON 3
M generate SVG with java XML & JSON 2
G java+xml mit dom4j XML & JSON 4
P XSLT in Java verwenden XML & JSON 7
M Auswertung arithmetischer Ausdrücke mit SAX und Java XML & JSON 7
S XMl Dateien in Java schreiben XML & JSON 4
B XML-Document mit Java erzeugen und zuruecksenden XML & JSON 1
J Beispiel aus Java Magazin 03/2004 gesucht ! XML & JSON 6

Ähnliche Java Themen

Neue Themen


Oben