diff --git a/jaxb-ri/runtime/impl/src/main/java/org/glassfish/jaxb/runtime/v2/runtime/reflect/opt/OptimizedAccessorFactory.java b/jaxb-ri/runtime/impl/src/main/java/org/glassfish/jaxb/runtime/v2/runtime/reflect/opt/OptimizedAccessorFactory.java
index f713334..39c6cf4 100644
--- a/jaxb-ri/runtime/impl/src/main/java/org/glassfish/jaxb/runtime/v2/runtime/reflect/opt/OptimizedAccessorFactory.java
+++ b/jaxb-ri/runtime/impl/src/main/java/org/glassfish/jaxb/runtime/v2/runtime/reflect/opt/OptimizedAccessorFactory.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -187,6 +187,9 @@
             logger.log(Level.INFO,"failed to load an optimized Accessor",e);
         } catch (SecurityException e) {
             logger.log(Level.INFO,"failed to load an optimized Accessor",e);
+        } catch (ClassCastException e) {
+            logger.log(Level.FINE,"failed to cast optimized Accessor " +
+                    "created by repackaged jaxb "+opt,e);
         }
         return null;
     }
diff --git a/jaxb-ri/runtime/impl/src/test/java/org/glassfish/jaxb/runtime/v2/runtime/reflect/opt/ForeignAccessorTest.java b/jaxb-ri/runtime/impl/src/test/java/org/glassfish/jaxb/runtime/v2/runtime/reflect/opt/ForeignAccessorTest.java
new file mode 100644
index 0000000..a718754
--- /dev/null
+++ b/jaxb-ri/runtime/impl/src/test/java/org/glassfish/jaxb/runtime/v2/runtime/reflect/opt/ForeignAccessorTest.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Distribution License v. 1.0, which is available at
+ * http://www.eclipse.org/org/documents/edl-v10.php.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+package org.glassfish.jaxb.runtime.v2.runtime.reflect.opt;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+
+import jakarta.xml.bind.annotation.XmlAccessType;
+import jakarta.xml.bind.annotation.XmlAccessorType;
+import jakarta.xml.bind.annotation.XmlRootElement;
+import org.glassfish.jaxb.runtime.v2.bytecode.ClassTailor;
+import org.glassfish.jaxb.runtime.v2.runtime.reflect.Accessor;
+import org.junit.Test;
+
+public class ForeignAccessorTest {
+
+    /**
+     * Foreign accessor shouldn't throw ClassCastException, just skip optimization.
+     */
+    @Test
+    public void foreignAccessor() throws NoSuchFieldException{
+        String newClassName = EntityWithForeignAccessor.class.getName().replace('.','/') + "$JaxbAccessorF_author";
+        Class<?> foreignAccessor = AccessorInjector.prepare(EntityWithForeignAccessor.class,
+                ClassTailor.toVMClassName(ForeignAccessorTest.FieldAccessor_Ref.class),
+                newClassName);
+        assertNotNull(foreignAccessor);
+
+        Accessor<Object, Object> accessor = OptimizedAccessorFactory.get(EntityWithForeignAccessor.class.getDeclaredField("author"));
+        assertNull(accessor);
+    }
+    
+    @Test
+    public void knownAccessor() throws NoSuchFieldException {
+        Accessor<Object, Object> accessor = OptimizedAccessorFactory.get(EntityWithKnownAccessor.class.getDeclaredField("author"));
+        assertNotNull(accessor);
+    }
+
+    @XmlRootElement
+    @XmlAccessorType(XmlAccessType.FIELD)
+    static class EntityWithKnownAccessor {
+        String author;
+    }
+
+    @XmlRootElement
+    @XmlAccessorType(XmlAccessType.FIELD)
+    static class EntityWithForeignAccessor {
+        String author;
+    }
+
+    /**
+     * Test template doesn't extend accessor intentionally.
+     */
+    public static class FieldAccessor_Ref /*extends Accessor*/ {
+        public FieldAccessor_Ref() {
+           // super(Ref.class);
+        }
+
+        public Object get(Object bean) {
+            return ((Bean)bean).f_ref;
+        }
+
+        public void set(Object bean, Object value) {
+            ((Bean)bean).f_ref = (Ref)value;
+        }
+    }
+}
