You are viewing a plain text version of this content. The canonical link for it is here.
Posted to portalapps-dev@portals.apache.org by wo...@apache.org on 2009/10/05 19:50:07 UTC
svn commit: r821934 [2/2] - in /portals/applications/webcontent/trunk:
webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/
webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/
webcontent-jar/src...
Modified: portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/RewritableHttpReverseProxyServiceImpl.java
URL: http://svn.apache.org/viewvc/portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/RewritableHttpReverseProxyServiceImpl.java?rev=821934&r1=821933&r2=821934&view=diff
==============================================================================
--- portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/RewritableHttpReverseProxyServiceImpl.java (original)
+++ portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/proxy/impl/RewritableHttpReverseProxyServiceImpl.java Mon Oct 5 17:50:07 2009
@@ -26,6 +26,7 @@
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
+import java.util.Map;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
@@ -67,6 +68,8 @@
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import org.apache.portals.applications.webcontent.proxy.HttpReverseProxyConstants;
+import org.apache.portals.applications.webcontent.proxy.HttpReverseProxyException;
+import org.apache.portals.applications.webcontent.proxy.HttpReverseProxyNotFoundException;
import org.apache.portals.applications.webcontent.proxy.HttpReverseProxyPathMapper;
import org.apache.portals.applications.webcontent.proxy.HttpReverseProxyPathMapperProvider;
import org.apache.portals.applications.webcontent.proxy.HttpReverseProxyService;
@@ -173,7 +176,7 @@
}
}
- public void invoke(HttpServletRequest request, HttpServletResponse response) throws IOException
+ public void invoke(HttpServletRequest request, HttpServletResponse response) throws HttpReverseProxyException, IOException
{
// proxyPathMapper can be injected by using request attribute.
HttpReverseProxyPathMapper proxyPathMapper = (HttpReverseProxyPathMapper) request.getAttribute(HttpReverseProxyConstants.PATH_MAPPER);
@@ -192,7 +195,7 @@
if (proxyPathMapper == null)
{
- throw new IOException("Proxy configuration is not defined for " + localPathInfo);
+ throw new HttpReverseProxyNotFoundException("Proxy configuration is not defined for " + localPathInfo);
}
if (hostHeaderValue == null)
@@ -211,7 +214,7 @@
if (proxyTargetURL == null)
{
- throw new IllegalStateException("Cannot translate the location path info into remote URL. " + localPathInfo);
+ throw new HttpReverseProxyNotFoundException("Cannot translate the location path info into remote URL. " + localPathInfo);
}
String queryString = request.getQueryString();
@@ -275,7 +278,7 @@
}
else
{
- throw new IOException("Unsupported method: " + method);
+ throw new HttpReverseProxyException("Unsupported method: " + method);
}
// set sso credentials if available
@@ -321,6 +324,16 @@
}
}
+ Map<String, String> defaultRequestHeaders = proxyPathMapper.getDefaultRequestHeaders();
+
+ if (defaultRequestHeaders != null)
+ {
+ for (Map.Entry<String, String> entry : defaultRequestHeaders.entrySet())
+ {
+ httpRequest.setHeader(entry.getKey(), entry.getValue());
+ }
+ }
+
HttpEntity httpEntity = null;
try
@@ -344,7 +357,7 @@
if (location == null)
{
- throw new IOException("Recieved status code: " + statusCode + " but no " + HttpReverseProxyConstants.HTTP_HEADER_LOCATION + " header was found in the response");
+ throw new HttpReverseProxyException("Recieved status code is " + statusCode + " but no " + HttpReverseProxyConstants.HTTP_HEADER_LOCATION + " header was found in the response");
}
// Modify the redirect to go to this proxy servlet rather that the proxied host
@@ -407,12 +420,33 @@
if (httpEntity != null)
{
+ boolean rewritable = false;
+ Rewriter rewriter = null;
+ ParserAdaptor parserAdaptor = null;
+
+ RewriterController rewriterController = proxyPathMapperProvider.getRewriterController(proxyPathMapper);
+
+ if (rewriterController != null)
+ {
+ parserAdaptor = createParserAdaptor(rewriterController, httpEntity);
+
+ if (parserAdaptor != null)
+ {
+ rewriter = createRewriter(rewriterController, proxyPathMapper);
+ rewritable = (rewriter != null);
+ }
+ }
+
// Pass response headers back to the client
Header [] headerArrayResponse = httpResponse.getAllHeaders();
for (Header header : headerArrayResponse)
{
String headerName = header.getName();
+
+ if (rewritable && StringUtils.equalsIgnoreCase(headerName, HTTP.CONTENT_LEN))
+ continue;
+
String headerValue = header.getValue();
if (StringUtils.equalsIgnoreCase(headerName, HTTP.TARGET_HOST))
@@ -432,10 +466,26 @@
}
// Send the content to the client
- writeHttpEntityToClient(request, response, httpEntity, proxyPathMapper, rewriterContextPath, localPathInfo);
+ writeHttpEntityToClient(response, httpEntity, proxyPathMapper, rewriterContextPath, localPathInfo, rewriter, parserAdaptor);
}
}
}
+ catch (IOException e)
+ {
+ if (log.isDebugEnabled())
+ {
+ log.error("IOException occurred during execution for " + proxyTargetURL, e);
+ }
+ else
+ {
+ log.error("IOException occurred during execution for {} {}", proxyTargetURL, e);
+ }
+
+ httpRequest.abort();
+ httpEntity = null;
+
+ throw e;
+ }
catch (Exception e)
{
if (log.isDebugEnabled())
@@ -450,7 +500,7 @@
httpRequest.abort();
httpEntity = null;
- throw new IOException(e.toString());
+ throw new HttpReverseProxyException(e);
}
finally
{
@@ -461,11 +511,13 @@
}
}
- private void writeHttpEntityToClient(HttpServletRequest request, HttpServletResponse response,
+ private void writeHttpEntityToClient(HttpServletResponse response,
HttpEntity httpEntity,
HttpReverseProxyPathMapper proxyPathMapper,
String rewriterContextPath,
- String localPathInfo) throws IOException
+ String localPathInfo,
+ Rewriter rewriter,
+ ParserAdaptor parserAdaptor) throws Exception
{
InputStream in = null;
Reader reader = null;
@@ -481,127 +533,48 @@
if (in != null)
{
out = response.getOutputStream();
-
- RewriterController rewriterController = proxyPathMapperProvider.getRewriterController(proxyPathMapper);
- Rewriter rewriter = null;
- if (rewriterController != null)
- {
- Ruleset rewriterRuleset = proxyPathMapperProvider.getRewriterRuleset(proxyPathMapper);
-
- if (rewriterRuleset == null)
- {
- rewriter = rewriterController.createRewriter();
- }
- else
- {
- rewriter = rewriterController.createRewriter(rewriterRuleset);
- }
- }
-
- if (rewriterController == null || rewriter == null)
+ if (rewriter == null || parserAdaptor == null)
{
IOUtils.copy(in, out);
out.flush();
}
else
{
- String mimeType = "text/html";
- String contentType = null;
- Header contentTypeHeader = httpEntity.getContentType();
+ boolean gzipEncoded = false;
+ Header contentEncodingHeader = httpEntity.getContentEncoding();
- if (contentTypeHeader != null)
+ if (contentEncodingHeader != null)
{
- contentType = contentTypeHeader.getValue();
+ gzipEncoded = StringUtils.equalsIgnoreCase("gzip", contentEncodingHeader.getValue());
}
- if (contentType != null)
+ if (parserAdaptor instanceof ReverseProxyRewritingContextAware)
{
- int offset = contentType.indexOf(';');
-
- if (offset > 0)
- {
- mimeType = contentType.substring(0, offset).trim();
- }
- else
- {
- mimeType = contentType;
- }
+ ReverseProxyRewritingContext rewritingContext =
+ new DefaultReverseProxyRewritingContext(proxyPathMapper, proxyPathMapperProvider, rewriterContextPath);
+ ((ReverseProxyRewritingContextAware) parserAdaptor).setReverseProxyRewritingContext(rewritingContext);
}
- ParserAdaptor parserAdaptor = null;
+ String responseCharSet = EntityUtils.getContentCharSet(httpEntity);
- try
+ if (responseCharSet != null)
{
- parserAdaptor = rewriterController.createParserAdaptor(mimeType);
- }
- catch (Exception e)
- {
- if (log.isDebugEnabled())
- {
- log.error("Failed to create parser adaptor.", e);
- }
- else
- {
- log.error("Failed to create parser adaptor. {}", e.toString());
- }
- }
-
- if (parserAdaptor == null)
- {
- IOUtils.copy(in, out);
- out.flush();
+ reader = new InputStreamReader(gzipEncoded ? new GZIPInputStream(in) : in, responseCharSet);
+ writer = new OutputStreamWriter(gzipEncoded ? new GZIPOutputStream(out) : out, responseCharSet);
}
else
{
- boolean gzipEncoded = false;
- Header contentEncodingHeader = httpEntity.getContentEncoding();
-
- if (contentEncodingHeader != null)
- {
- gzipEncoded = StringUtils.equalsIgnoreCase("gzip", contentEncodingHeader.getValue());
- }
-
- if (parserAdaptor instanceof ReverseProxyRewritingContextAware)
- {
- ReverseProxyRewritingContext rewritingContext =
- new DefaultReverseProxyRewritingContext(proxyPathMapper, proxyPathMapperProvider, rewriterContextPath);
- ((ReverseProxyRewritingContextAware) parserAdaptor).setReverseProxyRewritingContext(rewritingContext);
- }
-
- String responseCharSet = EntityUtils.getContentCharSet(httpEntity);
-
- if (responseCharSet != null)
- {
- reader = new InputStreamReader(gzipEncoded ? new GZIPInputStream(in) : in, responseCharSet);
- writer = new OutputStreamWriter(gzipEncoded ? new GZIPOutputStream(out) : out, responseCharSet);
- }
- else
- {
- reader = new InputStreamReader(gzipEncoded ? new GZIPInputStream(in) : in);
- writer = new OutputStreamWriter(gzipEncoded ? new GZIPOutputStream(out) : out);
- }
-
- rewriter.setBaseUrl(rewriterContextPath + localPathInfo);
- rewriter.rewrite(parserAdaptor, reader, writer);
- writer.flush();
+ reader = new InputStreamReader(gzipEncoded ? new GZIPInputStream(in) : in);
+ writer = new OutputStreamWriter(gzipEncoded ? new GZIPOutputStream(out) : out);
}
+
+ rewriter.setBaseUrl(rewriterContextPath + localPathInfo);
+ rewriter.rewrite(parserAdaptor, reader, writer);
+ writer.flush();
}
}
}
- catch (Exception e)
- {
- if (log.isDebugEnabled())
- {
- log.error("Exception occurred during writing content.", e);
- }
- else
- {
- log.error("Exception occurred during writing content. {}", e.toString());
- }
-
- throw new IOException(e.getLocalizedMessage());
- }
finally
{
if (reader != null)
@@ -623,6 +596,46 @@
}
}
+ private Rewriter createRewriter(RewriterController rewriterController, HttpReverseProxyPathMapper proxyPathMapper) throws Exception
+ {
+ Ruleset rewriterRuleset = proxyPathMapperProvider.getRewriterRuleset(proxyPathMapper);
+
+ if (rewriterRuleset == null)
+ {
+ return rewriterController.createRewriter();
+ }
+ else
+ {
+ return rewriterController.createRewriter(rewriterRuleset);
+ }
+ }
+
+ private ParserAdaptor createParserAdaptor(RewriterController rewriterController, HttpEntity httpEntity) throws Exception
+ {
+ String contentType = null;
+ Header contentTypeHeader = httpEntity.getContentType();
+
+ if (contentTypeHeader != null)
+ {
+ contentType = contentTypeHeader.getValue();
+ }
+
+ if (contentType == null)
+ {
+ return null;
+ }
+
+ String mimeType = contentType;
+ int offset = mimeType.indexOf(';');
+
+ if (offset > 0)
+ {
+ mimeType = mimeType.substring(0, offset).trim();
+ }
+
+ return rewriterController.createParserAdaptor(mimeType);
+ }
+
private List<SSOSiteCredentials> getSSOSiteCredentials(String siteURL, DefaultHttpClient httpClient, HttpServletRequest request)
{
SSOSiteCredentialsProvider credsProvider = (SSOSiteCredentialsProvider) request.getAttribute(HttpReverseProxyConstants.SSO_SITE_CREDENTIALS_PROVIDER);
Added: portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/rewriter/AbstractTextLinesParserAdaptor.java
URL: http://svn.apache.org/viewvc/portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/rewriter/AbstractTextLinesParserAdaptor.java?rev=821934&view=auto
==============================================================================
--- portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/rewriter/AbstractTextLinesParserAdaptor.java (added)
+++ portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/rewriter/AbstractTextLinesParserAdaptor.java Mon Oct 5 17:50:07 2009
@@ -0,0 +1,74 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.portals.applications.webcontent.rewriter;
+
+import java.io.BufferedWriter;
+import java.io.PrintWriter;
+import java.io.Reader;
+import java.io.Writer;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.io.LineIterator;
+import org.apache.commons.lang.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * AbstractTextLinesParserAdaptor
+ *
+ * @version $Id$
+ */
+public abstract class AbstractTextLinesParserAdaptor implements ParserAdaptor
+{
+
+ private static Logger log = LoggerFactory.getLogger(AbstractTextLinesParserAdaptor.class);
+
+ public void rewrite(Rewriter rewriter, Reader reader, Writer writer) throws RewriterException
+ {
+ PrintWriter out = new PrintWriter(new BufferedWriter(writer));
+
+ for (LineIterator lineIt = IOUtils.lineIterator(reader); lineIt.hasNext(); )
+ {
+ String line = lineIt.nextLine();
+
+ if (!StringUtils.isBlank(line))
+ {
+ try
+ {
+ line = rewriteLine(line);
+ }
+ catch (Exception e)
+ {
+ log.warn("Error during {}: {}", "replacement", e);
+ }
+ }
+
+ out.println(line);
+ }
+
+ out.flush();
+ }
+
+ protected abstract String rewriteLine(String line) throws Exception;
+
+ public void parse(Rewriter rewriter, Reader reader) throws RewriterException
+ {
+ throw new UnsupportedOperationException("Text lines parser adaptor does not support parse() method.");
+ }
+
+}
Propchange: portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/rewriter/AbstractTextLinesParserAdaptor.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/rewriter/AbstractTextLinesParserAdaptor.java
------------------------------------------------------------------------------
svn:keywords = Id
Propchange: portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/rewriter/AbstractTextLinesParserAdaptor.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/rewriter/MappingClasspathRewriterController.java
URL: http://svn.apache.org/viewvc/portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/rewriter/MappingClasspathRewriterController.java?rev=821934&r1=821933&r2=821934&view=diff
==============================================================================
--- portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/rewriter/MappingClasspathRewriterController.java (original)
+++ portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/rewriter/MappingClasspathRewriterController.java Mon Oct 5 17:50:07 2009
@@ -21,6 +21,7 @@
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.List;
+import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -42,6 +43,12 @@
{
super(mappingFile);
}
+
+ public MappingClasspathRewriterController( String mappingFile, Class basicRewriterClass, Class ruleBasedRewriterClass, Map<String, Class> adaptorMimeTypeClassMap )
+ throws RewriterException
+ {
+ super(mappingFile, basicRewriterClass, ruleBasedRewriterClass, adaptorMimeTypeClassMap);
+ }
public MappingClasspathRewriterController( String mappingFile, List rewriterClasses, List adaptorClasses )
throws RewriterException
Modified: portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/rewriter/MappingRewriterController.java
URL: http://svn.apache.org/viewvc/portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/rewriter/MappingRewriterController.java?rev=821934&r1=821933&r2=821934&view=diff
==============================================================================
--- portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/rewriter/MappingRewriterController.java (original)
+++ portals/applications/webcontent/trunk/webcontent-jar/src/main/java/org/apache/portals/applications/webcontent/rewriter/MappingRewriterController.java Mon Oct 5 17:50:07 2009
@@ -19,6 +19,7 @@
import java.io.File;
import java.io.InputStream;
import java.io.Reader;
+import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
@@ -28,6 +29,7 @@
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
+import org.apache.commons.beanutils.BeanUtils;
import org.apache.portals.applications.webcontent.rewriter.html.SwingParserAdaptor;
import org.apache.portals.applications.webcontent.rewriter.rules.Ruleset;
import org.apache.portals.applications.webcontent.rewriter.xml.SaxParserAdaptor;
@@ -65,13 +67,22 @@
/** configured basic rewriter class */
protected Class basicRewriterClass = BasicRewriter.class;
-
+
/** configured ruleset rewriter class */
protected Class rulesetRewriterClass = RulesetRewriterImpl.class;
/** Adaptors */
protected Map<String, Class> parserAdaptorMimeTypeClassMap;
-
+
+ /** Basic rewriter instance properties */
+ protected Map<String, Object> basicRewriterProps;
+
+ /** Ruleset rewriter instance properties */
+ protected Map<String, Object> rulesetRewriterProps;
+
+ /** Parser adaptor rewriter instance properties map */
+ protected Map<String, Map<String, Object>> parserAdaptorMimeTypePropsMap;
+
public MappingRewriterController( String mappingFile ) throws RewriterException
{
this.mappingFile = mappingFile;
@@ -181,7 +192,24 @@
public Rewriter createRewriter() throws InstantiationException, IllegalAccessException
{
- return (Rewriter) basicRewriterClass.newInstance();
+ Rewriter rewriter = (Rewriter) basicRewriterClass.newInstance();
+
+ try
+ {
+ if (basicRewriterProps != null)
+ {
+ for (Map.Entry<String, Object> entry : basicRewriterProps.entrySet())
+ {
+ BeanUtils.setProperty(rewriter, entry.getKey(), entry.getValue());
+ }
+ }
+ }
+ catch (InvocationTargetException e)
+ {
+ throw new RuntimeException(e);
+ }
+
+ return rewriter;
}
public RulesetRewriter createRewriter( Ruleset ruleset ) throws RewriterException
@@ -190,6 +218,22 @@
{
RulesetRewriter rewriter = (RulesetRewriter) rulesetRewriterClass.newInstance();
rewriter.setRuleset(ruleset);
+
+ try
+ {
+ if (rulesetRewriterProps != null)
+ {
+ for (Map.Entry<String, Object> entry : rulesetRewriterProps.entrySet())
+ {
+ BeanUtils.setProperty(rewriter, entry.getKey(), entry.getValue());
+ }
+ }
+ }
+ catch (InvocationTargetException e)
+ {
+ throw new RuntimeException(e);
+ }
+
return rewriter;
}
catch (Exception e)
@@ -203,12 +247,35 @@
{
try
{
+ ParserAdaptor parserAdaptor = null;
Class parserAdaptorClass = parserAdaptorMimeTypeClassMap.get(mimeType);
if (parserAdaptorClass != null)
{
- return (ParserAdaptor) parserAdaptorClass.newInstance();
+ parserAdaptor = (ParserAdaptor) parserAdaptorClass.newInstance();
+
+ try
+ {
+ if (parserAdaptorMimeTypePropsMap != null)
+ {
+ Map<String, Object> parserAdaptorProps = parserAdaptorMimeTypePropsMap.get(mimeType);
+
+ if (parserAdaptorProps != null)
+ {
+ for (Map.Entry<String, Object> entry : parserAdaptorProps.entrySet())
+ {
+ BeanUtils.setProperty(parserAdaptor, entry.getKey(), entry.getValue());
+ }
+ }
+ }
+ }
+ catch (InvocationTargetException e)
+ {
+ throw new RuntimeException(e);
+ }
}
+
+ return parserAdaptor;
}
catch (Exception e)
{
@@ -229,17 +296,28 @@
throw new RewriterException("The mapping file is not set.");
}
- File file = new File(this.mappingFile);
-
- if (!file.isFile())
- {
- throw new RewriterException("The mapping file is not available: " + this.mappingFile);
- }
+ Reader reader = getReader(this.mappingFile);
try
{
- this.mapper = new Mapping();
- this.mapper.loadMapping(file.toURL());
+ if (reader == null && this.mappingFile != null)
+ {
+ File file = new File(this.mappingFile);
+
+ if (!file.isFile())
+ {
+ throw new RewriterException("The mapping file is not available: " + this.mappingFile);
+ }
+
+ this.mapper = new Mapping();
+ this.mapper.loadMapping(file.toURL());
+ }
+ else
+ {
+ InputSource is = new InputSource(reader);
+ is.setSystemId(this.mappingFile);
+ this.mapper.loadMapping(is);
+ }
}
catch (Exception e)
{
@@ -307,5 +385,40 @@
return ruleset;
}
+
+ public Map<String, Object> getBasicRewriterProps()
+ {
+ return basicRewriterProps;
+ }
+
+ public void setBasicRewriterProps(Map<String, Object> props)
+ {
+ basicRewriterProps = props;
+ }
+
+ public Map<String, Object> getRulesetRewriterProps()
+ {
+ return rulesetRewriterProps;
+ }
+
+ public void setRulesetRewriterProps(Map<String, Object> props)
+ {
+ rulesetRewriterProps = props;
+ }
+
+ public Map<String, Map<String, Object>> getParserAdaptorMimeTypePropsMap()
+ {
+ return parserAdaptorMimeTypePropsMap;
+ }
+
+ public void setParserAdaptorMimeTypePropsMap(Map<String, Map<String, Object>> propsMap)
+ {
+ parserAdaptorMimeTypePropsMap = propsMap;
+ }
+
+ protected Reader getReader(String resourcePath) throws RewriterException
+ {
+ return null;
+ }
}
\ No newline at end of file
Modified: portals/applications/webcontent/trunk/webcontent-jar/src/test/java/org/apache/portals/applications/webcontent/proxy/TestProxyPathMappings.java
URL: http://svn.apache.org/viewvc/portals/applications/webcontent/trunk/webcontent-jar/src/test/java/org/apache/portals/applications/webcontent/proxy/TestProxyPathMappings.java?rev=821934&r1=821933&r2=821934&view=diff
==============================================================================
--- portals/applications/webcontent/trunk/webcontent-jar/src/test/java/org/apache/portals/applications/webcontent/proxy/TestProxyPathMappings.java (original)
+++ portals/applications/webcontent/trunk/webcontent-jar/src/test/java/org/apache/portals/applications/webcontent/proxy/TestProxyPathMappings.java Mon Oct 5 17:50:07 2009
@@ -35,7 +35,7 @@
*/
public class TestProxyPathMappings extends TestCase
{
- private HttpReverseProxyPathMapperProvider pathMapperProvider;
+ private DefaultHttpReverseProxyPathMapperProviderImpl pathMapperProvider;
@Override
public void setUp()
@@ -43,9 +43,13 @@
Map<HttpReverseProxyPathMapper, RewriterController> rewriterControllerMap = new HashMap<HttpReverseProxyPathMapper, RewriterController>();
Map<HttpReverseProxyPathMapper, Ruleset> rewriterRulesetMap = new HashMap<HttpReverseProxyPathMapper, Ruleset>();
List<HttpReverseProxyPathMapper> proxyPathMappers = new ArrayList<HttpReverseProxyPathMapper>();
- proxyPathMappers.add(new DefaultHttpReverseProxyPathMapperImpl("localhost", "/localhost/", "http://www.localhost.com/"));
- proxyPathMappers.add(new DefaultHttpReverseProxyPathMapperImpl("apache", "/*_apache/", "http://$1.apache.org/"));
+ proxyPathMappers.add(new DefaultHttpReverseProxyPathMapperImpl("localhost", "/localhost/", "http://www.localhost.com/", null));
+ proxyPathMappers.add(new DefaultHttpReverseProxyPathMapperImpl("localhost1", "/localhost/path1/", "http://www.localhost.com/path1/", null));
+ proxyPathMappers.add(new DefaultHttpReverseProxyPathMapperImpl("localhost2", "/localhost/path1/path2/", "http://www.localhost.com/path1/path2/", null));
+ proxyPathMappers.add(new DefaultHttpReverseProxyPathMapperImpl("apache", "/*_apache/", "http://$1.apache.org/", null));
+ proxyPathMappers.add(new DefaultHttpReverseProxyPathMapperImpl("apache", "/*.google.*/", "http://$1.google.$2/", null));
pathMapperProvider = new DefaultHttpReverseProxyPathMapperProviderImpl(proxyPathMappers, rewriterControllerMap, rewriterRulesetMap);
+ pathMapperProvider.setMaxMatchingPathPartCount(3);
}
public void testProxyPathMappings() throws Exception
@@ -80,8 +84,26 @@
mapper = pathMapperProvider.findMapperByRemoteURL("http://portals.apache.org/index.html");
assertEquals("/portals_apache/", mapper.getLocalBasePath());
+ mapper = pathMapperProvider.findMapperByRemoteURL("http://www.localhost.com/path1/path2/index.html");
+ assertEquals("/localhost/path1/path2/", mapper.getLocalBasePath());
+
+ mapper = pathMapperProvider.findMapperByRemoteURL("http://www.localhost.com/path1/index.html");
+ assertEquals("/localhost/path1/", mapper.getLocalBasePath());
+
mapper = pathMapperProvider.findMapperByRemoteURL("http://www.localhost.com/index.html");
assertEquals("/localhost/", mapper.getLocalBasePath());
+
+ mapper = pathMapperProvider.findMapperByRemoteURL("http://www.localhost.com/path2/index.html");
+ assertEquals("/localhost/", mapper.getLocalBasePath());
+
+ mapper = pathMapperProvider.findMapperByRemoteURL("http://www.localhost.com");
+ assertEquals("/localhost/", mapper.getLocalBasePath());
+
+ mapper = pathMapperProvider.findMapperByRemoteURL("http://www.google.com/");
+ assertEquals("/www.google.com/", mapper.getLocalBasePath());
+
+ mapper = pathMapperProvider.findMapperByRemoteURL("http://images.google.com/query?q=1/");
+ assertEquals("/images.google.com/", mapper.getLocalBasePath());
}
}
Modified: portals/applications/webcontent/trunk/webcontent-jar/src/test/java/org/apache/portals/applications/webcontent/proxy/TestReverseProxyLinkRewritingParserAaptor.java
URL: http://svn.apache.org/viewvc/portals/applications/webcontent/trunk/webcontent-jar/src/test/java/org/apache/portals/applications/webcontent/proxy/TestReverseProxyLinkRewritingParserAaptor.java?rev=821934&r1=821933&r2=821934&view=diff
==============================================================================
--- portals/applications/webcontent/trunk/webcontent-jar/src/test/java/org/apache/portals/applications/webcontent/proxy/TestReverseProxyLinkRewritingParserAaptor.java (original)
+++ portals/applications/webcontent/trunk/webcontent-jar/src/test/java/org/apache/portals/applications/webcontent/proxy/TestReverseProxyLinkRewritingParserAaptor.java Mon Oct 5 17:50:07 2009
@@ -30,7 +30,7 @@
import org.apache.portals.applications.webcontent.proxy.impl.DefaultHttpReverseProxyPathMapperImpl;
import org.apache.portals.applications.webcontent.proxy.impl.DefaultHttpReverseProxyPathMapperProviderImpl;
import org.apache.portals.applications.webcontent.proxy.impl.DefaultReverseProxyRewritingContext;
-import org.apache.portals.applications.webcontent.proxy.impl.PassMappingLinkRewritingParserAaptor;
+import org.apache.portals.applications.webcontent.proxy.impl.DefaultReverseProxyLinkRewritingParserAaptor;
import org.apache.portals.applications.webcontent.rewriter.RewriterController;
import org.apache.portals.applications.webcontent.rewriter.rules.Ruleset;
import org.slf4j.Logger;
@@ -66,8 +66,8 @@
@Override
public void setUp()
{
- apacheProxyPathMapper = new DefaultHttpReverseProxyPathMapperImpl("apache", "/*_apache/", "http://$1.apache.org/");
- localhostProxyPathMapper = new DefaultHttpReverseProxyPathMapperImpl("localhost", "/localhost/", "http://www.localhost.com/");
+ apacheProxyPathMapper = new DefaultHttpReverseProxyPathMapperImpl("apache", "/*_apache/", "http://$1.apache.org/", null);
+ localhostProxyPathMapper = new DefaultHttpReverseProxyPathMapperImpl("localhost", "/localhost/", "http://www.localhost.com/", null);
Map<HttpReverseProxyPathMapper, RewriterController> rewriterControllerMap = new HashMap<HttpReverseProxyPathMapper, RewriterController>();
Map<HttpReverseProxyPathMapper, Ruleset> rewriterRulesetMap = new HashMap<HttpReverseProxyPathMapper, Ruleset>();
@@ -85,7 +85,7 @@
proxyPathMapperProvider,
"/webcontent/rproxy");
- PassMappingLinkRewritingParserAaptor parserAdaptor = new PassMappingLinkRewritingParserAaptor();
+ DefaultReverseProxyLinkRewritingParserAaptor parserAdaptor = new DefaultReverseProxyLinkRewritingParserAaptor();
parserAdaptor.setReverseProxyRewritingContext(rewritingContext);
StringReader reader = new StringReader(html);
Modified: portals/applications/webcontent/trunk/webcontent-war/src/main/webapp/WEB-INF/conf/reverseproxy.properties
URL: http://svn.apache.org/viewvc/portals/applications/webcontent/trunk/webcontent-war/src/main/webapp/WEB-INF/conf/reverseproxy.properties?rev=821934&r1=821933&r2=821934&view=diff
==============================================================================
--- portals/applications/webcontent/trunk/webcontent-war/src/main/webapp/WEB-INF/conf/reverseproxy.properties (original)
+++ portals/applications/webcontent/trunk/webcontent-war/src/main/webapp/WEB-INF/conf/reverseproxy.properties Mon Oct 5 17:50:07 2009
@@ -68,7 +68,11 @@
# Proxy Pass Reverse Mapping configurations for each category
# ... Put the path item names here. Each path item will be evaluated by the order.
-proxy.reverse.pass = apache, localhost, somewhere
+proxy.reverse.pass = apache, localhost, somewhere
+# ... Set cache count of proxy path mappers which are dynamically created by glob style mappings.
+proxy.reverse.pass.dynamicProxyPathMapperCacheCount = 1000
+# ... Set max matching path part count
+proxy.reverse.pass.maxMatchingPathPartCount = 2
# ... Sets detail attributes for each path item.
@@ -76,11 +80,9 @@
proxy.reverse.pass.apache.remote = http://$1.apache.org/
proxy.reverse.pass.apache.rewriter.basic = org.apache.portals.applications.webcontent.rewriter.WebContentRewriter
proxy.reverse.pass.apache.rewriter.parserAdaptor = html
-# ... SimpleLinkRewritingParserAaptor rewrites links only based on its remote base URLs,
-# ... while PassMappingLinkRewritingParserAaptor rewrites links based on all reverse proxy pass mappings.
-#proxy.reverse.pass.apache.rewriter.parserAdaptor.html = org.apache.portals.applications.webcontent.proxy.impl.SimpleLinkRewritingParserAaptor
-proxy.reverse.pass.apache.rewriter.parserAdaptor.html = org.apache.portals.applications.webcontent.proxy.impl.PassMappingLinkRewritingParserAaptor
+proxy.reverse.pass.apache.rewriter.parserAdaptor.html = org.apache.portals.applications.webcontent.proxy.impl.DefaultReverseProxyLinkRewritingParserAaptor
proxy.reverse.pass.apache.rewriter.parserAdaptor.html.mimeType = text/html
+proxy.reverse.pass.apache.rewriter.parserAdaptor.html.property.lookUpAllMappings = true
proxy.reverse.pass.localhost.local = /localhost/
proxy.reverse.pass.localhost.remote = http://localhost:8080/
@@ -98,3 +100,5 @@
proxy.reverse.pass.somewhere.rewriter.parserAdaptor.xml.mimeType = text/xml
proxy.reverse.pass.somewhere.rewriter.ruleMappings = /WEB-INF/conf/rewriter-rules-mapping.xml
proxy.reverse.pass.somewhere.rewriter.rules = /WEB-INF/conf/default-rewriter-rules.xml
+proxy.reverse.pass.somewhere.request.header.Accept-Language = en
+proxy.reverse.pass.somewhere.request.header.X-Custom-Header = A custom value