...
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
package info.magnolia.virtualuri.mapping; import java.net.URI; import java.util.Optional; import javax.servlet.http.HttpServletRequest; import info.magnolia.context.MgnlContext; import info.magnolia.module.site.SiteManager; import info.magnolia.objectfactory.Components; public class SiteAwareExceptionMapping extends DefaultVirtualUriMapping { public static final String SERVLET_ERROR_REQUEST_URI_ATTRIBUTE_NAME = "javax.servlet.error.request_uri"; private String siteName; @Override public Optional<Result> mapUri(URI uri) { HttpServletRequest request = MgnlContext.getWebContext().getRequest(); Object errorRequestObject = request.getAttribute(SERVLET_ERROR_REQUEST_URI_ATTRIBUTE_NAME); if (errorRequestObject == null) { return Optional.empty(); } String errorRequest = errorRequestObject.toString(); String[] requestParts = errorRequest.split("/"); if (requestParts.length >= 3) { errorRequest = "/" + requestParts[2] + "/"; // remove some parts due to Magnolia specific implementation } String requestedSite = Components.getComponent(SiteManager.class).getAssignedSite(request.getServerName(), errorRequest).getName(); if (!siteName.equals(requestedSite)) { return Optional.empty(); } return super.mapUri(uri); } public String getSiteName() { return siteName; } public void setSiteName(String siteName) { this.siteName = siteName; } } |
This source code code SiteAwareExceptionMapping.java is provided without any guarantee as a community creative & publicly available one. Please use it with cares and a bit or risks.
Deployment for light-dev and on Magnolia Cloud
Customers of Magnolia light-dev and Magnolia Cloud could also deploy a Java class into Magnolia using Groovy Classes follow similar to our guideline here Model Class
1._Create corresponding folder structure and a SiteAwareExceptionMapping file using Magnolia Groovy App as below image:
...
Code Block | ||
---|---|---|
| ||
class: "info.magnolia.virtualuri.mapping.SiteAwareExceptionMapping" fromUri: "/customException" toUri: "forwardredirect:/travel/exception" siteName: "travel" |
...
As you can easily find that we have this configuration point '/modules/mgnlsupport/virtualUriMappings/travel-exception-mapping@toUri' which has the value as 'forwardredirect:/travel/exception' then if you have another page somewhere for your site, you can easily change the page location from '/travel/exception' to your new one. The working mechanism is described in our official Virtual URI mapping function.
...