code: private static URI getBlobId(String token) {
          try {
              int i = token.indexOf('+');
              if (i == -1) {
                  return new URI(new PID(token).toURI());
              } else {
                  String[] dsParts = token.substring(i + 1).split("\\+");
                  if (dsParts.length != 2) {
                      throw new IllegalArgumentException(
                              "Malformed datastream token: " + token);
                  }
                  return new URI(Constants.FEDORA.uri
                               + token.substring(0, i) + "/"
                               + uriEncode(dsParts[0]) + "/"
                               + uriEncode(dsParts[1]));
              }
          } catch (MalformedPIDException e) {
              throw new IllegalArgumentException(
                      "Malformed object token: " + token, e);
          } catch (URISyntaxException e) {
              throw new IllegalArgumentException(
                      "Malformed object or datastream token: " + token, e);
          }
      }
docs: Converts a token to a token-as-blobId.
  <p>
  Object tokens are simply prepended with <code>info:fedora/</code>,
  whereas datastream tokens are additionally converted such that
  <code>ns:id+dsId+dsVersionId</code> becomes
  <code>info:fedora/ns:id/dsId/dsVersionId</code>, with the dsId
  and dsVersionId segments URI-percent-encoded with UTF-8 character
  encoding.
  
  @param token the token to convert.
  @return the blob id.
  @throws IllegalArgumentException if the token is not a well-formed
  pid or datastream token.