Uploaded image for project: 'WildFly Elytron'
  1. WildFly Elytron
  2. ELY-1569

Revisit X500PrincipalUtil optimalisation

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Unresolved
    • Icon: Optional Optional
    • None
    • 1.3.0.Final
    • X.500
    • None

      Reason why it was added may be fixed in OpenJDK already. David thinks so, but I was not able to find issue for that.

      Note, this was needed for older java 1.8 releases. So user with older java in use can experience problems with fixed Elytron. Must migrate to newer version of java.

      X500PrncipalUtil
      static {
              Class<?> x500Name = null;
              MethodHandle asX500PrincipalHandle = null;
              try {
                  x500Name = Class.forName("sun.security.x509.X500Name", true, X500PrincipalUtil.class.getClassLoader());
                  asX500PrincipalHandle = MethodHandles.publicLookup().unreflect(x500Name.getDeclaredMethod("asX500Principal"));
              } catch (Throwable t) {
                  /*
                   * This is intended to be a best efforts optimisation, if it fails for ANY reason we don't support the optimisation
                   * and resort to default behaviour.
                   *
                   * Throwing any Exception or Error from this static block results in a NoClassDefFoundError for any access to the
                   * class and subsequently even the non-optimised scenario is unavailable.
                   */
                  log.trace("X550Name.asX500Principal() is not available.", t);
              }
      
              X500_NAME_CLASS = x500Name;
              AS_X500_PRINCIPAL_HANDLE = asX500PrincipalHandle;
          }
      

      Related hipchat discussion

      David Lloyd·Apr-26 3:44 PM
      what JDK version?
      that's not really an error per se
      Darran Lofthouse·Apr-26 3:46 PM
      it's a feature ;-)
      David Lloyd·Apr-26 3:47 PM
      tbh it's probably not needed anymore; the original code there is 3 years old
      Martin Choma·Apr-26 3:48 PM
          java version "1.8.0_161"
          Java(TM) SE Runtime Environment (build 1.8.0_161-b12)
          Java HotSpot(TM) 64-Bit Server VM (build 25.161-b12, mixed mode)
      David Lloyd·Apr-26 3:48 PM
      I think the original issue was fixed in openjdk a while back
      Martin Choma·Apr-26 4:57 PM
      David, I can see the exception on the Oracle JDK 1.8.0_172 as well
      Darran Lofthouse·Apr-26 5:05 PM
      Is the optimisation provided by that class still beneficial?
      David Lloyd·Apr-26 5:11 PM
      it's required for older 1.8 releases
      note that it's a TRACE message though
      it's not an error, it's just indicating that the detection of the internal type failed
      so it won't be used
      I did previously get a directive that we need not support older 1.8 releases though
      so we could drop that code if desired
      this would be considered code cleanup, so it's not an enhancement and not a bug fix
      Martin Choma·Apr-26 5:20 PM
      "1.8 releases" you mean jboss-modules 1.8?
      and when searching internal type failed, which will be used then?
      Darran Lofthouse·Apr-26 5:22 PM
      If that type is not found and convert set to true we pass the name into the X500Principal constructor
      David Lloyd·Apr-26 5:24 PM
      no @MartinChoma I mean older Java 8 releases
      older versions of Java returned X500Name for certain certificate methods instead of X500Principal
      if you weren't ready for that, you can end up with an unexpected error condition
      Martin Choma·Apr-26 5:32 PM
      and now as jdk is fixed we can remove that workaround?
      David Lloyd·Apr-26 5:32 PM
      yes it should be safe
      Martin Choma·Apr-26 5:34 PM
      also for ibm jdk?
      David Lloyd·Apr-26 5:34 PM
      IBM never had the problem AFAIK
      Martin Choma·Apr-26 5:50 PM
      It would be nice if we know the JDK issue, but I can't find the one.
      

              Unassigned Unassigned
              mchoma@redhat.com Martin Choma
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

                Created:
                Updated: