2017-12-12 1 views
1

Ich möchte die Möglichkeit haben, ein Escape-Dienstprogramm zur Verfügung zu stellen, das in einem XSL-Stylesheet verwendet werden kann. Zum Beispiel:So stellen Sie ein Dienstprogramm in XSLT zur Verfügung, während die Sicherheit beibehalten wird

<xsl:stylesheet version="2.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:xalan="http://xml.apache.org/xalan" 
    xmlns:escape="xalan://com.example.myservice.MyEscapeTool"> 

, jedoch in Bezug auf Java, ist mein Verständnis, dass der Mangel an der folgenden Einstellung auf Ihrem TransformerFactory unsicher sein kann:

factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); 

Also tat ich das, aber verständlicherweise diese Blöcke Ihrer Fähigkeit „externe Funktionsaufrufe“ mit folgendem Laufzeitfehler zu verwenden:

FATAL: XPath syntax error at char 12 in {escape:new()}: 
    Cannot find a matching 0-argument function named 
{java:com.example.myservice.MyEscapeTool}new(). Note: external 
function calls have been disabled; 

die zuvor erwähnte FEATURE_SECURE_PROCESSING Flagge entfernen, wird das Problem beheben.

Wie kann ich eine Dienstprogrammfunktion einschließen, die in XSLT aufgerufen werden kann, ohne einen Verlust an Sicherheit mit der Möglichkeit zu verursachen, JEDE beliebige Java-Klasse verfügbar zu machen?

+1

dieser Sound zu mir mehr oder weniger wie "_Du kannst deinen Kuchen nicht haben und es auch essen_" – gtosto

+1

Xalan hat nie XSLT 2 unterstützt. Du solltest überlegen, zu einem XSLT 2 Prozessor wie Saxon 9 zu wechseln, wo du kannst schreibe benutzerdefinierte Funktionen in XSLT mit 'xsl: function' https://www.w3.org/TR/xslt/#stylesheet-functions. Saxon ermöglicht auch integrierte Erweiterungsfunktionen https://www.saxona.com/html/documentation/extensibility/integratedfunctions/ anstelle von reflexive, wo Sie die Funktionen steuern, die Sie in Java implementieren und XSLT verfügbar machen. –

Antwort

1

Wie @MartinHonnen in seinem Kommentar darauf hinweist, wenn Sie Saxon verwenden, können Sie das Stylesheet darauf beschränken, nur "integrierte Erweiterungsfunktionen" zu verwenden, die vor der Ausführung beim XSLT-Prozessor registriert sind, ohne das Stylesheet zuzulassen um irgendeine Klasse/Methode aufzurufen, die sich zufällig im Klassenpfad befindet.

Verwandte Themen