diff --git a/openwire-core/src/main/java/org/apache/activemq/openwire/codec/BaseDataStreamMarshaller.java b/openwire-core/src/main/java/org/apache/activemq/openwire/codec/BaseDataStreamMarshaller.java
index 8267538..751e8fb 100644
--- a/openwire-core/src/main/java/org/apache/activemq/openwire/codec/BaseDataStreamMarshaller.java
+++ b/openwire-core/src/main/java/org/apache/activemq/openwire/codec/BaseDataStreamMarshaller.java
@@ -16,6 +16,8 @@
  */
 package org.apache.activemq.openwire.codec;
 
+import static org.apache.activemq.openwire.utils.OpenWireValidationSupport.convertJmsPackage;
+
 import java.io.DataInput;
 import java.io.DataOutput;
 import java.io.IOException;
@@ -191,7 +193,7 @@
                     StackTraceElement ss[] = new StackTraceElement[dataIn.readShort()];
                     for (int i = 0; i < ss.length; i++) {
                         try {
-                            ss[i] = STACK_TRACE_ELEMENT_CONSTRUCTOR.newInstance(new Object[] { tightUnmarshalString(dataIn, bs),
+                            ss[i] = STACK_TRACE_ELEMENT_CONSTRUCTOR.newInstance(new Object[] { convertJmsPackage(tightUnmarshalString(dataIn, bs)),
                                 tightUnmarshalString(dataIn, bs), tightUnmarshalString(dataIn, bs), Integer.valueOf(dataIn.readInt()) });
                         } catch (IOException e) {
                             throw e;
@@ -219,6 +221,7 @@
 
     private Throwable createThrowable(String className, String message) {
         try {
+            className = convertJmsPackage(className);
             Class<?> clazz = Class.forName(className, false, BaseDataStreamMarshaller.class.getClassLoader());
             OpenWireValidationSupport.validateIsThrowable(clazz);
             Constructor<?> constructor = clazz.getConstructor(String.class);
@@ -502,7 +505,7 @@
                     StackTraceElement ss[] = new StackTraceElement[dataIn.readShort()];
                     for (int i = 0; i < ss.length; i++) {
                         try {
-                            ss[i] = STACK_TRACE_ELEMENT_CONSTRUCTOR.newInstance(new Object[] { looseUnmarshalString(dataIn),
+                            ss[i] = STACK_TRACE_ELEMENT_CONSTRUCTOR.newInstance(new Object[] { convertJmsPackage(looseUnmarshalString(dataIn)),
                                 looseUnmarshalString(dataIn), looseUnmarshalString(dataIn), Integer.valueOf(dataIn.readInt()) });
                         } catch (IOException e) {
                             throw e;
diff --git a/openwire-core/src/main/java/org/apache/activemq/openwire/utils/OpenWireValidationSupport.java b/openwire-core/src/main/java/org/apache/activemq/openwire/utils/OpenWireValidationSupport.java
index 95e5f62..252f145 100644
--- a/openwire-core/src/main/java/org/apache/activemq/openwire/utils/OpenWireValidationSupport.java
+++ b/openwire-core/src/main/java/org/apache/activemq/openwire/utils/OpenWireValidationSupport.java
@@ -18,6 +18,9 @@
 
 public class OpenWireValidationSupport {
 
+    private static final String jmsPackageToReplace = "javax.jms";
+    private static final String jmsPackageToUse = "jakarta.jms";
+
     /**
      * Verify that the provided class extends {@link Throwable} and throw an
      * {@link IllegalArgumentException} if it does not.
@@ -29,4 +32,18 @@
             throw new IllegalArgumentException("Class " + clazz + " is not assignable to Throwable");
         }
     }
+
+    /**
+     * This method can be used to convert from javax -> jakarta or
+     * vice versa depending on the version used by the client
+     *
+     * @param className
+     * @return
+     */
+    public static String convertJmsPackage(String className) {
+        if (className != null && className.startsWith(jmsPackageToReplace)) {
+            return className.replace(jmsPackageToReplace, jmsPackageToUse);
+        }
+        return className;
+    }
 }
