Как разрешить / запретить конкретный вызов метода Java из XSL в Java? - PullRequest
2 голосов
/ 18 августа 2011

Основная цель: я хотел бы контролировать, какие классы и / или методы, которые разрешено вызывать при разборе XSL-файла через Java.

Использование TransformerFactory:

TransformerFactory factory = TransformerFactory.newInstance();
StreamSource xslStream = new StreamSource(inXSL);
Transformer transformer = factory.newTransformer(xslStream);
...
transformer.transform(in, out);

Можно вызывать Java-методы, имея это в XSL-файле:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="java">
...
<currentDay><xsl:value-of select="java:util.Date.new()" /></currentDate>

Значение java:util.Date.net() является новым Date (). ToString ().

Я знаю, что яможно использовать:

factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, false);

Но это отрицает все.

Два вопроса:

1) Как мне контролировать, какие конкретные Java-методы разрешены для вызова?

2) Если невозможно использовать TransformerFactory, какие еще библиотеки XSL можно использовать для управления этим?

1 Ответ

0 голосов
/ 18 августа 2011

Из вашего примера видно, что вы используете процессор Xalan XSLT (расширяемость Java варьируется от одного процессора к другому).

Если вы перейдете на Saxon, то по умолчанию вы НЕ сможете вызывать произвольные методы Java из кода XSLT, вы сможете только вызывать функции расширения, которые были явно зарегистрированы как «интегрированные функции расширения». Похоже, это то, что вы просите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...