Java tutorial
/* * Copyright (c) 2007 NTT DATA Corporation * * Licensed 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 jp.terasoluna.fw.web.struts.plugins; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.List; import java.util.StringTokenizer; import javax.servlet.ServletException; import jp.terasoluna.fw.service.thin.AbstractBLogicMapper; import jp.terasoluna.fw.service.thin.BLogicMapper; import jp.terasoluna.fw.service.thin.BLogicResources; import jp.terasoluna.fw.util.ClassLoadException; import jp.terasoluna.fw.util.ClassUtil; import org.apache.commons.digester.Digester; import org.apache.commons.digester.xmlrules.DigesterLoader; import org.apache.commons.digester.xmlrules.XmlLoadException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.action.ActionServlet; import org.apache.struts.action.PlugIn; import org.apache.struts.config.ModuleConfig; import org.xml.sax.SAXException; /** * rWlX?WbN?o????[hvOC?B * * <p>StrutsPlugIn@\gp?AT?[ubg? * rWlX?WbN?o???AT?[ubgReLXg * ?B<br> * @\gpstruts-config.xml??B * ?i digesterRules?AmapperClass??B?j * ?AresourcesJ}t@CA?B * </p> * <code><pre> * <plug-in * className="jp.terasoluna.fw.web.struts.plugins.BLogicIOPlugIn"> * <set-property * property="resources" * value="/WEB-INF/blogic-io.xml"/> * <set-property * property="digesterRules" * value="/WEB-INF/blogic-io-rules.xml"/> * <set-property * property="mapperClass" * value="jp.terasoluna.fw.service.thin.BLogicMapper"/> * </plug-in> * </pre></code> * <p>rWlX?WbN?o?fNXgNX?X???A * mapperClassvalue?AbstractBLogicMapperTuNX?A * BLogicMapperp?BLogicMappergNX??B</p> * * blogic-io.xmlANVrWlX?WbN * ?o???B<br> * Lblogic-io.xml??B * <code><pre> * <blogic-io> * <action path="/logon/logonAction"> * <blogic-param bean-name="jp.terasoluna.sample.blogic.LogonBean"> * <set-property property="userName" * blogic-property="userName" * source="form" /> * <set-property property="sessionId" * blogic-property="id" * source="session" /> * </blogic-param> * <blogic-result> * <set-property property="resultStr" * blogic-property="result" * dest="form" /> * <set-property property="USER_VALUE_OBJECT" * blogic-property="uvo" * dest="session" /> * </blogic-result> * </action> * ?E?E?E * </blogic-io> * </pre></code> * <p> * rWlX?WbNl?<blogic-param> * vf??Bbean-name?li[ * JavaBeanNXw?BJavaBean?A?q * blogic-property?wv?peB???B<br> * A?Al?rWlX?WbN???Abean-name?? * ?A?nullrWlX?WbN?s\?B<br> * l?f?[^ANVtH?[ZbVWebw * ???Af?[^ * <set-property>vfsource?w?B * ftHg?Aform,sessionsource?L?q * ?ANVtH?[ZbV?B<br> * f?[^v?peBproperty?w?B * ?A<br> * property="field1" source="form"????A * actionForm.get("field1")?s?A * property="field2" source="session"????A * session.getAttribute("field2")?s?B<br> * ?Ll?AO?qbean-name?w * JavaBeanCX^Xv?peBlrWlX?WbN?B * JavaBeanl???Ablogic-propertywl * v?peB?Bblogic-property?w???A * property?lJavaBeanv?peB?B * </p> * <p> * <code><pre> * <set-property property="field1" blogic-property="blogicField1" * source="form" /> * </pre></code> * ??ArWlX?WbNANVtH?[field1 * l???A * bean.getBlogicField1() * ?sANVtH?[l?B<br> * f?[^ZbVll?A * <code><pre> * <set-property property="field2" blogic-property="blogicField2" * source="session" /> * </pre></code> * ??ArWlX?WbNfield2L?[ZbVi[ * l???A * bean.getBlogicField2() * ?s?B * ?ArWlX?WbNf?[^ANVtH?[ * ?AZbVKv?B<br> * ??BLogicResourcesCX^X * ??AT?[ubgReLXg?B</p> * <br> * <p> * Jq?ADTDURL?X???A<br> * getPublicIdentifier()getDtdUrl()I?[o?[Ch?B * </p> * * @see jp.terasoluna.fw.web.struts.actions.BLogicAction * @see jp.terasoluna.fw.service.thin.BLogic * @see jp.terasoluna.fw.service.thin.BLogicResources * @see jp.terasoluna.fw.service.thin.BLogicResult * @see jp.terasoluna.fw.service.thin.AbstractBLogicMapper * @see jp.terasoluna.fw.service.thin.BLogicMapper * */ public class BLogicIOPlugIn implements PlugIn { /** * ?ONX?B */ private static Log log = LogFactory.getLog(BLogicIOPlugIn.class); /** * T?[ubgReLXgo^BLogicMapper * vtBbNXL?[?B */ public static final String BLOGIC_MAPPER_KEY = "BLOGIC_MAPPER"; /** * ftHgblogic-io-rules.xml pX?B */ private static final String DIGESTER_RULES_PATH = "/WEB-INF/blogic-io-rules.xml"; /** * DTDJq?B */ private String publicIdentifier = "-//NTTDATA//DTD TERASOLUNA for Spring blogic-io 1.0//JA"; /** * DTDpX?B */ private String dtdUrl = "/jp/terasoluna/fw/web/struts/plugins/dtd/blogic-io.dtd"; /** * vOC??T?[ubg?B */ private ActionServlet servlet = null; /** * rWlX?WbN?o??[`t@C * ?iblogic-io-rules.xml?j?B */ private String digesterRules = null; /** * rWlX?WbN?o?`t@C?iblogic-io.xml?j?B */ private String resources = null; /** * BLogicMapperwNXt@C?B * w???AftHgNXgp?B */ private String mapperStr = null; /** * rWlX?WbN?o??CX^X?B */ private BLogicResources blogicResources = null; /** * rWlX?WbN?o?}bp?[?B */ private AbstractBLogicMapper blogicMapper = null; /** * DigesterCX^X?B */ private static Digester digester = null; /** * ?I???B */ public void destroy() { // } /** * PlugIn????B * * <p>BLogicResources?Ay BLogicMapper * T?[ubgReLXgo^?B</p> * * <p> * vOCNT?[ubg?AW?[RtBO * null?A NullPointerException * ? * </p> * * @param servlet vOCNT?[ubg * @param config W?[RtBO * @exception ServletException ?O */ public void init(ActionServlet servlet, ModuleConfig config) throws ServletException { this.servlet = servlet; String moduleName = config.getPrefix(); // BLogicResourcesT?[ubgReLXgo^ initResources(); servlet.getServletContext().setAttribute(BLogicResources.BLOGIC_RESOURCES_KEY + moduleName, blogicResources); // BLogicMapperT?[ubgReLXgo^ initMapper(); servlet.getServletContext().setAttribute(BLOGIC_MAPPER_KEY + moduleName, this.blogicMapper); } /** * rWlX?WbN?o?????B * * <p>blogic-io.xml?Ablogic-io-rules.xml * p?A??Bean??B</p> * * <p>XML?t@C`s??AIOO??A * ServletExceptionbvX??[?B</p> * * @exception ServletException rWlX?WbN?o???? * ?O */ private void initResources() throws ServletException { if (resources == null || "".equals(resources)) { if (log.isDebugEnabled()) { log.debug("resources file location is not specified"); } return; } StringTokenizer st = new StringTokenizer(resources, ","); List<String> pathList = new ArrayList<String>(); while (st.hasMoreTokens()) { String path = st.nextToken(); path = path.trim(); if (log.isDebugEnabled()) { log.debug("blogic io file=" + path); } pathList.add(path); } try { if (digester == null) { if (digesterRules == null) { // ?[t@C??AftHg?[t@C // gp?B digesterRules = DIGESTER_RULES_PATH; } digester = DigesterLoader.createDigester(servlet.getServletContext().getResource(digesterRules)); digester.setValidating(true); } blogicResources = new BLogicResources(); for (int i = 0; i < pathList.size(); i++) { digester.push(blogicResources); URL url = this.getClass().getResource(getDtdUrl()); if (url != null) { digester.register(getPublicIdentifier(), url.toString()); } digester.parse(servlet.getServletContext().getResourceAsStream(pathList.get(i))); } } catch (MalformedURLException e) { log.error("", e); throw new ServletException(e); } catch (IOException e) { log.error("", e); throw new ServletException(e); } catch (SAXException e) { log.error("", e); throw new ServletException(e); } catch (XmlLoadException e) { log.error("", e); throw new ServletException(e); } } /** * Jqp?B * Jq?X???A?\bhI?[o?[Ch?B * @return Jq */ public String getPublicIdentifier() { return publicIdentifier; } /** * DTDURLp?B * DTDURL?X???A?\bhI?[o?[Ch?B * @return DTDURL */ public String getDtdUrl() { return dtdUrl; } /** * }bp?[o^???B * * <p>BLogicMapper??[h?A?? * CX^XtB?[ho^?B</p> * * <p>CX^X? BLogicMapper * NX??[hs?A ServletException * X??[?B</p> * * @throws ServletException T?[ubgO */ private void initMapper() throws ServletException { Object[] args = { resources }; if (this.mapperStr != null) { try { this.blogicMapper = (AbstractBLogicMapper) ClassUtil.create(this.mapperStr, args); } catch (ClassLoadException e) { log.error("", e); throw new ServletException(e); } catch (ClassCastException e) { log.error("", e); throw new ServletException(e); } } else { this.blogicMapper = new BLogicMapper(resources); } } /** * blogic-io-rules.xml??B * * @param digesterRules blogic-io-rules.xml */ public void setDigesterRules(String digesterRules) { this.digesterRules = digesterRules; } /** * blogic-io.xml??B * * @param resources blogic-io.xml */ public void setResources(String resources) { this.resources = resources; } /** * rWlX?WbN?o?fNX??B * * @param mapperStr rWlX?WbN?o?fNX */ public void setMapperClass(String mapperStr) { this.mapperStr = mapperStr; } /** * Jq??B * @param publicIdentifier Jq */ public void setPublicIdentifier(String publicIdentifier) { this.publicIdentifier = publicIdentifier; } /** * DTDURL??B * @param dtdUrl DTDURL */ public void setDtdUrl(String dtdUrl) { this.dtdUrl = dtdUrl; } }