Кэширование выборок процессора Java XSLT (Xalan) для документа () - PullRequest
2 голосов
/ 11 февраля 2012

Я использую процессор XSLT в JDK 1.6 (Xalan) и широко использую функцию document () для извлечения элементов данных из документов, загруженных из Интернета.Эта обработка выполняется как часть работы по визуализации веб-страницы, и в настоящее время она вызывается каждый раз, когда страница обслуживается.Мне известно о нескольких способах оптимизации нескольких оценок одного и того же документа () из одного и того же сценария XSLT, но моя задача скорее заключается в уменьшении попадания в Интернет;то есть я хотел бы кэшировать извлекаемые внешние документы (также потому, что часто я получаю тайм-аут при попытке извлечь некоторые из них).

Полагаю (надеюсь), у Xalan есть подключаемый класс для извлечениявнешний документ, который я мог перехватить, чтобы внедрить мою политику кэширования, но я не могу найти его в документах или источниках просмотра.Может кто-нибудь указать мне, существует ли он и как его можно настроить?Спасибо.

1 Ответ

2 голосов
/ 11 февраля 2012

Ну, после некоторой настройки отладчика и сканирования исходного кода, я нашел указатель в javadocs, который я не нашел в Google.Класс, который делает трюк, это URIResolver , который можно установить на Transformer с помощью:

        import javax.xml.transform.Source;
        import javax.xml.transform.TransformerException;
        import javax.xml.transform.URIResolver;
        import javax.xml.transform.stream.StreamSource;

        public class CachedURIResolver implements URIResolver
          {
            @Override
            public Source resolve (final String href, final String base) 
              throws TransformerException 
              {
                // TODO: caching logic 
                return new StreamSource(href);
              }
          }

        ...

        final Transformer transformer = transformerFactory.newTransformer(transformation); 
        transformer.setURIResolver(new CachedURIResolver());

Должна быть более тонкая обработка href и base, я думаю, в случаеотносительных URL, но в моем случае это не нужно.

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