Your achievements

Level 1

0% to

Level 2

Tip /
Sign in

Sign in to Community

to gain points, level up, and earn exciting badges like the new
BedrockMission!

Learn more

View all

Sign in to view all badges

SOLVED

Get Absolute content path from short URL

vinodprathipati
Level 2
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!

mappings
1 Accepted Solution
kunal23
Correct answer by
Level 10
Level 10

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
kunal23
Correct answer by
Level 10
Level 10

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

vinodprathipati
Level 2
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.
kunal23
Level 10
Level 10
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.
asutosh_jena
Community Advisor
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();

vinodprathipati
Level 2
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.

BrianKasingli
Community Advisor
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.
vinodprathipati
Level 2
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
Manjunath_K
Community Advisor
Community Advisor

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!

 

 

vinodprathipati
Level 2
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