如何在Eclipse Jet中生成代码时抛出异常?

时间:2014-01-14 13:44:02

标签: java xml eclipse code-generation jet

我使用Eclipse Jet生成给定XML文件的代码。但我需要验证输入文件并在生成时抛出异常。例如:

<c:choose select="count(/topItem/childItems)">
<c:when test="0">
// throw exception
</c:when>
<c:otherwise>
// continue code generation
</c:otherwise>
</c:choose>

我该如何处理?

1 个答案:

答案 0 :(得分:1)

没有完全按照您描述的任何功能 - 简单地终止代码生成的能力。有些事情可以提供相同的功能:

1)您可以在choose元素中执行测试,并使when元素的范围成为要执行的代码生成的剩余部分。如果您将测试放在main.jet

中,则此范围可能是整个代码生成
// in main.jet: 

<c:choose>
    <c:when test="..a condition that should be true in order to continue..">
        // include a template that drives all processing to be
        // performed if the test resolves to true 
        <c:include template="" /> 
    </c:when>
    <c:otherwise>
        // Log the failure to validate and don't process
        <c:log severity="error">Describe the error here</c:log>
    </c:otherwise>
</c:choose>

请注意,在此用法中,choose元素类似于if-then-else。

2)基本上与(1)相同,除了您将选择放在用于生成文件的文本/内容的模板中。这不同之处在于此用法不会阻止生成文件。它只是减少了写入该单个文件的内容。

// in a content-producing template: 

<c:choose>
    <c:when test="..a condition that should be true in order to continue..">
        // Put the remainder of the template logic inside the
        // scope of this when element 
    </c:when>
    <c:otherwise>
        // Log the failure to validate and don't process
        <c:log severity="error">Describe the error here</c:log>
    </c:otherwise>
</c:choose>

我认为这不是你想要的

3)这是一个高级主题,但您可以编写自定义JET标记来执行此类条件处理。它就像一个if元素,但测试将在内容处理后运行,并且仅在测试为真时才包含在输出中。您可以测试在该处理期间可能设置的变量,以防止生成的代码的输出。我将把该标签的实现留给另一个问题。

我认为你想要做的是(1)的一种形式:对你在main.jet中采取的第一个动作执行输入文件的一组验证,然后使main.jet的其余部分成为条件验证的结果。