butek       2002/06/04 14:30:52

  Modified:    java/src/org/apache/axis/wsdl/toJava
                        JavaGeneratorFactory.java
  Log:
  Fixed a hidden bug in the relationship between javifyNames and
  resolveNameClashes.  This is not apparent until you upgrade to
  JDK1.4 and the order of HashTable changes.  There still seems
  to be too much interrelation between these two methods but I'll
  leave cleaning that up as an exercise to the reader.
  
  This is a first step toward fixing bugzilla 8631, but the functional-tests
  still fail further on for some other reason.
  
  http://nagoya.apache.org/bugzilla/show_bug.cgi?id=8631
  
  Revision  Changes    Path
  1.7       +13 -5     
xml-axis/java/src/org/apache/axis/wsdl/toJava/JavaGeneratorFactory.java
  
  Index: JavaGeneratorFactory.java
  ===================================================================
  RCS file: 
/home/cvs/xml-axis/java/src/org/apache/axis/wsdl/toJava/JavaGeneratorFactory.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- JavaGeneratorFactory.java 17 May 2002 19:09:32 -0000      1.6
  +++ JavaGeneratorFactory.java 4 Jun 2002 21:30:52 -0000       1.7
  @@ -347,7 +347,7 @@
                   SymTabEntry entry = (SymTabEntry) v.elementAt(i);
   
                   // Use the type or the referenced type's QName to generate the java 
name.      
  -                if (entry instanceof TypeEntry) {
  +                if (entry instanceof TypeEntry && entry.getName() == null) {
                       TypeEntry tEntry = (TypeEntry) entry;
                       String dims = tEntry.getDimensions();
                       TypeEntry refType = tEntry.getRefType();
  @@ -375,9 +375,7 @@
                           // collision.  If there is an existing anon type, there 
will be a 
                           // collision.  In both cases, the java type name should be 
mangled.
                           TypeEntry existing = symbolTable.getType(typeQName);
  -                        if (anonQNames.get(typeQName) != null ||
  -                                (existing != null && 
  -                                !(existing instanceof DefinedElement))) {
  +                        if (anonQNames.get(typeQName) != null) {
                               localName += "Type" + uniqueNum++;
                               typeQName = new QName(typeQName.getNamespaceURI(), 
localName);
                           } 
  @@ -560,6 +558,10 @@
        * Definition, force their names to be suffixed with _PortType and _Service, 
respectively.
        */
       protected void resolveNameClashes(SymbolTable symbolTable) {
  +
  +        // Keep a list of anonymous types so we don't try to resolve them twice.
  +        HashSet anonTypes = new HashSet();
  +
           Iterator it = symbolTable.getHashMap().values().iterator();
           while (it.hasNext()) {
               Vector v = new Vector((Vector) it.next());  // New vector we can 
temporarily add to it
  @@ -623,6 +625,7 @@
                           if (entry instanceof Element) {
                               entry.setName(mangleName(entry.getName(),
                                       "_ElemType"));
  +
                               // If this global element was defined using 
                               // an anonymous type, then need to change the
                               // java name of the anonymous type to match.
  @@ -632,6 +635,7 @@
                               TypeEntry anonType = symbolTable.getType(anonQName);
                               if (anonType != null) {
                                   anonType.setName(entry.getName());
  +                                anonTypes.add(anonType);
                               }
                           }
                           else if (entry instanceof TypeEntry) {
  @@ -654,7 +658,11 @@
                                       }
                                   }
                               }
  -                            entry.setName(mangleName(entry.getName(), "_Type"));
  +                            // If this is an anonymous type, it's name was resolved 
in
  +                            // the previous if block.  Don't reresolve it.
  +                            if (!anonTypes.contains(entry)) {
  +                                entry.setName(mangleName(entry.getName(), "_Type"));
  +                            }
                           }
                           else if (entry instanceof PortTypeEntry) {
                               entry.setName(mangleName(entry.getName(), "_Port"));
  
  
  


Reply via email to