# An WebDAV einen "MKCOL" Befehl versenden



## citizen_erased (9. Mrz 2010)

hallo!

ich stehe vor einem ähnlichen Problem wie der benutzer in http://www.java-forum.org/netzwerkprogrammierung/57617-httpurlconnection-ueberschreiben.html


```
URL url = new URL("http://www.javasoft.com");
  HttpURLConnection conn =  (HttpURLConnection) url.openConnection();
  conn.setRequestMethod("XXX");  // XXX kann sein: GET, PUT ,POST, DELETE, HEAD, TRACE oder OPTIONS
  
 OutputStream os = connection.getOutputStream();
```

in den webdav will ich dateien und verzeichnisse speichern. dateien zu versenden über einen stream geht soweit. hierzu wird "PUT" als request methode benutzt.

bei verzeichnissen/ collections ist das schon problematischer. GET kann ich nutzen, um zu prüfen, ob es das verzeichniss gibt (return-code im negativen fall 404). in diesem fall wäre MKCOL der zu benutzende befehl. leider ist das kein gültiger wert für die methode setRequestMethod
siehe:
HttpURLConnection (Java 2 Platform SE v1.4.2) wirft eine "ProtocolException"

kennt jemand eine lösung oder ein framework, um mit webdav zu kommunizieren? danke!


----------



## Foermchen82 (9. Mrz 2010)

Nach nem Framework hab ich auch schon gesucht. jackRabbit hab ich gefunden, aber meistens fehlt die ClientSeite. Ist also unbrauchbar. Viele Frameworks wurden da nicht weiterentwickelt. 
Ich habs auch mal aufgegeben, aber poste mir doch mal bitte deinen Code, wie du Dateien liest und schreibst. Das würd mir helfen


----------



## citizen_erased (9. Mrz 2010)

datei in den webdav transportieren läuft prinzipiell wie folgt..

inputstream aus der datei umleiten in den outputstream der verbindung. 
byte-weises kopieren des dateinhaltes...


```
public class Blabla {
	
	File file = null; // must be set

	public void run() {
	
		HttpURLConnection connection = createConnection();
		InputStream is = createInputStream(file);
		OutputStream os = createOutputStream(connection);
		
		// transfer file
		copy(is,os);
			
		// close streams
		is.close();
		os.close();
			
		// get responsecode
		int responseCode = connection.getResponseCode();
	}
	

	private HttpURLConnection createConnection() {
		String protocol = config.getProtocol();
		String host = config.getHost();
		int port = config.getPort();
		String method = config.getMethod(); // PUT
		
		// filename without directory
		String fileName = file.getName();
		
		HttpURLConnection connection = null;
		try {
			URL url = new URL(protocol, host, port, fileName);
			connection = (HttpURLConnection) url.openConnection();
			connection.setRequestMethod(method);
			connection.setDoOutput(true);
		} 
		
		catch (Exception e) {
			//...
		}
		return connection;
	}
	
	
	private InputStream createInputStream(File file) {
		FileInputStream is = null;
		
		try {
			is = new FileInputStream(file);
		}
		catch (FileNotFoundException e) {
			// ...
		}
		return is;
	}
	
	
	private OutputStream createOutputStream(HttpURLConnection connection) {
		OutputStream os = null;
		
		try {
			os = connection.getOutputStream();
		} 
		catch (IOException e) {
			// ...
		}
		return os;
	}

	private void copy(InputStream in, OutputStream out) throws IOException {
		
		byte[] buffer = new byte[1024];
		while (true) {
			int bytesRead = in.read(buffer);
			if (bytesRead == -1) {
				break;
			}
			out.write(buffer, 0, bytesRead);
		}
	}
}
```


----------



## kama (9. Mrz 2010)

Hi,

mal die folgenden für den Anfang...

SkunkDAV WebDAV Client | Get SkunkDAV WebDAV Client at SourceForge.net

Welcome to Apache Jackrabbit

sardine - Project Hosting on Google Code


MfG
Karl Heinz Marbaise


----------



## citizen_erased (9. Mrz 2010)

Sardine scheint ja ganz vortrefflich zu sein. danke!


```
Sardine sardine = SardineFactory.begin("username", "password");
sardine.createDirectory("http://yourdavserver.com/adirectory/");
```


----------

