|
I apologize for stepping on your work - it wasn't intentional. I still
have more commits around the URL generation stuff. Adrian Crum Sandglass Software www.sandglass-software.com On 10/24/2013 9:31 AM, [hidden email] wrote: > Author: jleroux > Date: Thu Oct 24 16:31:49 2013 > New Revision: 1535432 > > URL: http://svn.apache.org/r1535432 > Log: > Merge trunk head after Adrian's revert, resolving a conflict in RequestHandler.java > > Modified: > ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/ (props changed) > ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/base/src/org/ofbiz/base/util/template/FreeMarkerWorker.java > ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/common/src/org/ofbiz/common/email/NotificationServices.java > ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/security/src/org/ofbiz/security/SecurityFactory.java > ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webapp/config/freemarkerTransforms.properties > ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webapp/src/org/ofbiz/webapp/OfbizUrlBuilder.java > ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webapp/src/org/ofbiz/webapp/WebAppUtil.java > ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webapp/src/org/ofbiz/webapp/control/RequestHandler.java > ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webapp/src/org/ofbiz/webapp/ftl/OfbizUrlTransform.java > > Propchange: ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/ > ------------------------------------------------------------------------------ > Merged /ofbiz/trunk:r1535158-1535430 > > Modified: ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/base/src/org/ofbiz/base/util/template/FreeMarkerWorker.java > URL: http://svn.apache.org/viewvc/ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/base/src/org/ofbiz/base/util/template/FreeMarkerWorker.java?rev=1535432&r1=1535431&r2=1535432&view=diff > ============================================================================== > --- ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/base/src/org/ofbiz/base/util/template/FreeMarkerWorker.java (original) > +++ ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/base/src/org/ofbiz/base/util/template/FreeMarkerWorker.java Thu Oct 24 16:31:49 2013 > @@ -450,7 +450,8 @@ public class FreeMarkerWorker { > return returnObj; > } > > - public static Object unwrap(Object o) { > + @SuppressWarnings("unchecked") > + public static <T> T unwrap(Object o) { > Object returnObj = null; > > if (o == TemplateModel.NOTHING) { > @@ -461,7 +462,7 @@ public class FreeMarkerWorker { > returnObj = ((BeanModel) o).getWrappedObject(); > } > > - return returnObj; > + return (T) returnObj; > } > > public static void checkForLoop(String path, Map<String, Object> ctx) throws IOException { > > Modified: ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/common/src/org/ofbiz/common/email/NotificationServices.java > URL: http://svn.apache.org/viewvc/ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/common/src/org/ofbiz/common/email/NotificationServices.java?rev=1535432&r1=1535431&r2=1535432&view=diff > ============================================================================== > --- ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/common/src/org/ofbiz/common/email/NotificationServices.java (original) > +++ ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/common/src/org/ofbiz/common/email/NotificationServices.java Thu Oct 24 16:31:49 2013 > @@ -21,29 +21,26 @@ package org.ofbiz.common.email; > import java.io.IOException; > import java.io.StringWriter; > import java.io.Writer; > -import java.net.InetAddress; > import java.net.URL; > -import java.net.UnknownHostException; > import java.util.Locale; > import java.util.Map; > > import javolution.util.FastMap; > > +import org.ofbiz.base.component.ComponentConfig.WebappInfo; > import org.ofbiz.base.util.Debug; > import org.ofbiz.base.util.UtilGenerics; > -import org.ofbiz.base.util.UtilMisc; > import org.ofbiz.base.util.UtilProperties; > import org.ofbiz.base.util.UtilURL; > -import org.ofbiz.base.util.UtilValidate; > import org.ofbiz.base.util.template.FreeMarkerWorker; > import org.ofbiz.entity.Delegator; > -import org.ofbiz.entity.GenericEntityException; > -import org.ofbiz.entity.GenericValue; > import org.ofbiz.service.DispatchContext; > import org.ofbiz.service.GenericServiceException; > import org.ofbiz.service.LocalDispatcher; > import org.ofbiz.service.ModelService; > import org.ofbiz.service.ServiceUtil; > +import org.ofbiz.webapp.OfbizUrlBuilder; > +import org.ofbiz.webapp.WebAppUtil; > > import freemarker.template.TemplateException; > > @@ -255,84 +252,17 @@ public class NotificationServices { > public static void setBaseUrl(Delegator delegator, String webSiteId, Map<String, Object> context) { > // If the baseUrl was not specified we can do a best effort instead > if (!context.containsKey("baseUrl")) { > - StringBuilder httpBase = null; > - StringBuilder httpsBase = null; > - > - String localServer = null; > - > - String httpsPort = null; > - String httpsServer = null; > - String httpPort = null; > - String httpServer = null; > - Boolean enableHttps = null; > - > try { > - // using just the IP address of localhost if we don't have a defined server > - InetAddress localHost = InetAddress.getLocalHost(); > - localServer = localHost.getHostAddress(); > - } catch (UnknownHostException hostException) { > - Debug.logWarning(hostException, "Could not determine localhost, using '127.0.0.1'", module); > - localServer = "127.0.0.1"; > - } > - > - // load the properties from the website entity > - GenericValue webSite = null; > - if (webSiteId != null) { > - try { > - webSite = delegator.findOne("WebSite", UtilMisc.toMap("webSiteId", webSiteId), true); > - if (webSite != null) { > - httpsPort = webSite.getString("httpsPort"); > - httpsServer = webSite.getString("httpsHost"); > - httpPort = webSite.getString("httpPort"); > - httpServer = webSite.getString("httpHost"); > - enableHttps = webSite.getBoolean("enableHttps"); > - } > - } catch (GenericEntityException e) { > - Debug.logWarning(e, "Problems with WebSite entity; using global defaults", module); > - } > - } > - > - // fill in any missing properties with fields from the global file > - if (UtilValidate.isEmpty(httpsPort)) { > - httpsPort = UtilProperties.getPropertyValue("url.properties", "port.https", "443"); > - } > - if (UtilValidate.isEmpty(httpsServer)) { > - httpsServer = UtilProperties.getPropertyValue("url.properties", "force.https.host", localServer); > - } > - if (UtilValidate.isEmpty(httpPort)) { > - httpPort = UtilProperties.getPropertyValue("url.properties", "port.http", "80"); > - } > - if (UtilValidate.isEmpty(httpServer)) { > - httpServer = UtilProperties.getPropertyValue("url.properties", "force.http.host", localServer); > - } > - if (UtilValidate.isEmpty(enableHttps)) { > - enableHttps = (UtilProperties.propertyValueEqualsIgnoreCase("url.properties", "port.https.enabled", "Y")) ? Boolean.TRUE : Boolean.FALSE; > - } > - > - // prepare the (non-secure) URL > - httpBase = new StringBuilder("http://"); > - httpBase.append(httpServer); > - if (!"80".equals(httpPort)) { > - httpBase.append(":"); > - httpBase.append(httpPort); > - } > - > - // set the base (non-secure) URL for any messages requiring it > - context.put("baseUrl", httpBase.toString()); > - > - if (enableHttps.booleanValue()) { > - // prepare the (secure) URL > - httpsBase = new StringBuilder("https://"); > - httpsBase.append(httpsServer); > - if (!"443".equals(httpsPort)) { > - httpsBase.append(":"); > - httpsBase.append(httpsPort); > - } > - > - // set the base (secure) URL for any messages requiring it > - context.put("baseSecureUrl", httpsBase.toString()); > - } else { > - context.put("baseSecureUrl", httpBase.toString()); > + WebappInfo webAppInfo = WebAppUtil.getWebappInfoFromWebsiteId(webSiteId); > + OfbizUrlBuilder builder = OfbizUrlBuilder.from(webAppInfo, delegator); > + StringBuilder newURL = new StringBuilder(); > + builder.buildHostPart(newURL, "", false); > + context.put("baseUrl", newURL.toString()); > + newURL = new StringBuilder(); > + builder.buildHostPart(newURL, "", true); > + context.put("baseSecureUrl", newURL.toString()); > + } catch (Exception e) { > + Debug.logWarning(e, "Exception thrown while adding baseUrl to context: ", module); > } > } > } > > Modified: ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/security/src/org/ofbiz/security/SecurityFactory.java > URL: http://svn.apache.org/viewvc/ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/security/src/org/ofbiz/security/SecurityFactory.java?rev=1535432&r1=1535431&r2=1535432&view=diff > ============================================================================== > --- ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/security/src/org/ofbiz/security/SecurityFactory.java (original) > +++ ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/security/src/org/ofbiz/security/SecurityFactory.java Thu Oct 24 16:31:49 2013 > @@ -120,7 +120,7 @@ public final class SecurityFactory { > > @Override > public boolean hasEntityPermission(String entity, String action, GenericValue userLogin) { > - if (userLogin == null) return false; > + if (userLogin == null || entity == null || action == null) return false; > String permission = entity.concat(action); > String adminPermission = entity.concat("_ADMIN"); > Iterator<GenericValue> iterator = findUserLoginSecurityGroupByUserLoginId(userLogin.getString("userLoginId")); > > Modified: ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webapp/config/freemarkerTransforms.properties > URL: http://svn.apache.org/viewvc/ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webapp/config/freemarkerTransforms.properties?rev=1535432&r1=1535431&r2=1535432&view=diff > ============================================================================== > --- ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webapp/config/freemarkerTransforms.properties (original) > +++ ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webapp/config/freemarkerTransforms.properties Thu Oct 24 16:31:49 2013 > @@ -21,7 +21,8 @@ > > # entries are in the form: key=transform name, property=transform class name > > -ofbizUrl=org.ofbiz.webapp.ftl.OfbizUrlTransform > +#ofbizUrl=org.ofbiz.webapp.ftl.OfbizUrlTransform > +ofbizUrl=org.ofbiz.product.category.ftl.UrlRegexpTransform > ofbizContentUrl=org.ofbiz.webapp.ftl.OfbizContentTransform > ofbizCurrency=org.ofbiz.webapp.ftl.OfbizCurrencyTransform > ofbizAmount=org.ofbiz.webapp.ftl.OfbizAmountTransform > > Modified: ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webapp/src/org/ofbiz/webapp/OfbizUrlBuilder.java > URL: http://svn.apache.org/viewvc/ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webapp/src/org/ofbiz/webapp/OfbizUrlBuilder.java?rev=1535432&r1=1535431&r2=1535432&view=diff > ============================================================================== > --- ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webapp/src/org/ofbiz/webapp/OfbizUrlBuilder.java (original) > +++ ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webapp/src/org/ofbiz/webapp/OfbizUrlBuilder.java Thu Oct 24 16:31:49 2013 > @@ -166,9 +166,6 @@ public final class OfbizUrlBuilder { > buffer.append(":").append(webSiteProps.getHttpPort()); > } > } > - if (Debug.warningOn() && requestMap == null) { > - Debug.logWarning("The request-map URI '" + requestMapUri + "' was not found in controller.xml", module); > - } > return makeSecure; > } > > > Modified: ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webapp/src/org/ofbiz/webapp/WebAppUtil.java > URL: http://svn.apache.org/viewvc/ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webapp/src/org/ofbiz/webapp/WebAppUtil.java?rev=1535432&r1=1535431&r2=1535432&view=diff > ============================================================================== > --- ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webapp/src/org/ofbiz/webapp/WebAppUtil.java (original) > +++ ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webapp/src/org/ofbiz/webapp/WebAppUtil.java Thu Oct 24 16:31:49 2013 > @@ -29,6 +29,7 @@ import org.apache.catalina.deploy.WebXml > import org.apache.catalina.startup.DigesterFactory; > import org.apache.catalina.startup.WebRuleSet; > import org.apache.tomcat.util.digester.Digester; > +import org.ofbiz.base.component.ComponentConfig; > import org.ofbiz.base.component.ComponentConfig.WebappInfo; > import org.ofbiz.base.util.Assert; > import org.ofbiz.base.util.Debug; > @@ -86,6 +87,24 @@ public final class WebAppUtil { > } > > /** > + * Returns the <code>WebappInfo</code> instance associated to the specified web site ID. > + * Throws <code>IllegalArgumentException</code> if the web site ID was not found. > + * > + * @param webSiteId > + * @throws IOException > + * @throws SAXException > + */ > + public static WebappInfo getWebappInfoFromWebsiteId(String webSiteId) throws IOException, SAXException { > + Assert.notNull("webSiteId", webSiteId); > + for (WebappInfo webAppInfo : ComponentConfig.getAllWebappResourceInfos()) { > + if (webSiteId.equals(WebAppUtil.getWebSiteId(webAppInfo))) { > + return webAppInfo; > + } > + } > + throw new IllegalArgumentException("Web site ID '" + webSiteId + "' not found."); > + } > + > + /** > * Returns the web site ID - as configured in the web application's <code>web.xml</code> file, > * or <code>null</code> if no web site ID was found. > * > > Modified: ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webapp/src/org/ofbiz/webapp/control/RequestHandler.java > URL: http://svn.apache.org/viewvc/ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webapp/src/org/ofbiz/webapp/control/RequestHandler.java?rev=1535432&r1=1535431&r2=1535432&view=diff > ============================================================================== > --- ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webapp/src/org/ofbiz/webapp/control/RequestHandler.java (original) > +++ ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webapp/src/org/ofbiz/webapp/control/RequestHandler.java Thu Oct 24 16:31:49 2013 > @@ -20,7 +20,6 @@ package org.ofbiz.webapp.control; > > import static org.ofbiz.base.util.UtilGenerics.checkMap; > > -import java.io.IOException; > import java.io.Serializable; > import java.io.UnsupportedEncodingException; > import java.net.URL; > @@ -50,7 +49,6 @@ import org.ofbiz.base.util.UtilValidate; > import org.ofbiz.entity.Delegator; > import org.ofbiz.entity.GenericEntityException; > import org.ofbiz.entity.GenericValue; > -import org.ofbiz.webapp.OfbizUrlBuilder; > import org.ofbiz.webapp.event.EventFactory; > import org.ofbiz.webapp.event.EventHandler; > import org.ofbiz.webapp.event.EventHandlerException; > @@ -870,10 +868,11 @@ public class RequestHandler { > // attempt to override the default view with a call back into the control servlet, > // so just get the target view name and use that > String servletName = req.getServletPath(); > - if (UtilValidate.isNotEmpty(servletName) && servletName.length() > 1) { > + if (UtilValidate.isNotEmpty(servletName) && servletName.length() > 1 > + || servletName.startsWith("/")) { > servletName = servletName.substring(1); > } > - > + > if (Debug.infoOn()) Debug.logInfo("Rendering View [" + view + "], sessionId=" + UtilHttp.getSessionId(req), module); > if (view.startsWith(servletName + "/")) { > view = view.substring(servletName.length() + 1); > @@ -1011,6 +1010,15 @@ public class RequestHandler { > } > } > > + /** > + * Returns a URL String that contains only the scheme and host parts. This method > + * should not be used because it ignores settings in the WebSite entity. > + * > + * @param request > + * @param secure > + * @deprecated Use OfbizUrlBuilder > + */ > + @Deprecated > public static String getDefaultServerRootUrl(HttpServletRequest request, boolean secure) { > String httpsPort = UtilProperties.getPropertyValue("url.properties", "port.https", "443"); > String httpsServer = UtilProperties.getPropertyValue("url.properties", "force.https.host"); > @@ -1117,40 +1125,55 @@ public class RequestHandler { > } > > public String makeLink(HttpServletRequest request, HttpServletResponse response, String url, boolean fullPath, boolean secure, boolean encode) { > - OfbizUrlBuilder builder = (OfbizUrlBuilder) request.getAttribute("_OFBIZ_URL_BUILDER_"); > - if (builder == null) { > + WebSiteProperties webSiteProps = (WebSiteProperties) request.getAttribute("_WEBSITE_PROPS_"); > + if (webSiteProps == null) { > try { > - builder = OfbizUrlBuilder.from(request); > - request.setAttribute("_OFBIZ_URL_BUILDER_", builder); > + webSiteProps = WebSiteProperties.from(request); > + request.setAttribute("_WEBSITE_PROPS_", webSiteProps); > } catch (GenericEntityException e) { > // If the entity engine is throwing exceptions, then there is no point in continuing. > Debug.logError(e, "Exception thrown while getting web site properties: ", module); > return null; > + } > + } > + String requestUri = RequestHandler.getRequestUri(url); > + ConfigXMLReader.RequestMap requestMap = null; > + if (requestUri != null) { > + try { > + requestMap = getControllerConfig().getRequestMapMap().get(requestUri); > } catch (WebAppConfigurationException e) { > // If we can't read the controller.xml file, then there is no point in continuing. > Debug.logError(e, "Exception thrown while parsing controller.xml file: ", module); > return null; > } > } > + StringBuilder newURL = new StringBuilder(); > boolean didFullSecure = false; > boolean didFullStandard = false; > - StringBuilder newURL = new StringBuilder(250); > - if (fullPath) { > - try { > - boolean usesHttps = builder.buildHostPart(newURL, url, secure); > - if (usesHttps) { > - didFullSecure = true; > - } else { > - didFullStandard = true; > + if (requestMap != null && (webSiteProps.getEnableHttps() || fullPath || secure)) { > + if (Debug.verboseOn()) Debug.logVerbose("In makeLink requestUri=" + requestUri, module); > + if (secure || (webSiteProps.getEnableHttps() && requestMap.securityHttps && !request.isSecure())) { > + String server = webSiteProps.getHttpsHost(); > + if (server.isEmpty()) { > + server = request.getServerName(); > + } > + newURL.append("https://"); > + newURL.append(server); > + if (!webSiteProps.getHttpsPort().isEmpty()) { > + newURL.append(":").append(webSiteProps.getHttpsPort()); > + } > + didFullSecure = true; > + } else if (fullPath || (webSiteProps.getEnableHttps() && !requestMap.securityHttps && request.isSecure())) { > + String server = webSiteProps.getHttpHost(); > + if (server.isEmpty()) { > + server = request.getServerName(); > + } > + newURL.append("http://"); > + newURL.append(server); > + if (!webSiteProps.getHttpPort().isEmpty()) { > + newURL.append(":").append(webSiteProps.getHttpPort()); > } > - } catch (WebAppConfigurationException e) { > - // If we can't read the controller.xml file, then there is no point in continuing. > - Debug.logError(e, "Exception thrown while parsing controller.xml file: ", module); > - return null; > - } catch (IOException e) { > - // If we can't write to the buffer, then there is no point in continuing. > - Debug.logError(e, "Exception thrown while appending to StringBuilder: ", module); > - return null; > + didFullStandard = true; > } > } > // create the path to the control servlet > > Modified: ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webapp/src/org/ofbiz/webapp/ftl/OfbizUrlTransform.java > URL: http://svn.apache.org/viewvc/ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webapp/src/org/ofbiz/webapp/ftl/OfbizUrlTransform.java?rev=1535432&r1=1535431&r2=1535432&view=diff > ============================================================================== > --- ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webapp/src/org/ofbiz/webapp/ftl/OfbizUrlTransform.java (original) > +++ ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webapp/src/org/ofbiz/webapp/ftl/OfbizUrlTransform.java Thu Oct 24 16:31:49 2013 > @@ -18,253 +18,153 @@ > *******************************************************************************/ > package org.ofbiz.webapp.ftl; > > -import java.io.File; > -import java.io.FileInputStream; > import java.io.IOException; > -import java.io.InputStream; > import java.io.Writer; > +import java.net.URLEncoder; > import java.util.Map; > > import javax.servlet.ServletContext; > import javax.servlet.http.HttpServletRequest; > import javax.servlet.http.HttpServletResponse; > -import javax.xml.parsers.ParserConfigurationException; > > import org.ofbiz.base.component.ComponentConfig; > import org.ofbiz.base.component.ComponentConfig.WebappInfo; > import org.ofbiz.base.util.Debug; > -import org.ofbiz.base.util.UtilMisc; > -import org.ofbiz.base.util.UtilProperties; > -import org.ofbiz.base.util.UtilValidate; > -import org.ofbiz.base.util.UtilXml; > +import org.ofbiz.base.util.template.FreeMarkerWorker; > import org.ofbiz.entity.Delegator; > -import org.ofbiz.entity.GenericEntityException; > -import org.ofbiz.entity.GenericValue; > +import org.ofbiz.webapp.OfbizUrlBuilder; > +import org.ofbiz.webapp.WebAppUtil; > import org.ofbiz.webapp.control.RequestHandler; > -import org.w3c.dom.Document; > -import org.w3c.dom.Element; > -import org.w3c.dom.Node; > -import org.w3c.dom.NodeList; > -import org.xml.sax.SAXException; > > import freemarker.core.Environment; > -import freemarker.ext.beans.BeanModel; > import freemarker.template.SimpleScalar; > import freemarker.template.TemplateModelException; > import freemarker.template.TemplateScalarModel; > import freemarker.template.TemplateTransformModel; > > /** > - * OfbizUrlTransform - Freemarker Transform for URLs (links) > + * Freemarker Transform for creating OFBiz URLs (links). > + * <p>This transform accepts several arguments:<br> > + * <ul> > + * <li><b>fullPath</b> (true/false) - generate a full URL including scheme and host, defaults to false.</li> > + * <li><b>secure</b> (true/false) - generate a secure (https) URL, defaults to false. Server settings will > + * override this argument.</li> > + * <li><b>encode</b> (true/false) - encode the URL, defaults to true. Encoding is UTF-8.</li> > + * <li><b>webSiteId</b> - generate a full URL using the web site settings found in the WebSite entity.</li> > + * </ul></p> > + * <p>In addition, this transform accepts an environment variable - <b>urlPrefix</b>. If the variable > + * exists, it is prepended to the contents of the transform (the part between > + * <code><@ofbizUrl></code> and <code></@ofbizUrl></code>), and all transform arguments are > + * ignored.</p> > + * > */ > public class OfbizUrlTransform implements TemplateTransformModel { > > public final static String module = OfbizUrlTransform.class.getName(); > > - @SuppressWarnings("unchecked") > - public boolean checkArg(Map args, String key, boolean defaultValue) { > - if (!args.containsKey(key)) { > - return defaultValue; > - } else { > - Object o = args.get(key); > - if (o instanceof SimpleScalar) { > - SimpleScalar s = (SimpleScalar) o; > - return "true".equalsIgnoreCase(s.getAsString()); > + @SuppressWarnings("rawtypes") > + private static boolean checkBooleanArg(Map args, String key, boolean defaultValue) { > + Object o = args.get(key); > + if (o instanceof SimpleScalar) { > + SimpleScalar s = (SimpleScalar) o; > + return "true".equalsIgnoreCase(s.getAsString()); > + } > + return defaultValue; > + } > + > + private static String convertToString(Object o) { > + String result = ""; > + if (o != null) { > + if (Debug.verboseOn()) > + Debug.logVerbose("Arg Object : " + o.getClass().getName(), module); > + if (o instanceof TemplateScalarModel) { > + TemplateScalarModel s = (TemplateScalarModel) o; > + try { > + result = s.getAsString(); > + } catch (TemplateModelException e) { > + Debug.logError(e, "Template Exception", module); > + } > + } else { > + result = o.toString(); > } > - return defaultValue; > } > + return result; > } > > - @SuppressWarnings("unchecked") > + @Override > + @SuppressWarnings("rawtypes") > public Writer getWriter(final Writer out, Map args) { > final StringBuilder buf = new StringBuilder(); > - final boolean fullPath = checkArg(args, "fullPath", false); > - final boolean secure = checkArg(args, "secure", false); > - final boolean encode = checkArg(args, "encode", true); > - final String webSiteId = getArg(args, "webSiteId"); > + final boolean fullPath = checkBooleanArg(args, "fullPath", false); > + final boolean secure = checkBooleanArg(args, "secure", false); > + final boolean encode = checkBooleanArg(args, "encode", true); > + final String webSiteId = convertToString(args.get("webSiteId")); > > return new Writer(out) { > - @Override > - public void write(char cbuf[], int off, int len) { > - buf.append(cbuf, off, len); > - } > - > - @Override > - public void flush() throws IOException { > - out.flush(); > - } > > @Override > public void close() throws IOException { > try { > Environment env = Environment.getCurrentEnvironment(); > - BeanModel req = (BeanModel) env.getVariable("request"); > - BeanModel res = (BeanModel) env.getVariable("response"); > - Object prefix = env.getVariable("urlPrefix"); > - if (UtilValidate.isNotEmpty(webSiteId)) { > - HttpServletRequest request = (HttpServletRequest) req.getWrappedObject(); > - Delegator delegator = (Delegator) request.getAttribute("delegator"); > - String httpsPort = null; > - String httpsServer = null; > - String httpPort = null; > - String httpServer = null; > - Boolean enableHttps = null; > - StringBuilder newURL = new StringBuilder(); > - // make prefix url > - try { > - GenericValue webSite = delegator.findOne("WebSite", UtilMisc.toMap("webSiteId", webSiteId), true); > - if (webSite != null) { > - httpsPort = webSite.getString("httpsPort"); > - httpsServer = webSite.getString("httpsHost"); > - httpPort = webSite.getString("httpPort"); > - httpServer = webSite.getString("httpHost"); > - enableHttps = webSite.getBoolean("enableHttps"); > - } > - } catch (GenericEntityException e) { > - Debug.logWarning(e, "Problems with WebSite entity; using global defaults", module); > - } > - // fill in any missing properties with fields from the global file > - if (UtilValidate.isEmpty(httpsPort)) { > - httpsPort = UtilProperties.getPropertyValue("url.properties", "port.https", "443"); > - } > - if (UtilValidate.isEmpty(httpsServer)) { > - httpsServer = UtilProperties.getPropertyValue("url.properties", "force.https.host"); > + // Handle prefix. > + String prefixString = convertToString(env.getVariable("urlPrefix")); > + if (!prefixString.isEmpty()) { > + String bufString = buf.toString(); > + boolean prefixSlash = prefixString.endsWith("/"); > + boolean bufSlash = bufString.startsWith("/"); > + if (prefixSlash && bufSlash) { > + bufString = bufString.substring(1); > + } else if (!prefixSlash && !bufSlash) { > + bufString = "/" + bufString; > } > - if (UtilValidate.isEmpty(httpPort)) { > - httpPort = UtilProperties.getPropertyValue("url.properties", "port.http", "80"); > - } > - if (UtilValidate.isEmpty(httpServer)) { > - httpServer = UtilProperties.getPropertyValue("url.properties", "force.http.host"); > - } > - if (enableHttps == null) { > - enableHttps = UtilProperties.propertyValueEqualsIgnoreCase("url.properties", "port.https.enabled", "Y"); > - } > - if (secure && enableHttps) { > - String server = httpsServer; > - if (UtilValidate.isEmpty(server)) { > - server = request.getServerName(); > - } > - newURL.append("https://"); > - newURL.append(httpsServer); > - newURL.append(":").append(httpsPort); > - } else { > - newURL.append("http://"); > - newURL.append(httpServer); > - if (!"80".equals(httpPort)) { > - newURL.append(":").append(httpPort); > - } > - } > - // make mount point > - String mountPoint = null; > - for (WebappInfo webAppInfo : ComponentConfig.getAllWebappResourceInfos()) { > - File file = new File(webAppInfo.getLocation() + "/WEB-INF/web.xml"); > - if (!file.exists()) { > - continue; > - } > - InputStream is = new FileInputStream(file); > - try { > - Document doc = UtilXml.readXmlDocument(is, true, null); > - NodeList nList = doc.getElementsByTagName("context-param"); > - for (int temp = 0; temp < nList.getLength(); temp++) { > - Node nNode = nList.item(temp); > - if (nNode.getNodeType() == Node.ELEMENT_NODE) { > - Element eElement = (Element) nNode; > - String paramName = getTagValue("param-name",eElement); > - String paramValue = getTagValue("param-value",eElement); > - if ("webSiteId".equals(paramName) && webSiteId.equals(paramValue)) { > - mountPoint = webAppInfo.getContextRoot(); > - break; > - } > - } > - } > - } catch (SAXException e) { > - Debug.logWarning(e, e.getMessage(), module); > - } catch (ParserConfigurationException e) { > - Debug.logWarning(e, e.getMessage(), module); > - } > - if (UtilValidate.isNotEmpty(mountPoint)) { > - if (mountPoint.length() > 1) newURL.append(mountPoint); > - break; > - } > - } > - // make the path the the control servlet > - String controlPath = (String) request.getAttribute("_CONTROL_PATH_"); > - String[] patch = controlPath.split("/"); > - String patchStr = null; > - if (patch.length > 0) { > - patchStr = patch[patch.length-1]; > - } > - if (UtilValidate.isNotEmpty(patchStr)) { > - newURL.append("/"); > - newURL.append(patchStr); > + out.write(prefixString + bufString); > + return; > + } > + HttpServletRequest request = FreeMarkerWorker.unwrap(env.getVariable("request")); > + // Handle web site ID. > + if (!webSiteId.isEmpty()) { > + Delegator delegator = FreeMarkerWorker.unwrap(env.getVariable("delegator")); > + if (request != null && delegator == null) { > + delegator = (Delegator) request.getAttribute("delegator"); > + } > + if (delegator == null) { > + throw new IllegalStateException("Delegator not found"); > + } > + WebappInfo webAppInfo = WebAppUtil.getWebappInfoFromWebsiteId(webSiteId); > + StringBuilder newUrlBuff = new StringBuilder(250); > + OfbizUrlBuilder builder = OfbizUrlBuilder.from(webAppInfo, delegator); > + builder.buildFullUrl(newUrlBuff, buf.toString(), secure); > + String newUrl = newUrlBuff.toString(); > + if (encode) { > + newUrl = URLEncoder.encode(newUrl, "UTF-8"); > } > - newURL.append("/"); > - // make requestUrl > - String requestUrl = buf.toString(); > - newURL.append(requestUrl); > - out.write(newURL.toString()); > - } else if (req != null) { > - HttpServletRequest request = (HttpServletRequest) req.getWrappedObject(); > + out.write(newUrl); > + return; > + } > + if (request != null) { > ServletContext ctx = (ServletContext) request.getAttribute("servletContext"); > - HttpServletResponse response = null; > - if (res != null) { > - response = (HttpServletResponse) res.getWrappedObject(); > - } > - > + HttpServletResponse response = FreeMarkerWorker.unwrap(env.getVariable("response")); > String requestUrl = buf.toString(); > - > - // make the link > RequestHandler rh = (RequestHandler) ctx.getAttribute("_REQUEST_HANDLER_"); > out.write(rh.makeLink(request, response, requestUrl, fullPath, secure, encode)); > - } else if (prefix != null) { > - if (prefix instanceof TemplateScalarModel) { > - TemplateScalarModel s = (TemplateScalarModel) prefix; > - String prefixString = s.getAsString(); > - String bufString = buf.toString(); > - boolean prefixSlash = prefixString.endsWith("/"); > - boolean bufSlash = bufString.startsWith("/"); > - if (prefixSlash && bufSlash) { > - bufString = bufString.substring(1); > - } else if (!prefixSlash && !bufSlash) { > - bufString = "/" + bufString; > - } > - out.write(prefixString + bufString); > - } > } else { > out.write(buf.toString()); > } > - } catch (TemplateModelException e) { > - throw new IOException(e.getMessage()); > + } catch (Exception e) { > + Debug.logWarning(e, "Exception thrown while running ofbizUrl transform", module); > + throw new IOException(e); > } > } > - }; > - } > - private static String getArg(Map args, String key) { > - String result = ""; > - Object o = args.get(key); > - if (o != null) { > - if (Debug.verboseOn()) Debug.logVerbose("Arg Object : " + o.getClass().getName(), module); > - if (o instanceof TemplateScalarModel) { > - TemplateScalarModel s = (TemplateScalarModel) o; > - try { > - result = s.getAsString(); > - } catch (TemplateModelException e) { > - Debug.logError(e, "Template Exception", module); > - } > - } else { > - result = o.toString(); > + > + @Override > + public void flush() throws IOException { > + out.flush(); > } > - } > - return result; > - } > - private static String getTagValue(String sTag, Element eElement){ > - String value = ""; > - try{ > - NodeList nlList= eElement.getElementsByTagName(sTag).item(0).getChildNodes(); > - Node nValue = nlList.item(0); > - return value = nValue.getNodeValue(); > - } catch (Exception e) { > - return value; > - } > + > + @Override > + public void write(char cbuf[], int off, int len) { > + buf.append(cbuf, off, len); > + } > + }; > } > } > > |
|
Administrator
|
No pb Adrian, was not a big deal ;)
Thanks to care Jacques Adrian Crum wrote: > I apologize for stepping on your work - it wasn't intentional. I still > have more commits around the URL generation stuff. > > Adrian Crum > Sandglass Software > www.sandglass-software.com > > On 10/24/2013 9:31 AM, [hidden email] wrote: >> Author: jleroux >> Date: Thu Oct 24 16:31:49 2013 >> New Revision: 1535432 >> >> URL: http://svn.apache.org/r1535432 >> Log: >> Merge trunk head after Adrian's revert, resolving a conflict in RequestHandler.java >> >> Modified: >> ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/ (props changed) >> >> >> >> >> >> >> >> >> ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/base/src/org/ofbiz/base/util/template/FreeMarkerWorker.java >> ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/common/src/org/ofbiz/common/email/NotificationServices.java >> ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/security/src/org/ofbiz/security/SecurityFactory.java >> ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webapp/config/freemarkerTransforms.properties >> ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webapp/src/org/ofbiz/webapp/OfbizUrlBuilder.java >> ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webapp/src/org/ofbiz/webapp/WebAppUtil.java >> ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webapp/src/org/ofbiz/webapp/control/RequestHandler.java >> ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webapp/src/org/ofbiz/webapp/ftl/OfbizUrlTransform.java >> >> Propchange: ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/ >> ------------------------------------------------------------------------------ >> Merged /ofbiz/trunk:r1535158-1535430 >> >> Modified: >> ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/base/src/org/ofbiz/base/util/template/FreeMarkerWorker.java >> URL: >> http://svn.apache.org/viewvc/ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/base/src/org/ofbiz/base/util/template/FreeMarkerWorker.java?rev=1535432&r1=1535431&r2=1535432&view=diff >> ============================================================================== --- >> ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/base/src/org/ofbiz/base/util/template/FreeMarkerWorker.java >> (original) +++ >> >> >> ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/base/src/org/ofbiz/base/util/template/FreeMarkerWorker.java >> Thu Oct 24 16:31:49 2013 @@ -450,7 +450,8 @@ public class FreeMarkerWorker { return returnObj; } >> >> - public static Object unwrap(Object o) { >> + @SuppressWarnings("unchecked") >> + public static <T> T unwrap(Object o) { >> Object returnObj = null; >> >> if (o == TemplateModel.NOTHING) { >> @@ -461,7 +462,7 @@ public class FreeMarkerWorker { >> returnObj = ((BeanModel) o).getWrappedObject(); >> } >> >> - return returnObj; >> + return (T) returnObj; >> } >> >> public static void checkForLoop(String path, Map<String, Object> ctx) throws IOException { >> >> Modified: >> ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/common/src/org/ofbiz/common/email/NotificationServices.java >> URL: >> http://svn.apache.org/viewvc/ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/common/src/org/ofbiz/common/email/NotificationServices.java?rev=1535432&r1=1535431&r2=1535432&view=diff >> ============================================================================== --- >> ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/common/src/org/ofbiz/common/email/NotificationServices.java >> (original) +++ >> ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/common/src/org/ofbiz/common/email/NotificationServices.java >> Thu Oct 24 16:31:49 2013 @@ -21,29 +21,26 @@ package org.ofbiz.common.email; import java.io.IOException; import >> java.io.StringWriter; import java.io.Writer; >> -import java.net.InetAddress; >> import java.net.URL; >> -import java.net.UnknownHostException; >> import java.util.Locale; >> import java.util.Map; >> >> import javolution.util.FastMap; >> >> +import org.ofbiz.base.component.ComponentConfig.WebappInfo; >> import org.ofbiz.base.util.Debug; >> import org.ofbiz.base.util.UtilGenerics; >> -import org.ofbiz.base.util.UtilMisc; >> import org.ofbiz.base.util.UtilProperties; >> import org.ofbiz.base.util.UtilURL; >> -import org.ofbiz.base.util.UtilValidate; >> import org.ofbiz.base.util.template.FreeMarkerWorker; >> import org.ofbiz.entity.Delegator; >> -import org.ofbiz.entity.GenericEntityException; >> -import org.ofbiz.entity.GenericValue; >> import org.ofbiz.service.DispatchContext; >> import org.ofbiz.service.GenericServiceException; >> import org.ofbiz.service.LocalDispatcher; >> import org.ofbiz.service.ModelService; >> import org.ofbiz.service.ServiceUtil; >> +import org.ofbiz.webapp.OfbizUrlBuilder; >> +import org.ofbiz.webapp.WebAppUtil; >> >> import freemarker.template.TemplateException; >> >> @@ -255,84 +252,17 @@ public class NotificationServices { >> public static void setBaseUrl(Delegator delegator, String webSiteId, Map<String, Object> context) { >> // If the baseUrl was not specified we can do a best effort instead >> if (!context.containsKey("baseUrl")) { >> - StringBuilder httpBase = null; >> - StringBuilder httpsBase = null; >> - >> - String localServer = null; >> - >> - String httpsPort = null; >> - String httpsServer = null; >> - String httpPort = null; >> - String httpServer = null; >> - Boolean enableHttps = null; >> - >> try { >> - // using just the IP address of localhost if we don't have a defined server >> - InetAddress localHost = InetAddress.getLocalHost(); >> - localServer = localHost.getHostAddress(); >> - } catch (UnknownHostException hostException) { >> - Debug.logWarning(hostException, "Could not determine localhost, using '127.0.0.1'", module); >> - localServer = "127.0.0.1"; >> - } >> - >> - // load the properties from the website entity >> - GenericValue webSite = null; >> - if (webSiteId != null) { >> - try { >> - webSite = delegator.findOne("WebSite", UtilMisc.toMap("webSiteId", webSiteId), true); >> - if (webSite != null) { >> - httpsPort = webSite.getString("httpsPort"); >> - httpsServer = webSite.getString("httpsHost"); >> - httpPort = webSite.getString("httpPort"); >> - httpServer = webSite.getString("httpHost"); >> - enableHttps = webSite.getBoolean("enableHttps"); >> - } >> - } catch (GenericEntityException e) { >> - Debug.logWarning(e, "Problems with WebSite entity; using global defaults", module); >> - } >> - } >> - >> - // fill in any missing properties with fields from the global file >> - if (UtilValidate.isEmpty(httpsPort)) { >> - httpsPort = UtilProperties.getPropertyValue("url.properties", "port.https", "443"); >> - } >> - if (UtilValidate.isEmpty(httpsServer)) { >> - httpsServer = UtilProperties.getPropertyValue("url.properties", "force.https.host", localServer); >> - } >> - if (UtilValidate.isEmpty(httpPort)) { >> - httpPort = UtilProperties.getPropertyValue("url.properties", "port.http", "80"); >> - } >> - if (UtilValidate.isEmpty(httpServer)) { >> - httpServer = UtilProperties.getPropertyValue("url.properties", "force.http.host", localServer); >> - } >> - if (UtilValidate.isEmpty(enableHttps)) { >> - enableHttps = (UtilProperties.propertyValueEqualsIgnoreCase("url.properties", "port.https.enabled", "Y")) ? >> Boolean.TRUE : Boolean.FALSE; >> - } >> - >> - // prepare the (non-secure) URL >> - httpBase = new StringBuilder("http://"); >> - httpBase.append(httpServer); >> - if (!"80".equals(httpPort)) { >> - httpBase.append(":"); >> - httpBase.append(httpPort); >> - } >> - >> - // set the base (non-secure) URL for any messages requiring it >> - context.put("baseUrl", httpBase.toString()); >> - >> - if (enableHttps.booleanValue()) { >> - // prepare the (secure) URL >> - httpsBase = new StringBuilder("https://"); >> - httpsBase.append(httpsServer); >> - if (!"443".equals(httpsPort)) { >> - httpsBase.append(":"); >> - httpsBase.append(httpsPort); >> - } >> - >> - // set the base (secure) URL for any messages requiring it >> - context.put("baseSecureUrl", httpsBase.toString()); >> - } else { >> - context.put("baseSecureUrl", httpBase.toString()); >> + WebappInfo webAppInfo = WebAppUtil.getWebappInfoFromWebsiteId(webSiteId); >> + OfbizUrlBuilder builder = OfbizUrlBuilder.from(webAppInfo, delegator); >> + StringBuilder newURL = new StringBuilder(); >> + builder.buildHostPart(newURL, "", false); >> + context.put("baseUrl", newURL.toString()); >> + newURL = new StringBuilder(); >> + builder.buildHostPart(newURL, "", true); >> + context.put("baseSecureUrl", newURL.toString()); >> + } catch (Exception e) { >> + Debug.logWarning(e, "Exception thrown while adding baseUrl to context: ", module); >> } >> } >> } >> >> Modified: ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/security/src/org/ofbiz/security/SecurityFactory.java >> URL: >> http://svn.apache.org/viewvc/ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/security/src/org/ofbiz/security/SecurityFactory.java?rev=1535432&r1=1535431&r2=1535432&view=diff >> ============================================================================== --- >> ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/security/src/org/ofbiz/security/SecurityFactory.java >> (original) +++ >> ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/security/src/org/ofbiz/security/SecurityFactory.java Thu Oct >> 24 16:31:49 2013 @@ -120,7 +120,7 @@ public final class SecurityFactory { >> >> @Override >> public boolean hasEntityPermission(String entity, String action, GenericValue userLogin) { >> - if (userLogin == null) return false; >> + if (userLogin == null || entity == null || action == null) return false; >> String permission = entity.concat(action); >> String adminPermission = entity.concat("_ADMIN"); >> Iterator<GenericValue> iterator = findUserLoginSecurityGroupByUserLoginId(userLogin.getString("userLoginId")); >> >> Modified: ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webapp/config/freemarkerTransforms.properties >> URL: >> http://svn.apache.org/viewvc/ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webapp/config/freemarkerTransforms.properties?rev=1535432&r1=1535431&r2=1535432&view=diff >> ============================================================================== --- >> ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webapp/config/freemarkerTransforms.properties (original) +++ >> ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webapp/config/freemarkerTransforms.properties Thu Oct 24 >> 16:31:49 2013 @@ -21,7 +21,8 @@ >> >> # entries are in the form: key=transform name, property=transform class name >> >> -ofbizUrl=org.ofbiz.webapp.ftl.OfbizUrlTransform >> +#ofbizUrl=org.ofbiz.webapp.ftl.OfbizUrlTransform >> +ofbizUrl=org.ofbiz.product.category.ftl.UrlRegexpTransform >> ofbizContentUrl=org.ofbiz.webapp.ftl.OfbizContentTransform >> ofbizCurrency=org.ofbiz.webapp.ftl.OfbizCurrencyTransform >> ofbizAmount=org.ofbiz.webapp.ftl.OfbizAmountTransform >> >> Modified: ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webapp/src/org/ofbiz/webapp/OfbizUrlBuilder.java >> URL: >> http://svn.apache.org/viewvc/ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webapp/src/org/ofbiz/webapp/OfbizUrlBuilder.java?rev=1535432&r1=1535431&r2=1535432&view=diff >> ============================================================================== --- >> ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webapp/src/org/ofbiz/webapp/OfbizUrlBuilder.java (original) >> +++ ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webapp/src/org/ofbiz/webapp/OfbizUrlBuilder.java Thu Oct >> 24 16:31:49 2013 @@ -166,9 +166,6 @@ public final class OfbizUrlBuilder { >> buffer.append(":").append(webSiteProps.getHttpPort()); } >> } >> - if (Debug.warningOn() && requestMap == null) { >> - Debug.logWarning("The request-map URI '" + requestMapUri + "' was not found in controller.xml", module); >> - } >> return makeSecure; >> } >> >> >> Modified: ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webapp/src/org/ofbiz/webapp/WebAppUtil.java >> URL: >> http://svn.apache.org/viewvc/ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webapp/src/org/ofbiz/webapp/WebAppUtil.java?rev=1535432&r1=1535431&r2=1535432&view=diff >> ============================================================================== --- >> ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webapp/src/org/ofbiz/webapp/WebAppUtil.java (original) +++ >> ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webapp/src/org/ofbiz/webapp/WebAppUtil.java Thu Oct 24 >> 16:31:49 2013 @@ -29,6 +29,7 @@ import org.apache.catalina.deploy.WebXml import org.apache.catalina.startup.DigesterFactory; >> import org.apache.catalina.startup.WebRuleSet; >> import org.apache.tomcat.util.digester.Digester; >> +import org.ofbiz.base.component.ComponentConfig; >> import org.ofbiz.base.component.ComponentConfig.WebappInfo; >> import org.ofbiz.base.util.Assert; >> import org.ofbiz.base.util.Debug; >> @@ -86,6 +87,24 @@ public final class WebAppUtil { >> } >> >> /** >> + * Returns the <code>WebappInfo</code> instance associated to the specified web site ID. >> + * Throws <code>IllegalArgumentException</code> if the web site ID was not found. >> + * >> + * @param webSiteId >> + * @throws IOException >> + * @throws SAXException >> + */ >> + public static WebappInfo getWebappInfoFromWebsiteId(String webSiteId) throws IOException, SAXException { >> + Assert.notNull("webSiteId", webSiteId); >> + for (WebappInfo webAppInfo : ComponentConfig.getAllWebappResourceInfos()) { >> + if (webSiteId.equals(WebAppUtil.getWebSiteId(webAppInfo))) { >> + return webAppInfo; >> + } >> + } >> + throw new IllegalArgumentException("Web site ID '" + webSiteId + "' not found."); >> + } >> + >> + /** >> * Returns the web site ID - as configured in the web application's <code>web.xml</code> file, >> * or <code>null</code> if no web site ID was found. >> * >> >> Modified: >> ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webapp/src/org/ofbiz/webapp/control/RequestHandler.java >> URL: >> http://svn.apache.org/viewvc/ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webapp/src/org/ofbiz/webapp/control/RequestHandler.java?rev=1535432&r1=1535431&r2=1535432&view=diff >> ============================================================================== --- >> ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webapp/src/org/ofbiz/webapp/control/RequestHandler.java >> (original) +++ >> ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webapp/src/org/ofbiz/webapp/control/RequestHandler.java Thu >> Oct 24 16:31:49 2013 @@ -20,7 +20,6 @@ package org.ofbiz.webapp.control; >> >> import static org.ofbiz.base.util.UtilGenerics.checkMap; >> >> -import java.io.IOException; >> import java.io.Serializable; >> import java.io.UnsupportedEncodingException; >> import java.net.URL; >> @@ -50,7 +49,6 @@ import org.ofbiz.base.util.UtilValidate; >> import org.ofbiz.entity.Delegator; >> import org.ofbiz.entity.GenericEntityException; >> import org.ofbiz.entity.GenericValue; >> -import org.ofbiz.webapp.OfbizUrlBuilder; >> import org.ofbiz.webapp.event.EventFactory; >> import org.ofbiz.webapp.event.EventHandler; >> import org.ofbiz.webapp.event.EventHandlerException; >> @@ -870,10 +868,11 @@ public class RequestHandler { >> // attempt to override the default view with a call back into the control servlet, >> // so just get the target view name and use that >> String servletName = req.getServletPath(); >> - if (UtilValidate.isNotEmpty(servletName) && servletName.length() > 1) { >> + if (UtilValidate.isNotEmpty(servletName) && servletName.length() > 1 >> + || servletName.startsWith("/")) { >> servletName = servletName.substring(1); >> } >> - >> + >> if (Debug.infoOn()) Debug.logInfo("Rendering View [" + view + "], sessionId=" + UtilHttp.getSessionId(req), module); >> if (view.startsWith(servletName + "/")) { >> view = view.substring(servletName.length() + 1); >> @@ -1011,6 +1010,15 @@ public class RequestHandler { >> } >> } >> >> + /** >> + * Returns a URL String that contains only the scheme and host parts. This method >> + * should not be used because it ignores settings in the WebSite entity. >> + * >> + * @param request >> + * @param secure >> + * @deprecated Use OfbizUrlBuilder >> + */ >> + @Deprecated >> public static String getDefaultServerRootUrl(HttpServletRequest request, boolean secure) { >> String httpsPort = UtilProperties.getPropertyValue("url.properties", "port.https", "443"); >> String httpsServer = UtilProperties.getPropertyValue("url.properties", "force.https.host"); >> @@ -1117,40 +1125,55 @@ public class RequestHandler { >> } >> >> public String makeLink(HttpServletRequest request, HttpServletResponse response, String url, boolean fullPath, boolean >> secure, boolean encode) { >> - OfbizUrlBuilder builder = (OfbizUrlBuilder) request.getAttribute("_OFBIZ_URL_BUILDER_"); >> - if (builder == null) { >> + WebSiteProperties webSiteProps = (WebSiteProperties) request.getAttribute("_WEBSITE_PROPS_"); >> + if (webSiteProps == null) { >> try { >> - builder = OfbizUrlBuilder.from(request); >> - request.setAttribute("_OFBIZ_URL_BUILDER_", builder); >> + webSiteProps = WebSiteProperties.from(request); >> + request.setAttribute("_WEBSITE_PROPS_", webSiteProps); >> } catch (GenericEntityException e) { >> // If the entity engine is throwing exceptions, then there is no point in continuing. >> Debug.logError(e, "Exception thrown while getting web site properties: ", module); >> return null; >> + } >> + } >> + String requestUri = RequestHandler.getRequestUri(url); >> + ConfigXMLReader.RequestMap requestMap = null; >> + if (requestUri != null) { >> + try { >> + requestMap = getControllerConfig().getRequestMapMap().get(requestUri); >> } catch (WebAppConfigurationException e) { >> // If we can't read the controller.xml file, then there is no point in continuing. >> Debug.logError(e, "Exception thrown while parsing controller.xml file: ", module); >> return null; >> } >> } >> + StringBuilder newURL = new StringBuilder(); >> boolean didFullSecure = false; >> boolean didFullStandard = false; >> - StringBuilder newURL = new StringBuilder(250); >> - if (fullPath) { >> - try { >> - boolean usesHttps = builder.buildHostPart(newURL, url, secure); >> - if (usesHttps) { >> - didFullSecure = true; >> - } else { >> - didFullStandard = true; >> + if (requestMap != null && (webSiteProps.getEnableHttps() || fullPath || secure)) { >> + if (Debug.verboseOn()) Debug.logVerbose("In makeLink requestUri=" + requestUri, module); >> + if (secure || (webSiteProps.getEnableHttps() && requestMap.securityHttps && !request.isSecure())) { >> + String server = webSiteProps.getHttpsHost(); >> + if (server.isEmpty()) { >> + server = request.getServerName(); >> + } >> + newURL.append("https://"); >> + newURL.append(server); >> + if (!webSiteProps.getHttpsPort().isEmpty()) { >> + newURL.append(":").append(webSiteProps.getHttpsPort()); >> + } >> + didFullSecure = true; >> + } else if (fullPath || (webSiteProps.getEnableHttps() && !requestMap.securityHttps && request.isSecure())) { >> + String server = webSiteProps.getHttpHost(); >> + if (server.isEmpty()) { >> + server = request.getServerName(); >> + } >> + newURL.append("http://"); >> + newURL.append(server); >> + if (!webSiteProps.getHttpPort().isEmpty()) { >> + newURL.append(":").append(webSiteProps.getHttpPort()); >> } >> - } catch (WebAppConfigurationException e) { >> - // If we can't read the controller.xml file, then there is no point in continuing. >> - Debug.logError(e, "Exception thrown while parsing controller.xml file: ", module); >> - return null; >> - } catch (IOException e) { >> - // If we can't write to the buffer, then there is no point in continuing. >> - Debug.logError(e, "Exception thrown while appending to StringBuilder: ", module); >> - return null; >> + didFullStandard = true; >> } >> } >> // create the path to the control servlet >> >> Modified: >> ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webapp/src/org/ofbiz/webapp/ftl/OfbizUrlTransform.java >> URL: >> http://svn.apache.org/viewvc/ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webapp/src/org/ofbiz/webapp/ftl/OfbizUrlTransform.java?rev=1535432&r1=1535431&r2=1535432&view=diff >> ============================================================================== --- >> ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webapp/src/org/ofbiz/webapp/ftl/OfbizUrlTransform.java >> (original) +++ >> ofbiz/branches/OFBIZ-5312-ofbiz-ecommerce-seo-2013-10-23/framework/webapp/src/org/ofbiz/webapp/ftl/OfbizUrlTransform.java Thu >> Oct 24 16:31:49 2013 @@ -18,253 +18,153 @@ *******************************************************************************/ >> package org.ofbiz.webapp.ftl; >> >> -import java.io.File; >> -import java.io.FileInputStream; >> import java.io.IOException; >> -import java.io.InputStream; >> import java.io.Writer; >> +import java.net.URLEncoder; >> import java.util.Map; >> >> import javax.servlet.ServletContext; >> import javax.servlet.http.HttpServletRequest; >> import javax.servlet.http.HttpServletResponse; >> -import javax.xml.parsers.ParserConfigurationException; >> >> import org.ofbiz.base.component.ComponentConfig; >> import org.ofbiz.base.component.ComponentConfig.WebappInfo; >> import org.ofbiz.base.util.Debug; >> -import org.ofbiz.base.util.UtilMisc; >> -import org.ofbiz.base.util.UtilProperties; >> -import org.ofbiz.base.util.UtilValidate; >> -import org.ofbiz.base.util.UtilXml; >> +import org.ofbiz.base.util.template.FreeMarkerWorker; >> import org.ofbiz.entity.Delegator; >> -import org.ofbiz.entity.GenericEntityException; >> -import org.ofbiz.entity.GenericValue; >> +import org.ofbiz.webapp.OfbizUrlBuilder; >> +import org.ofbiz.webapp.WebAppUtil; >> import org.ofbiz.webapp.control.RequestHandler; >> -import org.w3c.dom.Document; >> -import org.w3c.dom.Element; >> -import org.w3c.dom.Node; >> -import org.w3c.dom.NodeList; >> -import org.xml.sax.SAXException; >> >> import freemarker.core.Environment; >> -import freemarker.ext.beans.BeanModel; >> import freemarker.template.SimpleScalar; >> import freemarker.template.TemplateModelException; >> import freemarker.template.TemplateScalarModel; >> import freemarker.template.TemplateTransformModel; >> >> /** >> - * OfbizUrlTransform - Freemarker Transform for URLs (links) >> + * Freemarker Transform for creating OFBiz URLs (links). >> + * <p>This transform accepts several arguments:<br> >> + * <ul> >> + * <li><b>fullPath</b> (true/false) - generate a full URL including scheme and host, defaults to false.</li> >> + * <li><b>secure</b> (true/false) - generate a secure (https) URL, defaults to false. Server settings will >> + * override this argument.</li> >> + * <li><b>encode</b> (true/false) - encode the URL, defaults to true. Encoding is UTF-8.</li> >> + * <li><b>webSiteId</b> - generate a full URL using the web site settings found in the WebSite entity.</li> >> + * </ul></p> >> + * <p>In addition, this transform accepts an environment variable - <b>urlPrefix</b>. If the variable >> + * exists, it is prepended to the contents of the transform (the part between >> + * <code><@ofbizUrl></code> and <code></@ofbizUrl></code>), and all transform arguments are >> + * ignored.</p> >> + * >> */ >> public class OfbizUrlTransform implements TemplateTransformModel { >> >> public final static String module = OfbizUrlTransform.class.getName(); >> >> - @SuppressWarnings("unchecked") >> - public boolean checkArg(Map args, String key, boolean defaultValue) { >> - if (!args.containsKey(key)) { >> - return defaultValue; >> - } else { >> - Object o = args.get(key); >> - if (o instanceof SimpleScalar) { >> - SimpleScalar s = (SimpleScalar) o; >> - return "true".equalsIgnoreCase(s.getAsString()); >> + @SuppressWarnings("rawtypes") >> + private static boolean checkBooleanArg(Map args, String key, boolean defaultValue) { >> + Object o = args.get(key); >> + if (o instanceof SimpleScalar) { >> + SimpleScalar s = (SimpleScalar) o; >> + return "true".equalsIgnoreCase(s.getAsString()); >> + } >> + return defaultValue; >> + } >> + >> + private static String convertToString(Object o) { >> + String result = ""; >> + if (o != null) { >> + if (Debug.verboseOn()) >> + Debug.logVerbose("Arg Object : " + o.getClass().getName(), module); >> + if (o instanceof TemplateScalarModel) { >> + TemplateScalarModel s = (TemplateScalarModel) o; >> + try { >> + result = s.getAsString(); >> + } catch (TemplateModelException e) { >> + Debug.logError(e, "Template Exception", module); >> + } >> + } else { >> + result = o.toString(); >> } >> - return defaultValue; >> } >> + return result; >> } >> >> - @SuppressWarnings("unchecked") >> + @Override >> + @SuppressWarnings("rawtypes") >> public Writer getWriter(final Writer out, Map args) { >> final StringBuilder buf = new StringBuilder(); >> - final boolean fullPath = checkArg(args, "fullPath", false); >> - final boolean secure = checkArg(args, "secure", false); >> - final boolean encode = checkArg(args, "encode", true); >> - final String webSiteId = getArg(args, "webSiteId"); >> + final boolean fullPath = checkBooleanArg(args, "fullPath", false); >> + final boolean secure = checkBooleanArg(args, "secure", false); >> + final boolean encode = checkBooleanArg(args, "encode", true); >> + final String webSiteId = convertToString(args.get("webSiteId")); >> >> return new Writer(out) { >> - @Override >> - public void write(char cbuf[], int off, int len) { >> - buf.append(cbuf, off, len); >> - } >> - >> - @Override >> - public void flush() throws IOException { >> - out.flush(); >> - } >> >> @Override >> public void close() throws IOException { >> try { >> Environment env = Environment.getCurrentEnvironment(); >> - BeanModel req = (BeanModel) env.getVariable("request"); >> - BeanModel res = (BeanModel) env.getVariable("response"); >> - Object prefix = env.getVariable("urlPrefix"); >> - if (UtilValidate.isNotEmpty(webSiteId)) { >> - HttpServletRequest request = (HttpServletRequest) req.getWrappedObject(); >> - Delegator delegator = (Delegator) request.getAttribute("delegator"); >> - String httpsPort = null; >> - String httpsServer = null; >> - String httpPort = null; >> - String httpServer = null; >> - Boolean enableHttps = null; >> - StringBuilder newURL = new StringBuilder(); >> - // make prefix url >> - try { >> - GenericValue webSite = delegator.findOne("WebSite", UtilMisc.toMap("webSiteId", webSiteId), true); >> - if (webSite != null) { >> - httpsPort = webSite.getString("httpsPort"); >> - httpsServer = webSite.getString("httpsHost"); >> - httpPort = webSite.getString("httpPort"); >> - httpServer = webSite.getString("httpHost"); >> - enableHttps = webSite.getBoolean("enableHttps"); >> - } >> - } catch (GenericEntityException e) { >> - Debug.logWarning(e, "Problems with WebSite entity; using global defaults", module); >> - } >> - // fill in any missing properties with fields from the global file >> - if (UtilValidate.isEmpty(httpsPort)) { >> - httpsPort = UtilProperties.getPropertyValue("url.properties", "port.https", "443"); >> - } >> - if (UtilValidate.isEmpty(httpsServer)) { >> - httpsServer = UtilProperties.getPropertyValue("url.properties", "force.https.host"); >> + // Handle prefix. >> + String prefixString = convertToString(env.getVariable("urlPrefix")); >> + if (!prefixString.isEmpty()) { >> + String bufString = buf.toString(); >> + boolean prefixSlash = prefixString.endsWith("/"); >> + boolean bufSlash = bufString.startsWith("/"); >> + if (prefixSlash && bufSlash) { >> + bufString = bufString.substring(1); >> + } else if (!prefixSlash && !bufSlash) { >> + bufString = "/" + bufString; >> } >> - if (UtilValidate.isEmpty(httpPort)) { >> - httpPort = UtilProperties.getPropertyValue("url.properties", "port.http", "80"); >> - } >> - if (UtilValidate.isEmpty(httpServer)) { >> - httpServer = UtilProperties.getPropertyValue("url.properties", "force.http.host"); >> - } >> - if (enableHttps == null) { >> - enableHttps = UtilProperties.propertyValueEqualsIgnoreCase("url.properties", "port.https.enabled", >> "Y"); >> - } >> - if (secure && enableHttps) { >> - String server = httpsServer; >> - if (UtilValidate.isEmpty(server)) { >> - server = request.getServerName(); >> - } >> - newURL.append("https://"); >> - newURL.append(httpsServer); >> - newURL.append(":").append(httpsPort); >> - } else { >> - newURL.append("http://"); >> - newURL.append(httpServer); >> - if (!"80".equals(httpPort)) { >> - newURL.append(":").append(httpPort); >> - } >> - } >> - // make mount point >> - String mountPoint = null; >> - for (WebappInfo webAppInfo : ComponentConfig.getAllWebappResourceInfos()) { >> - File file = new File(webAppInfo.getLocation() + "/WEB-INF/web.xml"); >> - if (!file.exists()) { >> - continue; >> - } >> - InputStream is = new FileInputStream(file); >> - try { >> - Document doc = UtilXml.readXmlDocument(is, true, null); >> - NodeList nList = doc.getElementsByTagName("context-param"); >> - for (int temp = 0; temp < nList.getLength(); temp++) { >> - Node nNode = nList.item(temp); >> - if (nNode.getNodeType() == Node.ELEMENT_NODE) { >> - Element eElement = (Element) nNode; >> - String paramName = getTagValue("param-name",eElement); >> - String paramValue = getTagValue("param-value",eElement); >> - if ("webSiteId".equals(paramName) && webSiteId.equals(paramValue)) { >> - mountPoint = webAppInfo.getContextRoot(); >> - break; >> - } >> - } >> - } >> - } catch (SAXException e) { >> - Debug.logWarning(e, e.getMessage(), module); >> - } catch (ParserConfigurationException e) { >> - Debug.logWarning(e, e.getMessage(), module); >> - } >> - if (UtilValidate.isNotEmpty(mountPoint)) { >> - if (mountPoint.length() > 1) newURL.append(mountPoint); >> - break; >> - } >> - } >> - // make the path the the control servlet >> - String controlPath = (String) request.getAttribute("_CONTROL_PATH_"); >> - String[] patch = controlPath.split("/"); >> - String patchStr = null; >> - if (patch.length > 0) { >> - patchStr = patch[patch.length-1]; >> - } >> - if (UtilValidate.isNotEmpty(patchStr)) { >> - newURL.append("/"); >> - newURL.append(patchStr); >> + out.write(prefixString + bufString); >> + return; >> + } >> + HttpServletRequest request = FreeMarkerWorker.unwrap(env.getVariable("request")); >> + // Handle web site ID. >> + if (!webSiteId.isEmpty()) { >> + Delegator delegator = FreeMarkerWorker.unwrap(env.getVariable("delegator")); >> + if (request != null && delegator == null) { >> + delegator = (Delegator) request.getAttribute("delegator"); >> + } >> + if (delegator == null) { >> + throw new IllegalStateException("Delegator not found"); >> + } >> + WebappInfo webAppInfo = WebAppUtil.getWebappInfoFromWebsiteId(webSiteId); >> + StringBuilder newUrlBuff = new StringBuilder(250); >> + OfbizUrlBuilder builder = OfbizUrlBuilder.from(webAppInfo, delegator); >> + builder.buildFullUrl(newUrlBuff, buf.toString(), secure); >> + String newUrl = newUrlBuff.toString(); >> + if (encode) { >> + newUrl = URLEncoder.encode(newUrl, "UTF-8"); >> } >> - newURL.append("/"); >> - // make requestUrl >> - String requestUrl = buf.toString(); >> - newURL.append(requestUrl); >> - out.write(newURL.toString()); >> - } else if (req != null) { >> - HttpServletRequest request = (HttpServletRequest) req.getWrappedObject(); >> + out.write(newUrl); >> + return; >> + } >> + if (request != null) { >> ServletContext ctx = (ServletContext) request.getAttribute("servletContext"); >> - HttpServletResponse response = null; >> - if (res != null) { >> - response = (HttpServletResponse) res.getWrappedObject(); >> - } >> - >> + HttpServletResponse response = FreeMarkerWorker.unwrap(env.getVariable("response")); >> String requestUrl = buf.toString(); >> - >> - // make the link >> RequestHandler rh = (RequestHandler) ctx.getAttribute("_REQUEST_HANDLER_"); >> out.write(rh.makeLink(request, response, requestUrl, fullPath, secure, encode)); >> - } else if (prefix != null) { >> - if (prefix instanceof TemplateScalarModel) { >> - TemplateScalarModel s = (TemplateScalarModel) prefix; >> - String prefixString = s.getAsString(); >> - String bufString = buf.toString(); >> - boolean prefixSlash = prefixString.endsWith("/"); >> - boolean bufSlash = bufString.startsWith("/"); >> - if (prefixSlash && bufSlash) { >> - bufString = bufString.substring(1); >> - } else if (!prefixSlash && !bufSlash) { >> - bufString = "/" + bufString; >> - } >> - out.write(prefixString + bufString); >> - } >> } else { >> out.write(buf.toString()); >> } >> - } catch (TemplateModelException e) { >> - throw new IOException(e.getMessage()); >> + } catch (Exception e) { >> + Debug.logWarning(e, "Exception thrown while running ofbizUrl transform", module); >> + throw new IOException(e); >> } >> } >> - }; >> - } >> - private static String getArg(Map args, String key) { >> - String result = ""; >> - Object o = args.get(key); >> - if (o != null) { >> - if (Debug.verboseOn()) Debug.logVerbose("Arg Object : " + o.getClass().getName(), module); >> - if (o instanceof TemplateScalarModel) { >> - TemplateScalarModel s = (TemplateScalarModel) o; >> - try { >> - result = s.getAsString(); >> - } catch (TemplateModelException e) { >> - Debug.logError(e, "Template Exception", module); >> - } >> - } else { >> - result = o.toString(); >> + >> + @Override >> + public void flush() throws IOException { >> + out.flush(); >> } >> - } >> - return result; >> - } >> - private static String getTagValue(String sTag, Element eElement){ >> - String value = ""; >> - try{ >> - NodeList nlList= eElement.getElementsByTagName(sTag).item(0).getChildNodes(); >> - Node nValue = nlList.item(0); >> - return value = nValue.getNodeValue(); >> - } catch (Exception e) { >> - return value; >> - } >> + >> + @Override >> + public void write(char cbuf[], int off, int len) { >> + buf.append(cbuf, off, len); >> + } >> + }; >> } >> } |
| Free forum by Nabble | Edit this page |
