当前位置: 代码迷 >> Eclipse >> 让MyEclipse的xdoclet 判别自定义的标签属性
  详细解决方案

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

热度:21   发布时间:2016-04-23 02:16:50.0
让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包,到此可以识别自定义的标签了

  相关解决方案