My module fails to display on administration page

am developing a new module … it succesfuly loads onthe platform , but its not displayed on the administration page …

here is my extention elemnt in the config.xml

 <extension>
		<point>org.openmrs.admin.list</point>
 		<class>${MODULE_PACKAGE}.extension.html.AdminList</class>
</extension>

and my AdminList class

public class AdminList extends AdministrationSectionExt {
	
	/**
	 * @see org.openmrs.module.web.extension.AdministrationSectionExt#getMediaType()
	 */
	public Extension.MEDIA_TYPE getMediaType() {
		return Extension.MEDIA_TYPE.html;
	}
	
	/**
	 * @see org.openmrs.module.web.extension.AdministrationSectionExt#getTitle()
	 */
	public String getTitle() {
		return "CONCEPT NAME MANAGEMENT";
	}
	
	/**
	 * @see org.openmrs.module.web.extension.AdministrationSectionExt#getLinks()
	 */
	public Map<String, String> getLinks() {
		
		Map<String, String> map = new LinkedHashMap<String, String>();
		
		map.put("/module/conceptName/viewconceptNames", "CONCEPT MANAGEMENT");
		
		return map;
	}
	
}

@dkayiwa @tendomart @wyclif

@mozzy have you tried to check the logs for any clues in the error logs? The value of the class tag for the extension in the config.xml file seems wrong to me because it contains no moduleId

1 Like

FYI you should be using @MODULE_PACKAGE@ and not ${MODULE_PACKAGE} in the config.xml which would mean you don’t have to explicitly include the module id as I had mentioned before.

1 Like

here is the log

java.lang.NoClassDefFoundError: org/openmrs/module/web/extension/AdministrationSectionExt
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
	at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
	at org.openmrs.module.ModuleClassLoader.loadClass(ModuleClassLoader.java:645)
	at org.openmrs.module.ModuleClassLoader.loadClass(ModuleClassLoader.java:564)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	at org.openmrs.module.Module.expandExtensionNames(Module.java:567)
	at org.openmrs.module.Module.getExtensions(Module.java:494)
	at org.openmrs.module.ModuleFactory.startModuleInternal(ModuleFactory.java:704)
	at org.openmrs.api.context.Daemon$1.run(Daemon.java:74)
Caused by: java.lang.ClassNotFoundException: org.openmrs.module.web.extension.AdministrationSectionExt
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1713)
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1558)
	at org.openmrs.module.ModuleClassLoader.loadClass(ModuleClassLoader.java:571)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	... 16 more

thx, let me try that option of @MODULE_PACKAGE@

but i had alSO tried out to include the module id LIKE

<extension>
		<point>org.openmrs.admin.list</point>
		<class>org.openmrs.module.basicmodule.extension.html.AdminList</class>
	</extension>

, but it still fails

theres a notification in the config.xml on that very tag which tells me

This extension is enabled by defining (uncommenting) it in the /metadata/config.xml file.

but i dont undesrtang which metadata/config.xml exactly am supposed to go and uncomment that

HERE IS THE FULL error.log after using the @MODULE_PACKAGE@

https://hastebin.com/axadivuson.sql

The error logs are very clear, you are specifying the wrong class name which is omitting the moduleId, just make sure you are setting the correct one whether it means directly pasting the fully qualified java class name without using the placeholders. In theory if you wish to use placeholders some like below should work, using the one with @@ is older style.

${project.parent.groupId}.${project.parent.artifactId}.myPackage.MyAdminListClassName

1 Like

thx but ive discovered the problem is not with the extension class tag in the the config.xmlfile… but its with the
“org.openmrs.module.web.extension.AdministrationSectionExt” which we must extend to. it seems the class sourcecode doesnt exist in the project. this iswat it says wen i hover over it

org.openmrs.module.web.extension.AdministrationSectionExt

Note: This element has no attached Javadoc and the Javadoc could not be found in the attached source.

and now this is the error in the log

java.lang.NoClassDefFoundError: org/openmrs/module/web/extension/AdministrationSectionExt
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
	at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
	at org.openmrs.module.ModuleClassLoader.loadClass(ModuleClassLoader.java:645)
	at org.openmrs.module.ModuleClassLoader.loadClass(ModuleClassLoader.java:564)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	at org.openmrs.module.Module.expandExtensionNames(Module.java:567)
	at org.openmrs.module.Module.getExtensions(Module.java:494)
	at org.openmrs.module.ModuleFactory.startModuleInternal(ModuleFactory.java:704)
	at org.openmrs.api.context.Daemon$1.run(Daemon.java:74)
Caused by: java.lang.ClassNotFoundException: org.openmrs.module.web.extension.AdministrationSectionExt
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1713)
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1558)
	at org.openmrs.module.ModuleClassLoader.loadClass(ModuleClassLoader.java:571)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)

Does your module have a require element for the legacy ui module in config.xml?

Something like: https://github.com/openmrs/openmrs-module-casereport/blob/master/omod/src/main/resources/config.xml#L31

2 Likes

thx @dkayiwa i miss out the require element for the legacy UI

coz this is only wat i have

<require_version>${openmrs.platform.version}</require_version>

let me try adding it

thx DR @dkayiwa , it has finally displayed :joy: :grinning: