<mavenModuleSetBuild _class='hudson.maven.MavenModuleSetBuild'><action _class='hudson.model.CauseAction'><cause _class='hudson.triggers.SCMTrigger$SCMTriggerCause'><shortDescription>Started by an SCM change</shortDescription></cause></action><action></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><refsremotesoriginmaster _class='hudson.plugins.git.util.Build'><buildNumber>128</buildNumber><marked><SHA1>b8f6cf3f44d25d526d96435ce91615d4efdabba7</SHA1><branch><SHA1>b8f6cf3f44d25d526d96435ce91615d4efdabba7</SHA1><name>refs/remotes/origin/master</name></branch></marked><revision><SHA1>b8f6cf3f44d25d526d96435ce91615d4efdabba7</SHA1><branch><SHA1>b8f6cf3f44d25d526d96435ce91615d4efdabba7</SHA1><name>refs/remotes/origin/master</name></branch></revision></refsremotesoriginmaster></buildsByBranchName><lastBuiltRevision><SHA1>b8f6cf3f44d25d526d96435ce91615d4efdabba7</SHA1><branch><SHA1>b8f6cf3f44d25d526d96435ce91615d4efdabba7</SHA1><name>refs/remotes/origin/master</name></branch></lastBuiltRevision><remoteUrl>https://github.com/bxservice/idempiere-rest</remoteUrl><scmName></scmName></action><action></action><action _class='hudson.maven.reporters.MavenAggregatedArtifactRecord'><moduleRecord><mainArtifact><artifactId>com.trekglobal.idempiere.extensions.main</artifactId><canonicalName>com.trekglobal.idempiere.extensions.main-1.0.0-SNAPSHOT.pom</canonicalName><fileName>pom.xml</fileName><groupId>com.trekglobal.idempiere.extensions</groupId><md5sum>4da960446bbb5ebfa10f83ca57afa10e</md5sum><type>pom</type><version>1.0.0-SNAPSHOT</version></mainArtifact><parent><number>128</number><url>https://jenkins.younex.de/view/all/job/idempiere-rest-master/com.trekglobal.idempiere.extensions$com.trekglobal.idempiere.extensions.main/128/</url></parent><pomArtifact><artifactId>com.trekglobal.idempiere.extensions.main</artifactId><canonicalName>com.trekglobal.idempiere.extensions.main-1.0.0-SNAPSHOT.pom</canonicalName><fileName>pom.xml</fileName><groupId>com.trekglobal.idempiere.extensions</groupId><md5sum>4da960446bbb5ebfa10f83ca57afa10e</md5sum><type>pom</type><version>1.0.0-SNAPSHOT</version></pomArtifact><url>https://jenkins.younex.de/view/all/job/idempiere-rest-master/com.trekglobal.idempiere.extensions$com.trekglobal.idempiere.extensions.main/128/mavenArtifacts/</url></moduleRecord><moduleRecord><mainArtifact><artifactId>com.trekglobal.idempiere.extensions.p2</artifactId><canonicalName>com.trekglobal.idempiere.extensions.p2-1.0.0-SNAPSHOT.pom</canonicalName><fileName>pom.xml</fileName><groupId>com.trekglobal.idempiere.extensions</groupId><md5sum>05e296b67c0c19db23d520228ec88296</md5sum><type>pom</type><version>1.0.0-SNAPSHOT</version></mainArtifact><parent><number>128</number><url>https://jenkins.younex.de/view/all/job/idempiere-rest-master/com.trekglobal.idempiere.extensions$com.trekglobal.idempiere.extensions.p2/128/</url></parent><pomArtifact><artifactId>com.trekglobal.idempiere.extensions.p2</artifactId><canonicalName>com.trekglobal.idempiere.extensions.p2-1.0.0-SNAPSHOT.pom</canonicalName><fileName>pom.xml</fileName><groupId>com.trekglobal.idempiere.extensions</groupId><md5sum>05e296b67c0c19db23d520228ec88296</md5sum><type>pom</type><version>1.0.0-SNAPSHOT</version></pomArtifact><url>https://jenkins.younex.de/view/all/job/idempiere-rest-master/com.trekglobal.idempiere.extensions$com.trekglobal.idempiere.extensions.p2/128/mavenArtifacts/</url></moduleRecord><moduleRecord><mainArtifact><artifactId>com.trekglobal.idempiere.rest.api</artifactId><canonicalName>com.trekglobal.idempiere.rest.api-1.0.0-SNAPSHOT.pom</canonicalName><fileName>pom.xml</fileName><groupId>com.trekglobal.idempiere.extensions</groupId><md5sum>a5b813acbb38f45ca77e2c29eaf3e4a4</md5sum><type>pom</type><version>1.0.0-SNAPSHOT</version></mainArtifact><parent><number>128</number><url>https://jenkins.younex.de/view/all/job/idempiere-rest-master/com.trekglobal.idempiere.extensions$com.trekglobal.idempiere.rest.api/128/</url></parent><pomArtifact><artifactId>com.trekglobal.idempiere.rest.api</artifactId><canonicalName>com.trekglobal.idempiere.rest.api-1.0.0-SNAPSHOT.pom</canonicalName><fileName>pom.xml</fileName><groupId>com.trekglobal.idempiere.extensions</groupId><md5sum>a5b813acbb38f45ca77e2c29eaf3e4a4</md5sum><type>pom</type><version>1.0.0-SNAPSHOT</version></pomArtifact><url>https://jenkins.younex.de/view/all/job/idempiere-rest-master/com.trekglobal.idempiere.extensions$com.trekglobal.idempiere.rest.api/128/mavenArtifacts/</url></moduleRecord><moduleRecord><mainArtifact><artifactId>com.trekglobal.idempiere.rest.api.test</artifactId><canonicalName>com.trekglobal.idempiere.rest.api.test-1.0.0-SNAPSHOT.pom</canonicalName><fileName>pom.xml</fileName><groupId>com.trekglobal.idempiere.extensions</groupId><md5sum>6b92f8ef39daeb8f6844c4e5ed1a4ce2</md5sum><type>pom</type><version>1.0.0-SNAPSHOT</version></mainArtifact><parent><number>128</number><url>https://jenkins.younex.de/view/all/job/idempiere-rest-master/com.trekglobal.idempiere.extensions$com.trekglobal.idempiere.rest.api.test/128/</url></parent><pomArtifact><artifactId>com.trekglobal.idempiere.rest.api.test</artifactId><canonicalName>com.trekglobal.idempiere.rest.api.test-1.0.0-SNAPSHOT.pom</canonicalName><fileName>pom.xml</fileName><groupId>com.trekglobal.idempiere.extensions</groupId><md5sum>6b92f8ef39daeb8f6844c4e5ed1a4ce2</md5sum><type>pom</type><version>1.0.0-SNAPSHOT</version></pomArtifact><url>https://jenkins.younex.de/view/all/job/idempiere-rest-master/com.trekglobal.idempiere.extensions$com.trekglobal.idempiere.rest.api.test/128/mavenArtifacts/</url></moduleRecord></action><action></action><action></action><action></action><action _class='org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction'><artifactsUrl>https://jenkins.younex.de/view/all/job/idempiere-rest-master/128/artifact</artifactsUrl><changesUrl>https://jenkins.younex.de/view/all/job/idempiere-rest-master/changes</changesUrl><displayUrl>https://jenkins.younex.de/view/all/job/idempiere-rest-master/128/</displayUrl><testsUrl>https://jenkins.younex.de/view/all/job/idempiere-rest-master/128/testReport</testsUrl></action><building>false</building><displayName>#128</displayName><duration>21615</duration><estimatedDuration>22004</estimatedDuration><fullDisplayName>idempiere-rest-master #128</fullDisplayName><id>128</id><inProgress>false</inProgress><keepLog>false</keepLog><number>128</number><queueId>5609</queueId><result>FAILURE</result><timestamp>1787971446716</timestamp><url>https://jenkins.younex.de/view/all/job/idempiere-rest-master/128/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>com.trekglobal.idempiere.rest.api/src/com/trekglobal/idempiere/rest/api/v1/resource/impl/ModelResourceImpl.java</affectedPath><commitId>b8f6cf3f44d25d526d96435ce91615d4efdabba7</commitId><timestamp>1787917252000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/noreply</absoluteUrl><fullName>noreply</fullName></author><authorEmail>noreply@github.com</authorEmail><comment>fix(models): normalize table name to AD_Table.TableName before model class lookup (#533)

