Skip to content

Commit ef150d0

Browse files
committed
Invalid AspectModelURN is valid in latest version
1 parent 10a1f4d commit ef150d0

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

core/esmf-aspect-model-urn/src/main/java/org/eclipse/esmf/aspectmodel/urn/AspectModelUrn.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
* @see <a href="https://eclipse-esmf.github.io/samm-specification/2.0.0/namespaces.html">Definition of the URN</a>
3535
*/
3636
public class AspectModelUrn implements Comparable<AspectModelUrn> {
37-
public static final String NAMESPACE_REGEX = "[a-zA-Z][a-zA-Z0-9]{1,62}\\.[a-zA-Z0-9-]{1,63}(\\.[a-zA-Z0-9_-]{1,63})*";
37+
public static final String NAMESPACE_REGEX = "([a-zA-Z0-9()+,\\-.:=@;$_!*']|%[0-9a-fA-F]{2})+";
3838

3939
public static final String NAMESPACE_REGEX_PART = "[a-zA-Z][a-zA-Z0-9]{1,62}(\\.[a-zA-Z0-9_-]{1,63})*";
4040
public static final Pattern NAMESPACE_PATTERN = Pattern.compile( NAMESPACE_REGEX );
@@ -262,6 +262,9 @@ private static String getName( final boolean isSammUrn, final List<String> urnPa
262262
return modelElementName;
263263
}
264264
if ( MODEL_ELEMENT_TYPES.contains( elementType ) ) {
265+
//Check root model element name before current element name
266+
checkElementName( urnParts.get( ASPECT_NAME_INDEX ), "model element" );
267+
265268
final String modelElementName = urnParts.get( MODEL_ELEMENT_NAME_INDEX );
266269
checkElementName( modelElementName, elementType.getValue() + " element" );
267270
return modelElementName;

core/esmf-aspect-model-urn/src/test/java/org/eclipse/esmf/aspectmodel/urn/AspectModelUrnTest.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -342,4 +342,17 @@ void validNamespaceTest() throws URISyntaxException {
342342
assertThat( elementUrnWithDash.getNamespaceMainPart() ).isNotEmpty();
343343
assertThat( elementUrnWithDash.getNamespaceMainPart() ).isEqualTo( "org.eclipse.esmf-test" );
344344
}
345+
346+
@Test
347+
void invalidModelElementNameTest() throws URISyntaxException {
348+
final URI invalidRootModelElementName = new URI( sammBaseUri + "aspect-model:Er?ors:1.1.0#TestAspect" );
349+
assertThatExceptionOfType( UrnSyntaxException.class )
350+
.isThrownBy( () -> AspectModelUrn.fromUrn( invalidRootModelElementName ) )
351+
.withMessage( "The model element name must match \\p{Alpha}\\p{Alnum}*: Er?ors" );
352+
353+
final URI invalidModelElementName = new URI( sammBaseUri + "aspect-model:Er?ors:1.1.0:dummy#TestAspect" );
354+
assertThatExceptionOfType( UrnSyntaxException.class )
355+
.isThrownBy( () -> AspectModelUrn.fromUrn( invalidModelElementName ) )
356+
.withMessage( "The model element name must match \\p{Alpha}\\p{Alnum}*: Er?ors" );
357+
}
345358
}

0 commit comments

Comments
 (0)