"Internet-Zugang" für JVM deaktivieren?

9

Ich würde gerne wissen, ob es eine Möglichkeit gibt, der JVM mitzuteilen, dass sie für ein bestimmtes Java-Programm keine Verbindung zu einer Webressource herstellen kann oder dass sie dabei sofort versagt, dh ein Softwareäquivalent zum Ausschalten des Internets zu machen Zugriff mit einem Hardware-Switch. Dies dient zur Unterstützung eines automatisierten Tests. Die Deaktivierung der Firewall des Systems ist für mich keine Option.

Hintergrund: Ich arbeite derzeit an einem Java-Problem, bei dem die XML-Identitätstransformation nicht mit einem DOCTYPE funktioniert, auf den in XML wie folgt verwiesen wird:

%Vor%

Das Standardverhalten von DocumentBuilderFactory, TransformerFactory usw. besteht darin, auf das Web nach fehlenden Entitäten zuzugreifen. Während das Update die meisten meiner Probleme gelöst hat, möchte ich diese Funktionalität für die Regression testen ein automatisierter Weg in einer "Offline-Umgebung".

    
RobertG 05.09.2014, 08:31
quelle

3 Antworten

2

Der Kommentar von Dunes hat sehr geholfen (Problem Wie alle zu deaktivieren Netzwerkverbindungen in Java ist verwandt), habe ich diese andere Frage übersehen.

Hier ist, was ich verwenden werde, um Netzwerkverbindungen zu verhindern:

  • Starten Sie den Testfall mit JVM-Argumenten -Djava.security.manager = default -Djava.security.policy = / java.policy
  • Als java.policy verwende ich die Standarddatei, die ich bei meiner Java-Installation gefunden habe, und füge die folgenden Zeilen s.t. stuff arbeitet mit TestNG:

    %Vor%

Bei dieser Konfiguration führt jeder Zugriff auf eine externe Quelle wie www.w3.org zu einer AccessControlException:

%Vor%     
RobertG 05.09.2014, 12:03
quelle
1

Sie können einen XML-Katalog verwenden, der die externen Schemas (xsd + dtd) auf Ihrer lokalen Festplatte speichert. Das beschleunigt die normale Verarbeitung und ermöglicht eine schnelle Offline-Entwicklung.

Es ist ein Standardmechanismus.

(Besonders interessant für XHTML, da es eine große Anzahl von HTML-Entities gibt.)

    
Joop Eggen 05.09.2014 08:39
quelle
0

Zugegebenermaßen habe ich das nicht getestet, aber ich denke, es sollte möglich sein, java.net.SocketImplFactory , wodurch SocketImpl s erstellt wird, die entsprechende Ausnahmen auslösen, wenn z. connect wird aufgerufen.

Wie bereits erwähnt, gibt es auch die Möglichkeit, einen Sicherheitsmanager zu definieren. Der Hauptunterschied wäre, denke ich, welche Art von Ausnahmen würde dadurch ausgelöst werden. Ich glaube nicht, dass es eine Möglichkeit gibt zu verhindern, dass eine solche Lösung SecurityException s anstatt SocketException s oder andere IOException s auslöst, was wichtig sein kann, um den Fehlerbehandlungscode korrekt zu testen.

    
Dolda2000 05.09.2014 08:37
quelle

Tags und Links