The models endpoints resolve the table case-insensitively (MTable.get uses
equalsIgnoreCase and UPPER(TableName)) but passed the caller's raw path segment
to MTable.getClass(), which derives a Java class name from that exact string and
is case-sensitive.

On a case-insensitive filesystem with exploded-directory bundles (an Eclipse PDE
launch on macOS or Windows), the wrong-case class file is found on disk and then
rejected by defineClass with "NoClassDefFoundError: ... (wrong name: ...)". That
is a LinkageError rather than an Exception, so it escapes the resource method's
catch (Exception ex) and the caller receives a bare Jersey 500 instead of a
structured error response. On a case-sensitive filesystem, or from a JAR bundle
on any OS, the lookup misses cleanly and returns null instead.

Normalize to AD_Table.TableName immediately after the access check in getPO,
getPOs, create and createChild, and use the resolved PO's table name in update
and updateChild. In update and updateChild the name is captured by a lambda, so
a separate single-assignment local is introduced rather than reassigning the
existing variable.

No behaviour change for callers already using the canonical casing.

Fixes #532

Co-authored-by: Claude Opus 5
</comment><date>2026-08-28 13:40:52 +0200</date><id>b8f6cf3f44d25d526d96435ce91615d4efdabba7</id><msg>fix(models): normalize table name to AD_Table.TableName before model class lookup (#533)</msg><path><editType>edit</editType><file>com.trekglobal.idempiere.rest.api/src/com/trekglobal/idempiere/rest/api/v1/resource/impl/ModelResourceImpl.java</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/noreply</absoluteUrl><fullName>noreply</fullName><id>noreply</id></culprit><mavenArtifacts><moduleRecord><mainArtifact><artifactId>com.trekglobal.idempiere.extensions.main</artifactId><canonicalName>com.trekglobal.idempiere.extensions.main-1.0.0-SNAPSHOT.pom</canonicalName><fileName>pom.xml</fileName><groupId>com.trekglobal.idempiere.extensions</groupId><md5sum>4da960446bbb5ebfa10f83ca57afa10e</md5sum><type>pom</type><version>1.0.0-SNAPSHOT</version></mainArtifact><parent><number>128</number><url>https://jenkins.younex.de/view/all/job/idempiere-rest-master/com.trekglobal.idempiere.extensions$com.trekglobal.idempiere.extensions.main/128/</url></parent><pomArtifact><artifactId>com.trekglobal.idempiere.extensions.main</artifactId><canonicalName>com.trekglobal.idempiere.extensions.main-1.0.0-SNAPSHOT.pom</canonicalName><fileName>pom.xml</fileName><groupId>com.trekglobal.idempiere.extensions</groupId><md5sum>4da960446bbb5ebfa10f83ca57afa10e</md5sum><type>pom</type><version>1.0.0-SNAPSHOT</version></pomArtifact><url>https://jenkins.younex.de/view/all/job/idempiere-rest-master/com.trekglobal.idempiere.extensions$com.trekglobal.idempiere.extensions.main/128/mavenArtifacts/</url></moduleRecord><moduleRecord><mainArtifact><artifactId>com.trekglobal.idempiere.extensions.p2</artifactId><canonicalName>com.trekglobal.idempiere.extensions.p2-1.0.0-SNAPSHOT.pom</canonicalName><fileName>pom.xml</fileName><groupId>com.trekglobal.idempiere.extensions</groupId><md5sum>05e296b67c0c19db23d520228ec88296</md5sum><type>pom</type><version>1.0.0-SNAPSHOT</version></mainArtifact><parent><number>128</number><url>https://jenkins.younex.de/view/all/job/idempiere-rest-master/com.trekglobal.idempiere.extensions$com.trekglobal.idempiere.extensions.p2/128/</url></parent><pomArtifact><artifactId>com.trekglobal.idempiere.extensions.p2</artifactId><canonicalName>com.trekglobal.idempiere.extensions.p2-1.0.0-SNAPSHOT.pom</canonicalName><fileName>pom.xml</fileName><groupId>com.trekglobal.idempiere.extensions</groupId><md5sum>05e296b67c0c19db23d520228ec88296</md5sum><type>pom</type><version>1.0.0-SNAPSHOT</version></pomArtifact><url>https://jenkins.younex.de/view/all/job/idempiere-rest-master/com.trekglobal.idempiere.extensions$com.trekglobal.idempiere.extensions.p2/128/mavenArtifacts/</url></moduleRecord><moduleRecord><mainArtifact><artifactId>com.trekglobal.idempiere.rest.api</artifactId><canonicalName>com.trekglobal.idempiere.rest.api-1.0.0-SNAPSHOT.pom</canonicalName><fileName>pom.xml</fileName><groupId>com.trekglobal.idempiere.extensions</groupId><md5sum>a5b813acbb38f45ca77e2c29eaf3e4a4</md5sum><type>pom</type><version>1.0.0-SNAPSHOT</version></mainArtifact><parent><number>128</number><url>https://jenkins.younex.de/view/all/job/idempiere-rest-master/com.trekglobal.idempiere.extensions$com.trekglobal.idempiere.rest.api/128/</url></parent><pomArtifact><artifactId>com.trekglobal.idempiere.rest.api</artifactId><canonicalName>com.trekglobal.idempiere.rest.api-1.0.0-SNAPSHOT.pom</canonicalName><fileName>pom.xml</fileName><groupId>com.trekglobal.idempiere.extensions</groupId><md5sum>a5b813acbb38f45ca77e2c29eaf3e4a4</md5sum><type>pom</type><version>1.0.0-SNAPSHOT</version></pomArtifact><url>https://jenkins.younex.de/view/all/job/idempiere-rest-master/com.trekglobal.idempiere.extensions$com.trekglobal.idempiere.rest.api/128/mavenArtifacts/</url></moduleRecord><moduleRecord><mainArtifact><artifactId>com.trekglobal.idempiere.rest.api.test</artifactId><canonicalName>com.trekglobal.idempiere.rest.api.test-1.0.0-SNAPSHOT.pom</canonicalName><fileName>pom.xml</fileName><groupId>com.trekglobal.idempiere.extensions</groupId><md5sum>6b92f8ef39daeb8f6844c4e5ed1a4ce2</md5sum><type>pom</type><version>1.0.0-SNAPSHOT</version></mainArtifact><parent><number>128</number><url>https://jenkins.younex.de/view/all/job/idempiere-rest-master/com.trekglobal.idempiere.extensions$com.trekglobal.idempiere.rest.api.test/128/</url></parent><pomArtifact><artifactId>com.trekglobal.idempiere.rest.api.test</artifactId><canonicalName>com.trekglobal.idempiere.rest.api.test-1.0.0-SNAPSHOT.pom</canonicalName><fileName>pom.xml</fileName><groupId>com.trekglobal.idempiere.extensions</groupId><md5sum>6b92f8ef39daeb8f6844c4e5ed1a4ce2</md5sum><type>pom</type><version>1.0.0-SNAPSHOT</version></pomArtifact><url>https://jenkins.younex.de/view/all/job/idempiere-rest-master/com.trekglobal.idempiere.extensions$com.trekglobal.idempiere.rest.api.test/128/mavenArtifacts/</url></moduleRecord></mavenArtifacts><mavenVersionUsed>3.9.6</mavenVersionUsed></mavenModuleSetBuild>