Expand my Community achievements bar.

SOLVED

Get Absolute content path from short URL

Avatar

Level 2

Hi Guys,

 

We are using etc mapping to shorten the URL's, We have a servlet where we will pass shortened URL

 

Param = "/en/testPage.html"

 

is there any way i can get absolute content path in java given short URL?

 

Excepted output : "/content/mywebsite/en/testPage.html"

 

Ay input helps, Thanks in advance!

1 Accepted Solution

Avatar

Correct answer by
Employee Advisor

You can get the reference to a resource from a shortened absolute path. The API method for that is resolve() which does a reverse mapping of path to resource - https://helpx.adobe.com/experience-manager/6-5/sites/developing/using/reference-materials/javadoc/or... 

After you get reference to a resource, you can call resource.getPath() to get the full path of the resource in repository. 

 

For examples see this thread-  https://stackoverflow.com/questions/21105300/cq5-how-to-programmatically-find-out-the-resource-given... 

View solution in original post

10 Replies

Avatar

Correct answer by
Employee Advisor

You can get the reference to a resource from a shortened absolute path. The API method for that is resolve() which does a reverse mapping of path to resource - https://helpx.adobe.com/experience-manager/6-5/sites/developing/using/reference-materials/javadoc/or... 

After you get reference to a resource, you can call resource.getPath() to get the full path of the resource in repository. 

 

For examples see this thread-  https://stackoverflow.com/questions/21105300/cq5-how-to-programmatically-find-out-the-resource-given... 

Avatar

Level 2
Hi Kunal, i tried it but fullPath is not coming up. path = "/en/test.html"; String url = request.getParameter(PATH); Resource resource = request.getResourceResolver().resolve(url); String fullPath = resource.getPath(); i am getting fullPath as /en/test.html, let me know if i am missing something. etec mapping were already in place for publishers.

Avatar

Employee Advisor
You can first test the resolve function in resource resolver mapping testing console. Open this url - http://localhost:4502/system/console/jcrresolver, put "/en/test.html" in the text box and click on resolve button. If you don't see a mapped resource listed then the API method will not work. You will have to check your resolver mapping configurations and validate them.

Avatar

Community Advisor

@vinodprathipati You can use reverse mapping to get the actual content path.
resourceResolver.resolve() - This will give the resource with actual path and using the getPath() on this resource you can get the full path of the resource.

 

Resource resource = resourceResolver.resolve("shortpath");
String fullPath = resource.getPath();

Avatar

Level 2

i tried it but fullPath is not coming up.

path = "/en/test.html";

String url = request.getParameter(PATH);
Resource resource = request.getResourceResolver().resolve(url);
String fullPath = resource.getPath();

 

i am getting fullPath as /en/test.html, let me know if i am missing something. etec mapping were already in place for publishers.

Avatar

Community Advisor

With a servlet, you can do something like this:

 

@reference
private ResourceResolver resourceResolver;

...
String mappedPath = resourceResolver.map("/content/mywebsite/en/testPage");

 


https://sling.apache.org/apidocs/sling8/org/apache/sling/api/resource/ResourceResolver.html

map(String resourcePath)
Returns a path mapped from the (resource) path applying the reverse mapping used by the resolve(String) such that when the path is given to the resolve(String) method the same resource is returned.

Avatar

Level 2
Hi, i checked in jcrresolver and i am able to resolve my path and getting full content path. for e.g."https://mydomain/en/test.html" is resolving into "/content/global/eb/test.html" But from java i am not able to resolve URL properly(in servlet) "request.getResourceResolver.resolve(https://mydomain/en/test.html).getPath() " is giving output as "https://mydomain/en/test.html" instead of "/content/global/eb/test.html", Please let me know if i am missing anything. Thanks

Avatar

Community Advisor
what are your configuration the etc mappings?

Avatar

Level 8

Hi @vinodprathipati 

Please try following steps

 

Access Resource Resolver console http://localhost:4502/system/console/jcrresolver

 

To get absolute path using relative/shorten url: add shorten url & click on resolve.

https://www.test.com/en/testPage   ->  /content/mywebsite/en/testPage   //make sure you are passing complete path with domain name as per your etc mapping.

same value you can get in backend using

resourceResolver.resolve("https://www.test.com/en/testPage") //returns /content/mywebsite/en/testPage

 

 

To get relative/shorten url using absolute path: add complete path & click on map.

/content/mywebsite/en/testPage -> https://www.test.com/en/testPage

same value you can get in backend using

resourceResolver.map("/content/mywebsite/en/testPage") //returns https://www.test.com/en/testPage

 

Hope this helps!

 

 

Avatar

Level 2

Hi,

 

i checked in jcrresolver and i am able to resolve my path and getting full content path.

for e.g."https://mydomain/en/test.html" is resolving into "/content/global/eb/test.html"

 

But from java i am not able to resolve URL properly(in servlet)

"request.getResourceResolver.resolve(https://mydomain/en/test.html).getPath()

" is giving output as "https://mydomain/en/test.html" instead of "/content/global/eb/test.html", Please let me know if i am missing anything. Thanks