code: protected static String getCanonicalizedResourceLite(final java.net.URL address, final String accountName)
              throws StorageException {
          // Resource path
          final StringBuilder resourcepath = new StringBuilder("/");
          resourcepath.append(accountName);
  
          // Note that AbsolutePath starts with a '/'.
          resourcepath.append(address.getPath());
          final StringBuilder canonicalizedResource = new StringBuilder(resourcepath.toString());
  
          // query parameters
          final Map<String, String[]> queryVariables = PathUtility.parseQueryString(address.getQuery());
  
          final String[] compVals = queryVariables.get("comp");
  
          if (compVals != null) {
  
              final List<String> sortedValues = Arrays.asList(compVals);
              Collections.sort(sortedValues);
  
              canonicalizedResource.append("?comp=");
  
              final StringBuilder stringValue = new StringBuilder();
              for (final String value : sortedValues) {
                  if (stringValue.length() > 0) {
                      stringValue.append(",");
                  }
                  stringValue.append(value);
              }
  
              canonicalizedResource.append(stringValue);
          }
  
          return canonicalizedResource.toString();
      }
docs: Gets the canonicalized resource string for a Blob or Queue service request under the Shared Key Lite
  authentication scheme.
  
  @param address
  the resource URI.
  @param accountName
  the account name for the request.
  @return the canonicalized resource string.
  @throws StorageException