Play 1.2.4: рендеринг XML в шаблоне - PullRequest
1 голос
/ 19 декабря 2011

Я недавно обновился до Play 1.2.4, и я считаю, что исправление ошибки для следующего билета негативно сказалось на некоторых моих кодах:

https://play.lighthouseapp.com/projects/57987/tickets/549-play-rest-xml-rendering-of-html-entities-issue

Я считаю,реализованное выше исправление исключает все сущности HTML из строк XML - включая саму фактическую структуру XML.

Таким образом, <someXml/> становится &lt;someXml/&gt;

Проблема, с которой я сталкиваюсь, заключается в том, что я используюшаблон для обслуживания XML в качестве вызова API, поэтому XML возвращается вызывающему абоненту и, следовательно, бесполезен.

Я попытался использовать:

#{verbatim} ${ anObject.someXml } #{/verbatim}

и:

${ anObject.someXml.raw() } 

для получения XML в необработанном формате, но это не работает.

Часть кода, вызывающая эту проблему, можно найти в groovy шаблоне __safeFasterметод (строка 400).

Кто-нибудь знает, как я могу обойти эту новую функцию?

Ответы [ 2 ]

2 голосов
/ 20 декабря 2011

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

if (template.name.endsWith(".xml"))
    return StringEscapeUtils.escapeXml(val.toString());

Чтобы обойти эту проблему, мы устанавливаем ответcontent-type до text/xml в соответствующем контроллере и изменение расширения шаблона на .txt.

Надеемся, что разработчики в Play исправят эту проблему в следующем выпуске.

1 голос
/ 19 декабря 2011

Если вы пытаетесь отобразить строку XML, вы можете использовать метод renderXml из play.mvc.Controller для отображения отформатированного XML в вашем браузере.

Я проверял этодобавив эту строку в мой файл conf / маршруты:

# Render XML
GET    /renderXml    Application.renderXml(format:'xml')

Затем создайте этот метод в Application.java, который читает XML-файл и отображает его (используя Guava I / O ):

    public static void renderXml() throws FileNotFoundException, IOException {      
    File xmlFile = new File("app/models", "xmlFile.xml");
    InputSupplier<InputStreamReader> inReader = Files.newReaderSupplier(xmlFile, Charsets.UTF_8);
    List<String> lines = CharStreams.readLines(inReader);

    String outputXml = "";

    for (String line : lines) {
        outputXml += line;
    }

    renderXml(outputXml);
}

Надеюсь, это поможет!

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