让MyEclipse的xdoclet 识别自定义的标签属性

在开发中遇到xdoclet去运行hibernate中的注释时,发现xdoclet是识别不了hibernate的filter-def和filter,filter-param等,找找xdoclet的源码不难发现,其实xdoclet去解析java文件的注释时,都是通过一个扩展名为xdt的模板文件来生成的,它里面用的是自定义的标签语言,本人觉的不太难理解,就上面的例子而言,要想让xdoclet的hibernate模块能识别过滤器的标签,增加过滤器的识别模版语言,先从MyEclipse中找到xdoclet的hibernate模块jar包,再从jar包中获得模板文件 :

<?xml version="1.0" encoding="<XDtConfig:configParameterValue paramName='Xmlencoding'/>"?>

<!DOCTYPE hibernate-mapping PUBLIC
    "<XDtXml:publicId/>"
    "<XDtXml:systemId/>">

<hibernate-mapping
      <XDtClass:ifHasClassTag tagName="hibernate.mapping" paramName="schema" superclasses="false">
        schema="<XDtClass:classTagValue tagName="hibernate.mapping" paramName="schema" />"
      </XDtClass:ifHasClassTag>
      <XDtClass:ifHasClassTag tagName="hibernate.mapping" paramName="default-cascade" superclasses="false">
        default-cascade="<XDtClass:classTagValue tagName="hibernate.mapping" paramName="default-cascade" values="none,save-update"/>"
      </XDtClass:ifHasClassTag>
      <XDtClass:ifHasClassTag tagName="hibernate.mapping" paramName="auto-import" superclasses="false">
        auto-import="<XDtClass:classTagValue tagName="hibernate.mapping" paramName="auto-import" values="true,false" />"
      </XDtClass:ifHasClassTag>
