Patches item #446889, was opened at 2001-08-01 11:39 You can respond by visiting: http://sourceforge.net/tracker/?func=detail&atid=402706&aid=446889&group_id=31602
Category: None Group: None >Status: Closed >Resolution: Fixed Priority: 5 Submitted By: Nobody/Anonymous (nobody) Assigned to: Nobody/Anonymous (nobody) Summary: serialVersionUID Patch Initial Comment: This patch would allow you to generate the: public final static long serialVersionUID = xxx; line that would help out with avoiding getting marshalling errors every time you do a new buil d of an EJB. The serialVersionUID value is calculated based on the method signatures of the interface file that is being generated. A patch of the *.j files would be trivial to implement if you guys need it. Regards, Hiram Index: AbstractEjbSubTask.java ======================================================= ============ RCS file: /cvsroot/xdoclet/xdoclet/core/src/xdoclet/ejb/Abs tractEjbSubTask.java,v retrieving revision 1.4 diff -u -r1.4 AbstractEjbSubTask.java --- AbstractEjbSubTask.java 2001/08/01 00:26:30 1.4 +++ AbstractEjbSubTask.java 2001/08/01 18:12:34 @@ -195,6 +195,99 @@ } } + /** + * Calculates a SerialVersionUID based on the method signatures for a given + * interface. The 'type' attribute should be set to the interface that you + * want to calculate the SerialVersionUID on. types are: home, remote, pk, + * persistent, or all + * + * @param attributes Description of Parameter + * @return The SerialVersionUID value + */ + public String getSerialVersionUID( Properties attributes ) + { + + int type; + String interfaceType = attributes.getProperty( "type" ); + if( interfaceType == null ) + { + type = 0; + // calc on all methods + } + else if( interfaceType.equals ( "all" ) ) + { + type = 0; + // calc on all methods + } + else if( interfaceType.equals ( "home" ) ) + { + type = 1; + // calc on home methods + } + else if( interfaceType.equals ( "remote" ) ) + { + type = 2; + // calc on remote methods + } + else if( interfaceType.equals( "pk" ) ) + { + type = 3; + // calc on pk methods + } + else if( interfaceType.equals ( "persistent" ) ) + { + type = 4; + // calc on peristent fields methods + } + else + { + type = 0; + // calc on all methods + } + + ClassDoc oldClass = getCurrentClass(); + long versionID = Long.MIN_VALUE; + do + { + MethodDoc[] methods = getCurrentClass().methods(); + for( int j = 0; j < methods.length; j++ ) + { + switch ( type ) + { + case 1: + if( isHomeMethod( methods[j] ) ) + { + versionID += methods[j].signature().hashCode(); + } + break; + case 2: + if( isRemoteMethod( methods[j] ) ) + { + versionID += methods[j].signature().hashCode(); + } + break; + case 3: + if( isPkField( methods[j] ) ) + { + versionID += methods[j].signature().hashCode(); + } + break; + case 4: + if( isPersistentField( methods[j] ) ) + { + versionID += methods[j].signature().hashCode(); + } + default: + versionID += methods[j].signature().hashCode(); + } + } + // Add super class info + pushCurrentClass( getCurrentClass().superclass() ); + }while ( getCurrentClass() != null ); + setCurrentClass( oldClass ); + return "" + versionID + "L"; + } + public void init( DocletContext context, RootDoc root ) throws Exception { super.init( context, root ); @@ -848,7 +941,7 @@ public void forAllSuper( String template, String methodName ) { ClassDoc oldClass = getCurrentClass(); - List already = new ArrayList(); + List already = new ArrayList(); // Begin at the first super class pushCurrentClass( getCurrentClass ().superclass() ); @@ -862,35 +955,35 @@ if( methods[i].name ().equals( methodName ) ) { methodFound = methods[i]; - } - if (methodFound != null) - { - break; + } + if( methodFound != null ) + { + break; + } + } + if( methodFound != null ) + { + // We can not use contains because it is based on equals() and + // we need to compare based on compareTo() + Iterator i = already.iterator(); + boolean contained = false; + while( i.hasNext() ) + { + if( ( ( MethodDoc ) i.next() ).compareTo( methodFound ) == 0 ) + { + contained = true; + } + if( contained ) + { + break; + } + } + if( contained == false ) + { + generate( template ); + already.add( methodFound ); } } - if (methodFound != null) - { - // We can not use contains because it is based on equals() and - // we need to compare based on compareTo() - Iterator i = already.iterator(); - boolean contained = false; - while (i.hasNext()) - { - if ( ((MethodDoc)i.next ()).compareTo(methodFound) == 0 ) - { - contained = true; - } - if ( contained ) - { - break; - } - } - if ( contained == false ) - { - generate(template); - already.add(methodFound); - } - } pushCurrentClass( getCurrentClass().superclass() ); }while ( getCurrentClass() != null ); setCurrentClass( oldClass ); @@ -930,7 +1023,7 @@ public String persistenceType() { - if( isEntityCmp( getCurrentClass() ) && ! isEntityBmp( getCurrentClass() ) ) + if( isEntityCmp( getCurrentClass() ) && !isEntityBmp( getCurrentClass() ) ) { return "Container"; } ---------------------------------------------------------------------- You can respond by visiting: http://sourceforge.net/tracker/?func=detail&atid=402706&aid=446889&group_id=31602 _______________________________________________ Xdoclet-devel mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/xdoclet-devel