2011-12-19 6 views
1

에서 XML 렌더링 나는 최근에 1.2.4 플레이로 업그레이드하고 난 다음 티켓에 대한 버그 수정이 내 코드의 일부에 부정적인 영향했다 믿습니다재생 1.2.4 : 템플릿

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

위 구현 된 픽스는 실제 XML 구조 자체를 포함하여 XML 문자열에서 모든 HTML 엔터티를 이스케이프 처리한다고 생각합니다.

그래서 <someXml/>&lt;someXml/&gt;

난 데 문제는 내가 API 호출로 XML을 제공하는 템플릿을 사용하고 있다는 점이다되고, 그래서 XML은 호출자에게 반환 탈출 때문에 쓸모가있다.

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

과 :

나는 사용하여 시도했다

${ anObject.someXml.raw() } 

원시 형식으로 XML을 얻을 수있는,하지만이 작동하지 않습니다.

이 문제를 일으키는 코드 부분은 groovy template__safeFaster 메서드 (줄 400)에서 찾을 수 있습니다.

는 아무도 내가이 새로운 기능의 주위에 얻을 수있는 방법을 알고 있나요

?

답변

2

, 문제의 원인은 __safeFaster 방법이다 - 또는 더 구체적으로, 라인 :

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

우리가 content-typetext/xml을에 대한 응답을 설정하고이 문제를 해결하려면 템플릿 확장을 .txt으로 변경하십시오.

희망 재생의 개발자는 다음 릴리스에서이 문제가 해결됩니다. 답변에 대한

1

XML 문자열을 렌더링하려는 경우 play.mvc.Controller의 renderXml 메서드를 사용하여 브라우저에 형식이 지정된 XML을 표시 할 수 있습니다.

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

그런 다음 XML 파일을 읽어 들여, 렌더링 Application.java에서이 방법을 만드는

이 ( 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); 
} 

나는 나의 conf의/경로의 파일에 다음 행을 추가하여 테스트

희망이 도움이됩니다. 위의 질문에서 언급 한 바와 같이

+0

덕분에 - 나는 실제로 몇 개체를 (그것을 할 수있는 간단한 방법입니다)를 사용하여 XML 파일을 작성하는 템플릿을 사용하고 - 그래서 나는이 방법으로 XML을 렌더링 할 수 없습니다입니다. –

관련 문제