>
     
   
    <XDtHibernate:logMapping/>
    <class
      <XDtClass:ifHasClassTag tagName="hibernate.class" superclasses="false">
        name="<XDtClass:fullTransformedClassName />"
      </XDtClass:ifHasClassTag>
      <XDtClass:ifHasClassTag tagName="hibernate.class" paramName="table" superclasses="false">
        table="<XDtClass:classTagValue tagName="hibernate.class" paramName="table" />"
      </XDtClass:ifHasClassTag>
      <XDtClass:ifHasClassTag tagName="hibernate.class" paramName="schema" superclasses="false">
        schema="<XDtClass:classTagValue tagName="hibernate.class" paramName="schema" />"
      </XDtClass:ifHasClassTag>
      <XDtClass:ifHasClassTag tagName="hibernate.class" paramName="lazy" superclasses="true">
        lazy="<XDtClass:classTagValue tagName="hibernate.class" paramName="lazy" values="true,false" />"
      </XDtClass:ifHasClassTag>
      <XDtClass:ifHasClassTag tagName="hibernate.class" paramName="proxy" superclasses="false">
        proxy="<XDtClass:classTagValue tagName="hibernate.class" paramName="proxy" />"
      </XDtClass:ifHasClassTag>
      <XDtClass:ifHasClassTag tagName="hibernate.class" paramName="polymorphism" superclasses="false">
        polymorphism="<XDtClass:classTagValue tagName="hibernate.class" paramName="polymorphism" values="explicit,implicit" />"
      </XDtClass:ifHasClassTag>
      <XDtClass:ifHasClassTag tagName="hibernate.class" paramName="dynamic-update" superclasses="false">
        dynamic-update="<XDtClass:classTagValue tagName="hibernate.class" paramName="dynamic-update" values="true,false" default="false" />"
      </XDtClass:ifHasClassTag>
      <XDtClass:ifHasClassTag tagName="hibernate.class" paramName="dynamic-insert" superclasses="false">
        dynamic-insert="<XDtClass:classTagValue tagName="hibernate.class" paramName="dynamic-insert" values="true,false" default="false" />"
      </XDtClass:ifHasClassTag>
      <XDtClass:ifHasClassTag tagName="hibernate.class" paramName="select-before-update" superclasses="false">
        select-before-update="<XDtClass:classTagValue tagName="hibernate.class" paramName="select-before-update" values="true,false" default="false" />"
      </XDtClass:ifHasClassTag>
      <XDtClass:ifHasClassTag tagName="hibernate.class" paramName="optimistic-lock" superclasses="false">
        optimistic-lock="<XDtClass:classTagValue tagName="hibernate.class" paramName="optimistic-lock" values="version,none,all,dirty" default="version"/>"
      </XDtClass:ifHasClassTag>
      <XDtClass:ifHasClassTag tagName="hibernate.class" paramName="mutable" superclasses="false">
        mutable="<XDtClass:classTagValue tagName="hibernate.class" paramName="mutable" values="true,false" />"
      </XDtClass:ifHasClassTag>
      <XDtClass:ifHasClassTag tagName="hibernate.class" paramName="discriminator-value" superclasses="false">
        discriminator-value="<XDtClass:classTagValue tagName="hibernate.class" paramName="discriminator-value" />"
      </XDtClass:ifHasClassTag>
      <XDtClass:ifHasClassTag tagName="hibernate.class" paramName="where" superclasses="false">
        where="<XDtClass:classTagValue tagName="hibernate.class" paramName="where" />"
      </XDtClass:ifHasClassTag>
      <XDtClass:ifHasClassTag tagName="hibernate.class" paramName="persister" superclasses="false">
        persister="<XDtClass:classTagValue tagName="hibernate.class" paramName="persister" />"
      </XDtClass:ifHasClassTag>
      <XDtClass:ifHasClassTag tagName="hibernate.class" paramName="batch-size" superclasses="false">
        batch-size="<XDtClass:classTagValue tagName="hibernate.class" paramName="batch-size" />"
      </XDtClass:ifHasClassTag>
    >
   
    <XDtClass:ifHasClassTag tagName="hibernate.cache" superclasses="false">
        <cache usage="<XDtClass:classTagValue tagName="hibernate.cache" paramName="usage" values="read-write,nonstrict-read-write,read-only,transactional" />" />
    </XDtClass:ifHasClassTag>

    <XDtClass:ifHasClassTag tagName="hibernate.jcs-cache" superclasses="false">
        <jcs-cache usage="<XDtClass:classTagValue tagName="hibernate.jcs-cache" paramName="usage" values="read-only,nonstrict-read-write,read-write,transactional" />" />
    </XDtClass:ifHasClassTag>

    <XDtHibernate:ifHasPrimitiveId>
        <id
            name="<XDtMethod:propertyName/>"
          <XDtMethod:ifDoesntHaveMethodTag tagName="hibernate.column">
            column="<XDtMethod:methodTagValue tagName="hibernate.id" paramName="column" default="<XDtMethod:propertyName/>" />"
          </XDtMethod:ifDoesntHaveMethodTag>
            type="<XDtMethod:methodTagValue tagName="hibernate.id" paramName="type" default="<XDtMethod:methodType/>" />"
          <XDtMethod:ifHasMethodTag tagName="hibernate.id" paramName="length">
            length="<XDtMethod:methodTagValue tagName="hibernate.id" paramName="length" />"
          </XDtMethod:ifHasMethodTag>
          <XDtMethod:ifHasMethodTag tagName="hibernate.id" paramName="access">
            access="<XDtMethod:methodTagValue tagName="hibernate.id" paramName="access"/>"
          </XDtMethod:ifHasMethodTag>
          <XDtMethod:ifHasMethodTag tagName="hibernate.id" paramName="unsaved-value">
            unsaved-value="<XDtMethod:methodTagValue tagName="hibernate.id" paramName="unsaved-value" />"
          </XDtMethod:ifHasMethodTag>
        >
            <XDtMethod:forAllMethodTags tagName="hibernate.column">
                <column
                    name="<XDtHibernate:computeColumnName base='<XDtMethod:methodTagValue tagName="hibernate.column" paramName="name"/>'/>"
                  <XDtMethod:ifHasMethodTag tagName="hibernate.column" paramName="length">
                    length="<XDtMethod:methodTagValue tagName="hibernate.column" paramName="length" />"
                  </XDtMethod:ifHasMethodTag>
                  <XDtMethod:ifHasMethodTag tagName="hibernate.column" paramName="unique-key">
                    unique-key="<XDtMethod:methodTagValue tagName="hibernate.column" paramName="unique-key" />"
                  </XDtMethod:ifHasMethodTag>
                  <XDtMethod:ifHasMethodTag tagName="hibernate.column" paramName="index">
                    index="<XDtMethod:methodTagValue tagName="hibernate.column" paramName="index" />"
                  </XDtMethod:ifHasMethodTag>
                  <XDtMethod:ifHasMethodTag tagName="hibernate.column" paramName="not-null">
                    not-null="<XDtMethod:methodTagValue tagName="hibernate.column" paramName="not-null" default="false" />"
                  </XDtMethod:ifHasMethodTag>
                  <XDtMethod:ifHasMethodTag tagName="hibernate.column" paramName="unique">
                    unique="<XDtMethod:methodTagValue tagName="hibernate.column" paramName="unique" default="false" />"
                  </XDtMethod:ifHasMethodTag>
                  <XDtMethod:ifHasMethodTag tagName="hibernate.column" paramName="sql-type">
                    sql-type="<XDtMethod:methodTagValue tagName="hibernate.column" paramName="sql-type" />"
                  </XDtMethod:ifHasMethodTag>
                />
            </XDtMethod:forAllMethodTags>
            <generator class="<XDtMethod:methodTagValue tagName="hibernate.id" paramName="generator-class" />">
              <XDtMethod:forAllMethodTags tagName="hibernate.generator-param" >
                <param<XDtConfig:ifConfigParamGreaterOrEquals paramName="version" value="2.0"> name="<XDtMethod:methodTagValue tagName="hibernate.generator-param" paramName="name" />"</XDtConfig:ifConfigParamGreaterOrEquals>><XDtMethod:methodTagValue tagName="hibernate.generator-param" paramName="value" /></param>
              </XDtMethod:forAllMethodTags>
              <XDtMethod:ifHasMethodTag tagName="hibernate.id" paramName="generator-parameter-1">
                <param><XDtMethod:methodTagValue tagName="hibernate.id" paramName="generator-parameter-1" /></param>
              </XDtMethod:ifHasMethodTag>
              <XDtMethod:ifHasMethodTag tagName="hibernate.id" paramName="generator-parameter-2">
                <param><XDtMethod:methodTagValue tagName="hibernate.id" paramName="generator-parameter-2" /></param>
              </XDtMethod:ifHasMethodTag>
              <XDtMethod:ifHasMethodTag tagName="hibernate.id" paramName="generator-parameter-3">
                <param><XDtMethod:methodTagValue tagName="hibernate.id" paramName="generator-parameter-3" /></param>
              </XDtMethod:ifHasMethodTag>
              <XDtMerge:merge file="hibernate-generator-params-{0}.xml"> 
              <!-- 
                  To add non XDoclet generator parameters, create a file named
                  hibernate-generator-params-<XDtClass:className />.xml
                  containing the additional parameters and place it in your merge dir.
              -->
              </XDtMerge:merge>     
            </generator>
        </id>
    </XDtHibernate:ifHasPrimitiveId>
    <XDtHibernate:ifHasCompositeId>
        <composite-id
            name="<XDtMethod:propertyName/>"
            class="<XDtMethod:methodTagValue tagName="hibernate.id" paramName="class" default="<XDtMethod:methodType/>"/>"
            <XDtMethod:ifHasMethodTag tagName="hibernate.id" paramName="unsaved-value">
            unsaved-value="<XDtMethod:methodTagValue tagName="hibernate.id" paramName="unsaved-value" values="any,none"/>"
            </XDtMethod:ifHasMethodTag>
        >
        <XDtClass:pushClass value="<XDtMethod:methodType/>">
            <XDtMethod:forAllMethods superclasses="true" sort="true">
                 <XDtMethod:ifHasMethodTag tagName="hibernate.property">
                     <key-property
                        name="<XDtMethod:propertyName />"
                        type="<XDtMethod:methodTagValue tagName="hibernate.property" paramName="type" default="<XDtMethod:methodType/>"/>"
                        column="<XDtMethod:methodTagValue tagName="hibernate.property" paramName="column" default="<XDtMethod:propertyName/>"/>"
                       <XDtMethod:ifHasMethodTag tagName="hibernate.property" paramName="length">
                        length="<XDtMethod:methodTagValue tagName="hibernate.property" paramName="length" />"
                       </XDtMethod:ifHasMethodTag>
                />
                </XDtMethod:ifHasMethodTag>

                <XDtMethod:ifHasMethodTag tagName="hibernate.many-to-one">
                    <key-many-to-one
                        name="<XDtMethod:propertyName/>"
                        class="<XDtMethod:methodTagValue tagName="hibernate.many-to-one" paramName="class" default="<XDtMethod:methodType/>" />"
                        column="<XDtMethod:methodTagValue tagName="hibernate.many-to-one" paramName="column" default="<XDtMethod:propertyName/>"/>"
                    />
                </XDtMethod:ifHasMethodTag>
            </XDtMethod:forAllMethods>
        </XDtClass:pushClass>
        </composite-id>
    </XDtHibernate:ifHasCompositeId>


    <XDtClass:ifHasClassTag tagName="hibernate.discriminator" superclasses="false">
        <discriminator
        <XDtClass:ifHasClassTag tagName="hibernate.discriminator" paramName="column" superclasses="false">
            column="<XDtClass:classTagValue tagName="hibernate.discriminator" paramName="column" />"
        </XDtClass:ifHasClassTag>
        <XDtClass:ifHasClassTag tagName="hibernate.discriminator" paramName="not-null" superclasses="false">
            not-null="<XDtClass:classTagValue tagName="hibernate.discriminator" values="true,false" paramName="not-null" default="true" />"
        </XDtClass:ifHasClassTag>
        <XDtClass:ifHasClassTag tagName="hibernate.discriminator" paramName="type" superclasses="false">
            type="<XDtClass:classTagValue tagName="hibernate.discriminator" paramName="type" default="string"/>"
        </XDtClass:ifHasClassTag>
          <XDtClass:ifHasClassTag tagName="hibernate.discriminator" paramName="length" superclasses="false">
            length="<XDtClass:classTagValue tagName="hibernate.discriminator" paramName="length" />"
          </XDtClass:ifHasClassTag>
        <XDtClass:ifHasClassTag tagName="hibernate.discriminator" paramName="force" superclasses="false">
            force="<XDtClass:classTagValue tagName="hibernate.discriminator" values="true,false" paramName="force" default="false" />"
        </XDtClass:ifHasClassTag>
        <XDtClass:ifHasClassTag tagName="hibernate.discriminator" paramName="insert" superclasses="false">
            insert="<XDtClass:classTagValue tagName="hibernate.discriminator" values="true,false" paramName="insert" default="true" />"
        </XDtClass:ifHasClassTag>
        />
    </XDtClass:ifHasClassTag>

    <XDtMethod:forAllMethods superclasses="true" sort="true">
        <XDtMethod:ifHasMethodTag tagName="hibernate.version">
        <version
            name="<XDtMethod:propertyName />"
            column="<XDtMethod:methodTagValue tagName="hibernate.version" paramName="column" default="<XDtMethod:propertyName/>" />"
            type="<XDtMethod:methodTagValue tagName="hibernate.version" paramName="type" default="<XDtMethod:methodType/>" />"
          <XDtMethod:ifHasMethodTag tagName="hibernate.version" paramName="access">
            access="<XDtMethod:methodTagValue tagName="hibernate.version" paramName="access" />"
          </XDtMethod:ifHasMethodTag>
          <XDtMethod:ifHasMethodTag tagName="hibernate.version" paramName="unsaved-value">
            unsaved-value="<XDtMethod:methodTagValue tagName="hibernate.version" paramName="unsaved-value" />"
          </XDtMethod:ifHasMethodTag>
        />
        </XDtMethod:ifHasMethodTag>
    </XDtMethod:forAllMethods>

    <XDtMethod:forAllMethods superclasses="true" sort="true">
        <XDtMethod:ifHasMethodTag tagName="hibernate.timestamp">
        <timestamp
            name="<XDtMethod:propertyName/>"
            column="<XDtMethod:methodTagValue tagName="hibernate.timestamp" paramName="column"  default="<XDtMethod:propertyName/>" />"
          <XDtMethod:ifHasMethodTag tagName="hibernate.timestamp" paramName="access">
            access="<XDtMethod:methodTagValue tagName="hibernate.timestamp" paramName="access" />"
          </XDtMethod:ifHasMethodTag>
          <XDtMethod:ifHasMethodTag tagName="hibernate.timestamp" paramName="unsaved-value">
            unsaved-value="<XDtMethod:methodTagValue tagName="hibernate.timestamp" paramName="unsaved-value" />"
          </XDtMethod:ifHasMethodTag>
        />
        </XDtMethod:ifHasMethodTag>
    </XDtMethod:forAllMethods>

    <XDtCollection:create name="backupClass" type="map" />
    <XDtCollection:put name="backupClass" key="oldClassName" value="<XDtClass:fullClassName />" />

    <XDtMethod:forAllMethods superclasses="true" sort="true">
        <XDtMerge:merge file="xdoclet/modules/hibernate/resources/hibernate-properties.xdt">
        </XDtMerge:merge>
    </XDtMethod:forAllMethods>

    <XDtMerge:merge file="hibernate-properties.xml">
    </XDtMerge:merge>

    <XDtMerge:merge file="hibernate-properties-{0}.xml">
        <!--
            To add non XDoclet property mappings, create a file named
                hibernate-properties-<XDtClass:className />.xml
            containing the additional properties and place it in your merge dir.
        -->
    </XDtMerge:merge>
   
    <XDtMerge:merge file="xdoclet/modules/hibernate/resources/hibernate-subclass.xdt">
    </XDtMerge:merge>
    <XDtMerge:merge file="xdoclet/modules/hibernate/resources/hibernate-joined-subclass.xdt">
    </XDtMerge:merge>
   
    <XDtClass:forAllClassTags tagName="hibernate.filter" >
       <!-- 插入过滤器<XDtClass:classTagValue tagName="hibernate.filter" paramName="name" /> -->
       <filter
       <XDtClass:ifHasClassTag tagName="hibernate.filter" paramName="name" superclasses="false">
        name="<XDtClass:classTagValue tagName="hibernate.filter" paramName="name" />"
        </XDtClass:ifHasClassTag>
 <XDtClass:ifHasClassTag tagName="hibernate.filter" paramName="condition" superclasses="false">
        condition="<XDtClass:classTagValue tagName="hibernate.filter" paramName="condition" />"
        </XDtClass:ifHasClassTag>
 />
      </XDtClass:forAllClassTags>


    </class>

    <XDtClass:pushClass value="<XDtCollection:get name='backupClass' key='oldClassName' />">
        <XDtClass:forAllClassTags tagName="hibernate.query" superclasses="false">
            <XDtMerge:merge file="xdoclet/modules/hibernate/resources/hibernate-query.xdt">
            </XDtMerge:merge>
        </XDtClass:forAllClassTags>
        <XDtHibernate:forAllSubclasses>
            <XDtClass:forAllClassTags tagName="hibernate.query" superclasses="false">
                <XDtMerge:merge file="xdoclet/modules/hibernate/resources/hibernate-query.xdt">
                </XDtMerge:merge>
            </XDtClass:forAllClassTags>
        </XDtHibernate:forAllSubclasses>
    </XDtClass:pushClass>

     <XDtClass:ifHasClassTag tagName="hibernate.filter-def" superclasses="false">
        <!-- 定义过滤器 <XDtClass:classTagValue tagName="hibernate.filter-def" paramName="name" />-->
 <filter-def
 <XDtClass:ifHasClassTag tagName="hibernate.filter-def" paramName="name" superclasses="false">
        name="<XDtClass:classTagValue tagName="hibernate.filter-def" paramName="name" />"
        </XDtClass:ifHasClassTag>
 >
 <!-- 参数 -->
 <XDtClass:forAllClassTags tagName="hibernate.filter-param" superclasses="false" >
 <filter-param 
          <XDtClass:ifHasClassTag tagName="hibernate.filter-param" paramName="name" superclasses="false">
        name="<XDtClass:classTagValue tagName="hibernate.filter-param" paramName="name" />"
        </XDtClass:ifHasClassTag>
 <XDtClass:ifHasClassTag tagName="hibernate.filter-param" paramName="type" superclasses="false">
        type="<XDtClass:classTagValue tagName="hibernate.filter-param" paramName="type" />"
        </XDtClass:ifHasClassTag>
 />
 </XDtClass:forAllClassTags>
 </filter-def>
      </XDtClass:ifHasClassTag>

    <XDtCollection:destroy name="backupClass" />

</hibernate-mapping>

 红色为自定义添加的内容,重新打成jar,替换成原来MyEclipse插件的hibernate模块的jar包,到此可以识别自定义的标签了

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值