Parsing prospero parameters
Check input

Your comments mention that url shouldn't be null, so it's best to make sure that it really isn't:

    if (url == null) {
        throw new IllegalArgumentException("url cannot be null");
    }


Nested if statements


        if (paramParts.length == 1) {
            if (name.equals(paramParts[0])) {
                return null;
            }
        }



You have this principle three times. It can be written as:

        if (paramParts.length == 1 &amp;&amp; name.equals(paramParts[0])) {
            return null;
        }


Although I would rewritten your if statements like this:

        if (paramParts.length &gt; 0 &amp;&amp;  name.equals(paramParts[0])) {
            switch(paramParts.length) {
                case 1:
                    return null;
                case 2:
                    return paramParts[1];
                default:
                    return param.substring(name.length() + 1);
            }
        }


And are you sure that paramParts.length == 2 (now case 2) is really needed? I think the other cases cover it.

Use early return

If you return early, you can reduce nesting:

if (split.length != 2) {
    return error;
}


Tests

The specification for prosperos says: 


  each field/value pair is separated from each other and from the rest of the URL by a ";" (semicolon).


You are never testing if this would work, and it wouldn't:

String prosperoParam = prospero.getProsperoParam(new URL("http://a:a@a.a.a/a.a;a=a;b=b"), "b", null);
assertEquals(prosperoParam, "b");


If you want to change the spec, I would comment on it in the Java doc (something like: See RFC 4157, but note that this implementation uses '&amp;' instead of ';' for the separation of field/value pairs (it still does use ';' for the separation between the first field/value pair and the rest of the URL).

Also, sometimes you use == to compare strings in your tests, I would replace it with equals.