Das JavaProtocol ist ein Protocol für die ProtocolFactory. Es ist als Bestandteil der Design-Utils.
Anwendung#
Das JavaProtocol wird eingesetzt, wenn URL-Zugriffe auf Classpath-Ressourcen erfolgen. Viele Komponenten sind heute so gebaut, dass die Übergabe von URLs erwartet wird.Beim Testen können so Ressourcen geladen werden, ohne über HTTP-Protocol zu gehen. Dies kann beim Entwickeln von Tests für HtmlClient nützlich sein, da man auf einer statischen, gespeicherten Seite arbeiten kann.
Vorteile zu File-URLs#
Als Ersatz für File-URLs gibt es einige Vorteile:- Relativer Pfad: Der Pfad beginnt beim Classpath, zum Beispiel ist "/test.properties" auf allen Konfigurationen auffindbar.
- Systemunabhängigkeit: Es spielt keinen Unterschied, ob die Angabe auf Windows, Unix oder anderen Maschinen gemacht wird.
- Sicherheit: Wenn Java Applications mit Application Boundary Enforcement laufen, wie dies im Cloud Computing zum Beispiel bei Google Application Engine Apps der Fall ist, ist kein Zugriff auf das Dateisystem möglich (und auch nicht sinnvoll). Anmerkung: Hier wird im Moment noch an der Kompatibilität gearbeitet.
Vorteil zu HTTP-URLs#
Als Ersatz für HTTP-URLs gibt es einige Vorteile:- Geschwindigkeit: Es wird keine TCP/IP-Verbindung aufgebaut, der Inhalt wird direkt gestreamt.
- Sicherheit: Der Request verlässt nicht die Virtuelle Maschine.
- Einfachheit: Es braucht kein Server gestartet zu werden, die Dateien sind direkt aus dem Classpath zugreifbar.
- URL: Classpath-Ressourcen können direkt über einen URL übergeben werden und brauchen nicht kompliziert über Java-Code gestreamt werden.
Vorteil gegenüber HttpUnitProtocol#
In Fällen in denen es um die Bereitstellung von Streaming-Ressourcen geht und nicht um den Test von Web-Applications oder Servlets, kann JavaProtocol ein Ersatz für HttpUnitProtocol sein.Beispiele#
Entwicklung von Tests HtmlClient#
ProtocolFactory.register(new JavaProtocol()); URL url = new URL("java:/context.html"); Page page = client.begin(url, null, false); Element table = page.getElement("/HTML/BODY/TABLE[2]/TBODY/TR[2]/TD[2]/TABLE[3]/TBODY/TR[2]/TD/BLOCKQUOTE/TABLE/TBODY/TR[2]/TD/BLOCKQUOTE/TABLE/TBODY"); ...