To add to my last post, I ran `crimson.jar` through the migration tool by
itself, calling the output `crimson-jakarta.jar`.

After replacing `crimson.jar` with it and deploying (to webapps-javaee/
still), I get the same error as my last message:
```
13-Jun-2025 15:54:34.030 SEVERE [ajp-nio-0.0.0.0-8009-exec-1]
org.apache.tomcat.util.digester.Digester.getParser Error creating SAX parser
        javax.xml.parsers.ParserConfigurationException: Feature:
http://apache.org/xml/features/allow-java-encodings
                at
org.apache.crimson.jaxp.SAXParserFactoryImpl.newSAXParser(SAXParserFactoryImpl.java:119)
                at
org.apache.tomcat.util.digester.Digester.getParser(Digester.java:695)
                at
org.apache.tomcat.util.digester.Digester.getXMLReader(Digester.java:867)
                at
org.apache.tomcat.util.digester.Digester.parse(Digester.java:1539)
...
```
including the `javax.xml.parsers.ParserConfigurationException` part.

If I examine the migrated JAR, it still uses the 'javax' namespace
internally:
```
$ jar -tf crimson-jakarta.jar | grep "javax"
META-INF/services/javax.xml.parsers.DocumentBuilderFactory
META-INF/services/javax.xml.parsers.SAXParserFactory

$ jar -tf crimson-jakarta.jar | grep "jakarta"
{no output}
```

I might not understand the nature of the migration tools you've suggested.
Are they not intended to perform this conversion, or am I misusing them?

Joel


On Fri, Jun 13, 2025 at 3:10 PM Joel Griffith <jgrif...@nd.edu> wrote:

> Thanks for that tip, Mark.
>
> I've managed to get the webapp deployed to the webapps-javaee/ directory.
> During operation, the webapp throws an error
> ```
> 13-Jun-2025 14:28:58.830 SEVERE [ajp-nio-0.0.0.0-8009-exec-1]
> org.apache.tomcat.util.digester.Digester.getParser Error creating SAX parser
>         javax.xml.parsers.ParserConfigurationException: Feature:
> http://apache.org/xml/features/allow-java-encodings
>                 at
> org.apache.crimson.jaxp.SAXParserFactoryImpl.newSAXParser(SAXParserFactoryImpl.java:119)
>                 at
> org.apache.tomcat.util.digester.Digester.getParser(Digester.java:695)
>                 at
> org.apache.tomcat.util.digester.Digester.getXMLReader(Digester.java:867)
>                 at
> org.apache.tomcat.util.digester.Digester.parse(Digester.java:1539)
> ...
> ```
> (full stack trace available on request).
>
> This originates in the package `crimson.jar`, an (admittedly old) XML
> parser that's included in our code.  The
> `javax.xml.parsers.ParserConfigurationException` portion of the error
> suggests that it's still recognized as 'javax' instead of 'jakarta'.
>
> Am I doing something wrong?  Should this be covered by the migration tool
> as well?
>
> Thanks,
> Joel
>
>
> On Fri, Jun 6, 2025 at 9:48 AM Mark Thomas <ma...@apache.org> wrote:
>
>> 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 <garydgreg...@gmail.com>
>> 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 <jgrif...@nd.edu.invalid>
>> 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: user-unsubscr...@commons.apache.org
>> For additional commands, e-mail: user-h...@commons.apache.org
>>
>>

Reply via email to