/** * @param mapping in the form host=path * @Deprecated since 4.5.18, Use {@link #addMapping(HostURIMapping))} instead. * Adds a host mapping (used by content2bean). */ @Deprecated public void addHost(String mapping) { String[] hostToPath = StringUtils.split(mapping, "="); if (hostToPath != null && hostToPath.length == 2) { synchronized (hosts) { hosts.add(new HostURIMapping(hostToPath[0], hostToPath[1])); } } }
/** * Choose the mapping host that matches the request host, with the least number of additional characters. * * @return The URI to map to. */ protected String tryToMapHost() { final int NO_MATCHED_MAPPINGS = -1; int bestMatchValue = NO_MATCHED_MAPPINGS; String toURI = null; if (hosts != null && !hosts.isEmpty()) { String requestHost = ((WebContext) MgnlContext.getInstance()).getRequest().getServerName(); Iterator<HostURIMapping> hostIt = hosts.iterator(); while (hostIt.hasNext()) { HostURIMapping hk = hostIt.next(); if (hk.isValid() && requestHost.endsWith(hk.getHost())) { int matchValue = (requestHost.length() - hk.getHost().length()); if (bestMatchValue == NO_MATCHED_MAPPINGS || matchValue < bestMatchValue) { bestMatchValue = matchValue; toURI = hk.getToURI(); } } } } return toURI; }
@Test public void mapURIWhenHostMappingIsNull() throws Exception { // GIVEN hostBasedMapping.addMapping(new HostURIMapping(null, null)); // WHEN VirtualURIMapping.MappingResult res = hostBasedMapping.mapURI("/products"); // THEN assertNotNull(res); assertEquals("/product/detail.html", res.getToURI()); } }
@Test public void testMappingThatDoesMatch() { // GIVEN hostBasedMapping.addMapping(new HostURIMapping("host1", "/path1")); // WHEN final VirtualURIMapping.MappingResult res = hostBasedMapping.mapURI("/products"); // THEN assertNotNull(res); assertEquals("/path1", res.getToURI()); }
@Test public void mapURIWhenHostMappingIsNull() throws Exception { // GIVEN hostBasedMapping.addMapping(new HostBasedVirtualURIMapping.HostURIMapping(null, null)); hostBasedMapping.setFromURI("/products/([0-9a-z]+)\\.html"); hostBasedMapping.setToURI("/product/detail.html?productId=$1"); // WHEN final VirtualURIMapping.MappingResult res = hostBasedMapping.mapURI("/products/magnolia.html"); // THEN assertNotNull(res); assertEquals("/product/detail.html?productId=magnolia", res.getToURI()); } }
@Test public void validateUriWhenToURIIsNotSetButHostMappingIsSet() throws Exception { // GIVEN HostBasedVirtualURIMapping hostBasedMapping = new HostBasedVirtualURIMapping(); hostBasedMapping.setFromURI("/products"); hostBasedMapping.addMapping(new HostURIMapping("test.com", "/somewhere")); // WHEN - THEN assertTrue(hostBasedMapping.isValid()); }
@Test public void testMappingWhereOneDoesMatch() { // GIVEN hostBasedMapping.addMapping(new HostURIMapping("host0", "/path0")); hostBasedMapping.addMapping(new HostURIMapping("host1", "/path1")); hostBasedMapping.addMapping(new HostURIMapping("host2", "/path2")); // WHEN final VirtualURIMapping.MappingResult res = hostBasedMapping.mapURI("/products"); // THEN assertNotNull(res); assertEquals("/path1", res.getToURI()); }
@Test public void testMappingThatBestMatchWinsPart2() { // GIVEN setUpContextAndHost("subdomain.host.com"); hostBasedMapping.addMapping(new HostURIMapping("subdomain.host.com", "/path-com-subdomain")); hostBasedMapping.addMapping(new HostURIMapping("host.com", "/path-com")); // WHEN final VirtualURIMapping.MappingResult res = hostBasedMapping.mapURI("/products"); // THEN assertNotNull(res); assertEquals("/path-com-subdomain", res.getToURI()); }
@Test public void testMappingThatBestMatchWinsPart1() { // GIVEN setUpContextAndHost("subdomain.host.com"); hostBasedMapping.addMapping(new HostURIMapping("host.com", "/path-com")); hostBasedMapping.addMapping(new HostURIMapping("subdomain.host.com", "/path-com-subdomain")); // WHEN final VirtualURIMapping.MappingResult res = hostBasedMapping.mapURI("/products"); // THEN assertNotNull(res); assertEquals("/path-com-subdomain", res.getToURI()); }
@Test public void testMappingThatDoesNotMatch() { // GIVEN hostBasedMapping.addMapping(new HostURIMapping("host2", "/path1")); // WHEN final VirtualURIMapping.MappingResult res = hostBasedMapping.mapURI("/products"); // THEN assertNotNull(res); assertEquals("/product/detail.html", res.getToURI()); }