Правило переписывания OCPsoft больше не работает после обновления с 1.0.5 до 1.1.0

При обновлении OCPsoft Rewrite с версии 1.0.5.Final до 1.1.0.Final следующее правило больше не работает, и я не знаю, как это исправить:

.addRule(
    Join.path("/{i}/{d}")
        .where("i").matches("[-_a-zA-Z0-9~*]{8}")
        .where("d").matches("[-_a-zA-Z0-9~*]{32}")
        .to("/resources/html/user/doSomething.html?i={i}&d={d}")
)

В журнале изменений Rewrite есть один момент, который может вам помочь:

Строки конфигурации теперь буквальные. Регулярные выражения должны быть настроены через параметр>, такой как: .defineRule().when(Path.matches("/{*}").where("*").matches(".*"))

Исключение, которое я получаю, следующее:

Exception starting filter OCPsoft Rewrite Filter
    java.lang.NullPointerException
        at org.ocpsoft.rewrite.servlet.config.rule.Join.where(Join.java:199)
        at org.ocpsoft.rewrite.servlet.config.rule.Join.where(Join.java:47)
        at com.myapp.util.RewriteConfigurationProvider.getConfiguration(RewriteConfigurationProvider.java:39)
        ...

2 ответа

Решение

Следующее сработало, мне просто пришлось изменить порядок предложений объединения:

.addRule(
    Join.path("/{i}/{d}")
        .to("/resources/html/user/doSomething.html")
        .where("i").matches("[-_a-zA-Z0-9~*]{8}")
        .where("d").matches("[-_a-zA-Z0-9~*]{32}")
        .withRequestBinding();
)

Спасибо Линкольну, который понял это и ответил на мой вопрос на форумах поддержки Rewrite.

Хм.. это похоже на ошибку, я постараюсь воспроизвести это, но вам не нужно переопределять {i} а также {d} в целевом URL. Join будет обрабатывать это автоматически, если вы используете привязку запроса, например:

.addRule(
   Join.path("/{i}/{d}")
    .where("i").matches("[-_a-zA-Z0-9~*]{8}")
    .where("d").matches("[-_a-zA-Z0-9~*]{32}")
    .to("/resources/html/user/doSomething.html").withRequestBinding();
)

Я предполагаю, что если вы сделаете это, ваша проблема исчезнет. Вы также можете использовать .withInboundCorrection() если вы хотите перенаправить запросы на старый .html URL на новый URL.

Если у вас все еще есть проблема, пожалуйста, напишите на форумах поддержки, и мы выясним это:)

Извините, что у вас возникли проблемы, надеюсь, больше не будет проблем:)

Другие вопросы по тегам