2017-10-05 10 views
2

갖는 속도 템플릿 처리를 실패 :어떻게 tracable 메시지

  • 속도 템플릿이나 매크로
  • 일부 개체 개체 ( # 만약 )를 확인하고 중지 (실패하는 방법

추가 프로세싱)을 (Java에서 예외를 throw하는 것과 같이) 실패 장소로 쉽게 추적 할 수있는 방식으로 처리합니다.

나는 이런 식으로 뭔가를 찾고 있어요 :

#if (! $context.treasureMap.containsKey('gold')) 
    #fail('no golden treasure here') 
#end 

배경

나는 받는다는 사이트 페이지를 쓰고 있어요. 속도 컨텍스트는 maven에 의해 주입되고 POM 정보를 포함합니다. 나는 효과적인 정보원으로부터 정보의 존재를 시험하고 싶다. 정보를 사용할 수 없으면 실패하고 싶습니다.

요구 사항

  • 은> 사이트 생성을 실패 받는다는 빌드를 실패> 속도 처리를 실패합니다. 사이트가
  • 바람직에는 구성 고정되어서는 안된다, 그래서
  • 오류 메시지가

    을 시도 (NO 확장을 그냥 일반 속도에 포함 된/도구를 구성,) 실패의 장소로 연결되어야
  • 엄격한 참조 모드
    원치 않는 구성, 모든 경우에 장애가 발생하지 않도록하십시오.
  • #evaluate('#end') 일명 구문 오류
    (내 의도를 가장 잘 설명하는 것으로 선택) 기본적으로 원하는 것. 처리 및 메이븐 빌드를 실패하지만 오류 메시지가 실패 위치로 되돌아 가지 않습니다 : ParseException: Encountered "#end" at line 1, column 1..
+0

적어도 maven 빌드에서 오류 줄/열을 표시하려면 Velocity 예외의 정보가 doxia-site-renderer 아티팩트에 사용되지 않은 것으로 나타났습니다. 내가 문제를보고했습니다. [DOXIASITETOOLS-179] (https://issues.apache.org/jira/browse/DOXIASITETOOLS-179) – Mrkvozrout

답변

0

당신은 exception.See explanation 생산 메소드 호출을해야합니다

하나가 속도 내에서 문제로 실행할 수있는 유일한 장소입니다 예외를 throw하는 방법에 대한 호출이있는 경우 런타임 중에. 예를 들어,이 VTL은 문자열 $ foo는 정의 다음은 IndexOutOfBoundsException가 슬로우에 그 문자열() 메서드를 호출을 시도합니다

예외가 발생합니다
#set ($foo = "bar") 

    #set ($bar = $foo.substring(0,10)) 

, 파서가 처리를 중지됩니다 그 예외를 스택 트리 위로 던져 파서를 실행시키는 메소드에서 잡힐 수 있습니다. 이 시점에서 예외는 정상적으로 처리 될 수 있습니다.

+0

예, 이와 같은 것을 찾고 있는데 오류 메시지가 도움이되지 않습니다. "오류 발생 testpage.vm에 대한 파서 " – Mrkvozrout

+0

하지만 줄은 실패하고 설명이 있습니다. 사용자 정의 예외에 대해서는 https://stackoverflow.com/questions/15659200/how-to-throw-an-user-defined-exception-from-velocity-template-script-vtl을 참조하십시오. – user7294900

+0

어디서나 선 또는 열을 볼 수 없습니다. 페이지가 비어 있고 maven이 인용 한 정보 만 표시합니다. – Mrkvozrout