Get Absolute content path from short URL | Community
Skip to main content
Level 2
December 21, 2020
Solved

Get Absolute content path from short URL

  • December 21, 2020
  • 4 replies
  • 8095 views

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!

This post is no longer active and is closed to new replies. Need help? Start a new post to ask your question.
Best answer by Kunal_Gaba_

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/org/apache/sling/api/resource/ResourceResolver.html#resolve-java.lang.String- 

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-a-url 

4 replies

Kunal_Gaba_
Kunal_Gaba_Accepted solution
December 21, 2020

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/org/apache/sling/api/resource/ResourceResolver.html#resolve-java.lang.String- 

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-a-url 

Level 2
December 21, 2020
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.
Asutosh_Jena_
Community Advisor
Community Advisor
December 21, 2020

@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();

Level 2
December 21, 2020

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.

BrianKasingli
Community Advisor and Adobe Champion
Community Advisor and Adobe Champion
December 21, 2020

With a servlet, you can do something like this:

 

@3214626 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.
Level 2
December 21, 2020
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
Manjunath_K
Level 7
December 21, 2020

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!

 

 

Level 2
December 21, 2020

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