首先设计一个简单的xml配置文件config.xml
<?xml version=1.0 encoding=utf-8?>
<test>
<luck title="luck bang bang bang" tag="luck" application="dispatch.test" method="mm">
</luck>
</test>
接下来一个分析xml的方法,用到jaxp,dispatch.java
package dispatch;
import java.io.*;
import org.xml.sax.*;
import org.xml.sax.helpers.defaulthandler;
import javax.xml.parsers.saxparserfactory;
import javax.xml.parsers.parserconfigurationexception;
import javax.xml.parsers.saxparser;
public class dispatch extends defaulthandler
{
//public dispatch(){
public void execute(){
defaulthandler handler = new dispatch();
saxparserfactory factory = saxparserfactory.newinstance();
try {
saxparser saxparser = factory.newsaxparser();
saxparser.parse( new file("dispatch/config.xml"),handler);
} catch (throwable t) {
t.printstacktrace();
}
}
dynamicloader loader = new dynamicloader();
//===========================================================
// sax documenthandler methods
//===========================================================
public void startelement(string namespaceuri,
string lname, // local name
string qname, // qualified name
attributes attrs)
throws saxexception
{
//debug//
string ftag = "luck";
////////
string ename = lname; // element name
if ("".equals(ename)) ename = qname; // namespaceaware = false
if (attrs != null) {
for (int i = 0; i < attrs.getlength(); i++) {
if(ftag.equals(attrs.getvalue(i))){
system.out.println(loader.loader(attrs.getvalue(i+1),attrs.getvalue(i+2),"see it ??"));
break;
}//if equals
}//for i
}//if !null
}
public static void main(string argv[]){
dispatch get = new dispatch();
get.execute();
}
}
再来一个动态的加载方法dynamicloader.java
package dispatch;
import java.lang.*;
import java.lang.reflect.*;
public class dynamicloader{
public dynamicloader(){
}
public string loader(string appname,string mthname,string ctn){
string restr = "";
class torun = null;
try{
torun = class.forname(appname);
method ftogo = torun.getdeclaredmethod(mthname,new class[]{string.class});
restr = ftogo.invoke(torun.newinstance(),new object[]{ctn}).tostring();
}catch(exception e){
system.out.println("loader:"+e+"|"+mthname+"|"+appname+"|"+ctn);
}
return restr;
}
}
一个小小的调试脚本,只是用来返回参数test.java
package dispatch;
public class test{
public string mm(string str){
return str;
}
}
xml文件的分析需要系统加jaxp、jaxr、jaxm、jaxrpc,具体的去看sax的文档我这里就不赘述了。
这个联起来可以跑了,只是速度太慢,跟同事用同样原理的.propertier文件方式比好象慢一些,郁闷~
