Details

    • Type: Bug Bug
    • Status: Open
    • Priority: Minor Minor
    • Resolution: Unresolved
    • Affects Version/s: None
    • Fix Version/s: None
    • Component/s: WSDL processing
    • Labels:
      None

      Description

      There's a memory leak in org.apache.axis.description.JavaServiceDesc.setDefaultNamespace():
      the method adds the given namespace to an ArrayList. This method is called from
      org.apache.axis.wsdl.fromJava.Emitter.init(), which in turn is called from
      org.apache.axis.providers.BasicProvider.generateWSDL() each time wsdl is generated for a service,
      i.e. whenever .../ServiceName?wsdl is invoked.

      To reproduce start an Axis server in a debugger, invoke ...?wsdl from a browser a couple of times for
      a certain service, and check the instance variable namespaceMappings in the JavaServiceDesc
      for that service. It grows by one element each time the wsdl is generated.

      A simple (if not very elegant) fix would be to simply remove the namespace before adding it to the list again. If it's not present, nothing happens; if it is, it's moved to the first slot:

      public void setDefaultNamespace(String namespace) {
      if (namespaceMappings == null)
      namespaceMappings = new ArrayList();
      namespaceMappings.remove(namespace);
      namespaceMappings.add(0, namespace);
      }

        Activity

        Hide
        Bjorn Townsend added a comment -

        I patched the Axis trunk with this fix and ran the test suite against it – looks like it doesn't break anything, and I've verified that it seems to fix the memory leak.

        Show
        Bjorn Townsend added a comment - I patched the Axis trunk with this fix and ran the test suite against it – looks like it doesn't break anything, and I've verified that it seems to fix the memory leak.
        Hide
        Rodrigo Ruiz added a comment -

        Fairly simple

        However, looking deeper into this class I have found that:

        • namespaceMappings is private, and it does not have a getter
        • Across the class, only the first item is ever accessed

        It seems that in the current trunk, the list is just a holder for the default namespace, and the rest of the list is unused. Maybe we could just simplify this :-D

        Show
        Rodrigo Ruiz added a comment - Fairly simple However, looking deeper into this class I have found that: namespaceMappings is private, and it does not have a getter Across the class, only the first item is ever accessed It seems that in the current trunk, the list is just a holder for the default namespace, and the rest of the list is unused. Maybe we could just simplify this :-D

          People

          • Assignee:
            Unassigned
            Reporter:
            Christopher Sahnwaldt
          • Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

            • Created:
              Updated:

              Development