Description
axutil_uri_parse_string() appears designed to handle parsing of URLs, not generic URIs (which consist of both URLs and URNs). A URN consists of a scheme ("urn") followed by a colon, a namespace, another colon an then a name within that namespace. The name itself may contain further colons.
It appears that axutil_uri_parse_string is expecting that a second colon in the input string to indicate the start of the port number (http://somehost:port/blah), and if that string can't be converted to a number, the uri is invalid. With a URN this isn't the case (urn:ietf:rfc:2648). Unfortunately, the failure isn't communicated upwards.
axutil_uri_parse_string() should be modified to accept both urls and urns, and the API updated appropriately (when called on a urn, axutil_uri_get_port() should return an error value, etc.). a new function to determine if the uri is a urn or url should be added, and new functions to access the urn specific components added.
In my particular case, the incorrect parsing is hampering interaction with an ebXML registry/repository, which indicates operation status in the form of a uri attribute in the returned structure.