另外写一个框架用org.apache.xmlrpc.XmlRpc;

解决方案 »

  1.   

    先写一个factory
    import org.springframework.beans.factory.BeanFactory;
    import org.springframework.beans.factory.xml.XmlBeanFactory;
    import org.springframework.context.ApplicationContext;public class BeanFactoryProxy
    {
    private ApplicationContext ac;
    private XmlBeanFactory xbf;
    private BeanFactory factory; public BeanFactoryProxy(BeanFactory factory)
    {

    }
    public BeanFactoryProxy(ApplicationContext ac)
    {
    this.ac = ac;
    } public BeanFactoryProxy(XmlBeanFactory xbf)
    {
    this.xbf = xbf;
    } public Object getBean(String beanId)
    {
    if (null != ac)
    {
    return ac.getBean(beanId);
    }
    else if (null != xbf)
    {
    return xbf.getBean(beanId);
    }
    else if (null != factory)
    {
    return factory.getBean(beanId);
    }
    else
    {
    throw new RuntimeException("BeanFactoryProxy has not Inited");
    }
    }}再写一个框架类包含该factory
    public class Framework
    { private static BeanFactoryProxy beanFactoryProxy;
    private static int state = -1; public static void initialize(File configFile)
    {
    //TODO
    state = 1;
    }

    public static int getState(){
    return state;
    } public static void destroy()
    {
    //TODO
    } /**
     * @return
     */
    public static BeanFactoryProxy getBeanFactoryProxy()
    {
    return beanFactoryProxy;
    } /**
     * @param proxy
     */
    public static void setBeanFactoryProxy(BeanFactoryProxy proxy)
    {
    beanFactoryProxy = proxy;
    }}在服务器启动时就装载的类
    import javax.servlet.ServletConfig;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.FileSystemXmlApplicationContext;
    import org.springframework.core.io.ClassPathResource;
    import org.springframework.core.io.Resource;
    import org.springframework.web.context.WebApplicationContext;
    import org.springframework.web.context.support.WebApplicationContextUtils;public class FrameworkInitializerServlet extends HttpServlet
    {
    public static File configFile = null; public void init(ServletConfig config) throws ServletException
    {
    super.init(config);
    Framework.initialize(null);
             WebApplicationContext wac =   WebApplicationContextUtils.getRequiredWebApplicationContext(config.getServletContext());
            Framework.setBeanFactoryProxy(new BeanFactoryProxy(wac));
    } /**
     * @see javax.servlet.Servlet#destroy()
     */
    public void destroy()
    {
    super.destroy();
    Framework.destroy();
    }
    }初始化rpc类服务器启动时运行
    import javax.servlet.ServletConfig;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;import org.apache.xmlrpc.XmlRpc;
    import org.apache.xmlrpc.XmlRpcServer;
    import org.jdom.Document;
    import org.jdom.Element;
    import org.jdom.JDOMException;
    import org.jdom.input.SAXBuilder;public class XmlRpcSvcServlet extends HttpServlet
    {
    // XML-RPC 服务对象句柄
    private XmlRpcServer server = null; /**
     * (非 Javadoc)
     * @see javax.servlet.Servlet#init(javax.servlet.ServletConfig)
     */
    public void init(ServletConfig config) throws ServletException
    {
    super.init(config); // 初始化 xml-rpc server
    server = new XmlRpcServer();
    XmlRpc.setDefaultInputEncoding("UTF-8"); // 解析配置文件,注册xml-rpc服务
    SAXBuilder sb = new SAXBuilder();
    sb.setValidation(false);
    try
    {
    Document doc =
    sb.build(
    config.getServletContext().getRealPath(
    "/WEB-INF/xmlrpc-Config.xml"));
    Element root = doc.getRootElement(); // 解析注册服务节点 RegServices/Service
    Element svcsNode = root.getChild("RegServices");
    List list = svcsNode.getChildren("Service");
    for (int i = 0; i < list.size(); i++)
    {
    Element svcNode = (Element) list.get(i);
    String svcName = svcNode.getAttributeValue("name");
    String className = svcNode.getAttributeValue("classname");
    try
    {
    server.addHandler(
    svcName,
    Class.forName(className).newInstance());
    continue;
    }
    catch (InstantiationException e1)
    {
    e1.printStackTrace();
    }
    catch (IllegalAccessException e1)
    {
    e1.printStackTrace();
    }
    catch (ClassNotFoundException e1)
    {
    e1.printStackTrace();
    }
    System.out.println(
    "Xml-Rpc Service register fail. [name:"
    + svcName
    + "; classname:"
    + className
    + "]");
    }
    }
    catch (JDOMException e)
    {
    e.printStackTrace();
    }
    } /**
     * (非 Javadoc)
     * @see javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
     */
    public void service(
    HttpServletRequest request,
    HttpServletResponse response)
    throws ServletException, IOException
    {
    response.setContentType("text/xml");
    byte[] result = server.execute(request.getInputStream());
    response.setContentLength(result.length);
    OutputStream out = response.getOutputStream();
    out.write(result);
    out.flush();
    }
    }配置要注册的类
    <?xml version="1.0" ?>
    <Config>
    <RegServices>
    <Service name="LogService" classname="XmlRpcService" />
    </RegServices>
    </Config>XmlRpcService
    public class XmlRpcService
    { // 定义RPC服务的方法 private String xml ="..";
    /**
     * 数据服务接口名常量
     */
    private static final String DATA_SERVICE_NAME = "logService";

             //调用
             public String testRpc()
    {
    ILogService theService =
    (ILogService ) Framework.getBeanFactoryProxy().getBean(
    DATA_SERVICE_NAME);
    return theService.testRpc();
    }
    }
      

  2.   

    spring与struts的结合
    <web-app id="WebApp"><!--  Standard Action Servlet Configuration (with debugging)  -->  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/applicationContext.xml</param-value>
      </context-param>

      <!--listener>
    <listener-class>
    org.springframework.web.context.ContextLoaderListener
    </listener-class>
      </listener-->     <servlet>   <servlet-name>SpringContextServlet</servlet-name>   <servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>      <load-on-startup>1</load-on-startup> </servlet>    <servlet>    <servlet-name>action</servlet-name>    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>    <init-param>      <param-name>application</param-name>      <param-value>ApplicationResources</param-value>    </init-param>    <init-param>      <param-name>config</param-name>      <param-value>/WEB-INF/struts-config.xml</param-value>    </init-param>    <init-param>      <param-name>debug</param-name>      <param-value>0</param-value>    </init-param>    <init-param>      <param-name>detail</param-name>      <param-value>0</param-value>    </init-param>    <init-param>      <param-name>validate</param-name>      <param-value>true</param-value>    </init-param>    <load-on-startup>2</load-on-startup>  </servlet>  <servlet>  <servlet-name>ApplicationStartup</servlet-name>  <servlet-class>ApplicationStartup</servlet-class>  <init-param>    <param-name>driver</param-name>    <param-value>oracle.jdbc.driver.OracleDriver</param-value>  </init-param>  <init-param>    <param-name>url</param-name>    <param-value>jdbc:oracle:thin:@192.168.10.10:1521:oracledb</param-value>  </init-param>  <init-param>    <param-name>userName</param-name>    <param-value>pub</param-value>  </init-param>  <init-param>    <param-name>password</param-name>    <param-value>pub</param-value>  </init-param>  
      <init-param>    <param-name>executeTime</param-name>    <param-value>23:59:59</param-value>  </init-param>  <load-on-startup>5</load-on-startup> </servlet>  <!-- Database Initialization Servlet Configuration -->  <!--  Standard Action Servlet Mapping  -->  <servlet>    <servlet-name>ProviderServlet</servlet-name>    <display-name>ProviderServlet</display-name>    <servlet-class>ProviderServlet</servlet-class>  </servlet>applicationContext.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
    "spring-beans.dtd">
      <beans>
      
      <import resource="config/Proj.xml" /> <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
    <property name="configLocation">
       <value>/WEB-INF/SqlMapConfig.xml</value>
    </property>
    <property name="dataSource">
    <ref local="dataSource"/>
    </property>
        </bean>
    <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName">
        <value>jdbc/Datasource</value>
    </property>
    </bean>
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource">
    <ref local="dataSource"/>
    </property>
    </bean>

    <bean id="baseTxProxy" lazy-init="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
    <property name="transactionManager">
    <ref local="transactionManager" />
    </property>
    <property name="transactionAttributes">
    <props>
    <prop key="*">PROPAGATION_REQUIRED</prop>
    </props>
    </property>
    </bean>
    sqlMap.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE sqlMapConfig
      PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"
      "http://www.ibatis.com/dtd/sql-map-config-2.dtd">
    <sqlMapConfig> <settings cacheModelsEnabled="false" lazyLoadingEnabled="false" enhancementEnabled="true" useStatementNamespaces="true"/>
    <sqlMap resource="project/dao/ibatis/maps/Proj.xml"/>
    bean/config.xml
    <beans>
       <bean id="ApplyDAO" class="project.project.dao.ApplyDAO">
    <property name="dataSource">
    <ref bean="dataSource" />
    </property> <property name="sqlMapClient">
    <ref bean="sqlMapClient" />
    </property>
    </bean>    <bean id="ApplyService" parent="baseTxProxy">
    <property name="target">
    <bean class="projectCreate.service.ApplyServiceImpl">
    <property name="theInfoDAO">
    <ref bean="IInfoDAO" />
    </property>
    <property name="theLogDAO">
    <ref bean="LogDAO" />
    </property>
    <property name="theIAppDAO">
    <ref bean="AppDAO" />
    </property>
    <property name="theIDAO">
    <ref local="lDAO" />
    </property>
    </bean>
    </property>
    <property name="transactionAttributes">
    <props>
    <prop key="*">PROPAGATION_REQUIRED</prop>
    </props>
    </property>
    </bean>
    </beans>
    sqlMapClient.xml
    ..