栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在Eclipse中从XML生成Java代码

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在Eclipse中从XML生成Java代码

这正是模型到文本(M2T)项目中的JET组件的用途。实际上,您甚至可以使用JET创建项目,.classpath以及所需的任何其他文件。

Jet模板如下。请注意,这些模板必须完全按照所示命名。

/templates/main.jet

<%@taglib prefix="ws" id="org.eclipse.jet.workspaceTags" %><%-- Main entry point for com.lacqui.command.xform --%><%--   Let c:iterate tags set the XPath context object.  For 100% compatibility with JET 0.9.x or earlier, remove this statement --%><c:setVariable var="org.eclipse.jet.taglib.control.iterateSetsContext" select="true()"/>    <c:setVariable select="/command-list" var="command-list" />    --- traverse input model, performing calculations and storing     --- the results as model annotations via c:set tag    <c:set select="$command-list" name="project">com.lacqui.commands</c:set>    <c:set select="$command-list" name="commandPkg">com.lacqui.commands</c:set>    <c:set select="$command-list" name="commandDir"><c:get select="translate($command-list/@commandPkg,'.','/')" /></c:set>    <c:iterate select="$command-list/command" var="command" > - Derive the class name from the name of the command        <c:set select="$command" name="classname"><c:get select="camelCase($command/@name)" />Command</c:set>        <c:iterate select="$command/argument" var="argument"> <c:if test="not($argument/@optional)">     <c:set select="$argument" name="optional">false</c:set> </c:if>        </c:iterate>    </c:iterate>   --- traverse annotated model, performing text generation actions    --- such as ws:file, ws:folder and ws:project   <ws:project name="{$command-list/@project}" />   <ws:file template="templates/project.jet" path="{$command-list/@project}/.project"  />   <ws:file template="templates/classpath.jet" path="{$command-list/@project}/.classpath"/>    <c:iterate select="$command-list/command" var="command" >        <ws:file template="templates/class.jet" path="{$command-list/@project}/src/{$command-list/@commandDir}/{$command/@classname}.java" replace="true"/>    </c:iterate>

/templates/classpath.jet

<?xml version="1.0" encoding="UTF-8"?><classpath>    <classpathentry kind="src" path="src"/>    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>    <classpathentry kind="output" path="bin"/></classpath>

/templates/project.jet

<?xml version="1.0" encoding="UTF-8"?><projectDescription>    <name><c:get select="$command-list/@project" /></name>    <comment></comment>    <projects>    </projects>    <buildSpec>        <buildCommand> <name>org.eclipse.jdt.core.javabuilder</name> <arguments> </arguments>        </buildCommand>    </buildSpec>    <natures>        <nature>org.eclipse.jdt.core.javanature</nature>    </natures></projectDescription>

/templates/class.jet

package <c:get select="$command-list/@commandPkg" />;public class <c:get select="$command/@classname" /> extends Command {    public ResponseCode execute() {        Server srv = getServer();<c:iterate select="$command/capability" var="capability">        if (srv.hasCapability(Capabilities.<c:get select="$capability/@name"/>) == false) { Log.debug("Attempting non-available capability: <c:get select="$capability/@name"/>");        }</c:iterate>        <c:iterate select="$command/argument" var="argument">        String <c:get select="$argument/@name"/> = getArgument("<c:get select="$argument/@name"/>");<c:if test="$argument/@optional = 'false'" >        if (<c:get select="$argument/@name"/> == null) {  throw new InvalidArgumentException("Require <c:get select="$argument/@name"/>");        }</c:if></c:iterate>        String command = "GROUP";<c:iterate select="$command/argument" var="argument">        if (<c:get select="$argument/@name"/> != null) command += " -<c:get select="$argument/@name"/> " + <c:get select="$argument/@name"/>;</c:iterate>        srv.send(command);        return srv.getResponse();    }}

并使用此模型:

<command-list>    <command name="DATE" />    <command name="GROUP">        <capability name="LOGGER" />        <capability name="AUTHENTICATOR" />        <argument name="groupname" />    </command>    <command name="ARTICLE">        <capability name="READER" />        <argument name="article-id" optional="false" />        <argument name="message-id" optional="true" />    </command></command-list>

提供了一个完整的Java项目com.lacqui.commands,其中包含三个Java文件:

package com.lacqui.commands;public class ArticleCommand extends Command {    public ResponseCode execute() {        Server srv = getServer();        if (srv.hasCapability(Capabilities.READER) == false) { Log.debug("Attempting non-available capability: READER");        }        String article-id = getArgument("article-id");        if (article-id == null) {  throw new InvalidArgumentException("Require article-id");        }        String message-id = getArgument("message-id");        String command = "GROUP";        if (article-id != null) command += " -article-id " + article-id;        if (message-id != null) command += " -message-id " + message-id;        srv.send(command);        return srv.getResponse();    }}

还有这个:

package com.lacqui.commands;public class GroupCommand extends Command {    public ResponseCode execute() {        Server srv = getServer();        if (srv.hasCapability(Capabilities.LOGGER) == false) { Log.debug("Attempting non-available capability: LOGGER");        }        if (srv.hasCapability(Capabilities.AUTHENTICATOR) == false) { Log.debug("Attempting non-available capability: AUTHENTICATOR");        }        String groupname = getArgument("groupname");        if (groupname == null) {  throw new InvalidArgumentException("Require groupname");        }        String command = "GROUP";        if (groupname != null) command += " -groupname " + groupname;        srv.send(command);        return srv.getResponse();    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/451374.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号