Joel,

An alternative fix would be for you to use Tomcat Migration Tool for Jakarta EE on commons-fileupload-1.x which will give you the commons-fileupload-1.x API but using the Jakarta EE namespace.

Or even more simply, leave the web application exactly as-is and deploy it to webapps-javaee and Tomcat will automatically migrate it from Java EE to Jakarta EE and then deploy it.

Mark


On 06/06/2025 14:06, Joel Griffith wrote:
I can't say I know why there's a need for a subclass, unfortunately.  The
people who wrote this code are long gone, I just have to maintain it.

Joel

On Thu, Jun 5, 2025 at 6:25 PM Gary Gregory <[email protected]> wrote:

Hello Joel,

2.x is not a drop in replacement for 1.x. Why is there a need for a
subclass? Perhaps there is a feature we can add to 2.x before we finalize
the API.

Gary

On Thu, Jun 5, 2025, 14:01 Joel Griffith <[email protected]> wrote:

I manage a Tomcat/JSP webapp.  We are updating our source code to conform
to the recent `javax` -> `jakarta` namespace change in the Servlet
package.

The app uses the Apache Commons FileUpload package, which must be
upgraded
from v1 to v2 as part of this change.

FileUpload v1 contains a `DiskFileItem` class:
```
org.apache.commons.fileupload.disk.DiskFileItem
```

FileUpload v2 contains the corresponding class
```
org.apache.commons.fileupload2.core.DiskFileItem
```

Our webapp code, written for v1, extends `DiskFileItem`:
```
public class MonitoredDiskFileItem extends DiskFileItem
{
     private MonitoredOutputStream mos = null;
     private OutputStreamListener listener;

     public MonitoredDiskFileItem(String fieldName, String contentType,
boolean isFormField, String fileName, int sizeThreshold, File repository,
OutputStreamListener listener)
     {
         super(fieldName, contentType, isFormField, fileName,
sizeThreshold,
repository);
         this.listener = listener;
     }

     public OutputStream getOutputStream() throws IOException
     {
         if (mos == null)
         {
             mos = new MonitoredOutputStream(super.getOutputStream(),
listener);
         }
         return mos;
     }
}
```

This breaks with the update to v2 with `error: cannot inherit from final
DiskFileItem` because the `DiskFileItem` class was changed to `final`
across versions.

The migration guide at
https://commons.apache.org/proper/commons-fileupload/migration.html
doesn't
give guidance at this level of detail.

Is there anything I can do to salvage this code?  I know that I could
compile my own version of the source code without the `final` keyword in
`DiskFileItem.class`, but I have to assume there's a reason for it and
that
it would break other aspects of the code.  I hope very much that there's
a
simpler solution.  I'm a system administrator, not a programmer, so I
cannot rewrite the package from scratch.

Thanks,
Joel





---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to