Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

IllegalArgumentException deploying CAS 5.3.10 Maven Overlay WAR on Wildfly 14

I'm deploying CAS 5.3.10 on Wildfly 14, using a Maven Overlay as specified in https://apereo.github.io/cas/5.3.x/installation/Configuring-Servlet-Container.html#external and using the project template at: https://github.com/apereo/cas-overlay-template/tree/5.3

I have already edit the pom which deploys correctly on Wildfly 9, but on Wildfly 14 deploy fails with the following exception:

Caused by: java.lang.IllegalArgumentException: object is not an instance of declaring class at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.springframework.core.io.VfsUtils.invokeVfsMethod(VfsUtils.java:100) at org.springframework.core.io.VfsUtils.getFile(VfsUtils.java:172) at org.springframework.core.io.VfsResource.getFile(VfsResource.java:90) at org.apereo.cas.util.CasVersion.getDateTime(CasVersion.java:59) at org.apereo.cas.util.SystemUtils.getSystemInfo(SystemUtils.java:50) ...........

The problem seems to be related to the CasVersion class that attempts to access via VFS (via spring) to retrieve information related last modification date of the module.

like image 453
Marco Avatar asked Jun 11 '19 12:06

Marco


1 Answers

Since @Marco didn't provide his fix, I will. For anyone having the same issue follow below steps to resolve:

  1. After checking out cas-overlay-template, create CasVersion.java under src/main/java/org/apereo/cas/util with the following content:
package org.apereo.cas.util;

import lombok.SneakyThrows;
import lombok.experimental.UtilityClass;
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.io.VfsResource;

import java.io.File;
import java.net.URL;
import java.time.ZonedDateTime;


/**
 1. Class that exposes the CAS version. Fetches the "Implementation-Version"
 2. manifest attribute from the jar file.
 3.  4. @author Dmitriy Kopylenko
 4. @since 3.0.0
 */
@Slf4j
@UtilityClass
public class CasVersion {

    /**
     * @return Return the full CAS version string.
     * @see java.lang.Package#getImplementationVersion
     */
    public static String getVersion() {
        return CasVersion.class.getPackage().getImplementationVersion();
    }

    /**
     * Gets specification version from the manifest package.
     *
     * @return the specification version
     */
    public static String getSpecificationVersion() {
        return CasVersion.class.getPackage().getSpecificationVersion();
    }

    /**
     * Gets last modified date/time for the module.
     *
     * @return the date/time
     */
    @SneakyThrows
    public static ZonedDateTime getDateTime() {
        final Class clazz = CasVersion.class;
        final URL resource = clazz.getResource(clazz.getSimpleName() + ".class");
        if ("file".equals(resource.getProtocol())) {
            return DateTimeUtils.zonedDateTimeOf(new File(resource.toURI()).lastModified());
        }
        if ("jar".equals(resource.getProtocol())) {
            final String path = resource.getPath();
            final File file = new File(path.substring(5, path.indexOf('!')));
            return DateTimeUtils.zonedDateTimeOf(file.lastModified());
        }
        // These lines are causing the reported exception so we just comment them out.
        // if ("vfs".equals(resource.getProtocol())) {
        //     final File file = new VfsResource(resource.openConnection().getContent()).getFile();
        //     return DateTimeUtils.zonedDateTimeOf(file.lastModified());
        // }
        LOGGER.warn("Unhandled url protocol: [{}] resource: [{}]", resource.getProtocol(), resource);
        return ZonedDateTime.now();
    }
}
  1. Add below dependencies to pom.xml
    <!-- Required for lombok imports -->              
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.16.16</version>
        <scope>provided</scope>
    </dependency>  
    <!-- Required for DateTimeUtils to be available on classpath -->              
    <dependency>
        <groupId>org.apereo.cas</groupId>
        <artifactId>cas-server-core-util</artifactId>
        <version>${cas.version}</version>
    </dependency>
  1. Replace any occurrences of <app-server>-tomcat</app-server> with <app-server></app-server> since you gonna provide application server.

Above steps should be enough to resolve the reported issue.

like image 143
leopal Avatar answered Oct 21 '22 23:10

leopal