首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

大神们帮小弟我看看这个为什么报空指针呢?调试看到不是空的呀.

2014-01-15 
大神们帮我看看这个为什么报空指针呢?调试看到不是空的呀..本帖最后由 Gemerl 于 2013-12-29 13:57:54 编

大神们帮我看看这个为什么报空指针呢?调试看到不是空的呀..
本帖最后由 Gemerl 于 2013-12-29 13:57:54 编辑 大神们帮我看看这个为什么是空的呢?调试看到不是空的呀..

xml  test.xml


<?xml version="1.0" encoding="UTF-8"?>

<root> 
</root>


user.java

package com.test.entity;

public class User {
private Integer id;
private String name;
private String passWord;


public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassWord() {
return passWord;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
public User() {
}
public User(Integer id, String name, String passWord) {
this.id = id;
this.name = name;
this.passWord = passWord;
}

}



XMLUtil.java

package com.test.util;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Writer;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

import com.test.entity.User;

public class XMLUtil {

/**
 * @param args
 */
public static void main(String[] args) {
User u=new User(1,"張三","123");
new XMLUtil().initDocument(u);
System.exit(0);
}


public Document getDocument(){
SAXReader saxreader=new SAXReader();
Document doc=null;
File file=new File("src/test.xml");
if(file.exists()){
try {
doc=saxreader.read(file);
} catch (DocumentException e) {
e.printStackTrace();
}
}

return doc;

}


/**
 * 
 * 初始化xml文件
 * @param u
 */
public void initDocument(Object u){

Document doc=this.getDocument();
Element el=doc.getRootElement(); 
Element el1=el.addElement(u.getClass().getSimpleName().toString());
Field[] fields=u.getClass().getDeclaredFields();
String[] fieldNames=new String[fields.length];  
Object str[]=new Object[fields.length];
/**
 * 将属性名称赋值给数组
 */
for(int i=0;i<fields.length;i++){  
        fieldNames[i]=fields[i].getName(); 
        str[i]=getFieldValueByName(fieldNames[i],u);
}  

el1.addAttribute(fieldNames[0], str[0].toString());
for (int i = 1; i < fieldNames.length; i++) {
//el1.element(fieldNames[i]).addText(str[i].toString());(这句报错.但是调试不是空的)
el1.addElement(i+"s").addText((i+10)+"y");//使用这个就没问题
}
OutputFormat format=OutputFormat.createPrettyPrint();
try {
FileOutputStream fs=new FileOutputStream("src/test.xml");
XMLWriter xw=new XMLWriter(fs,format);
xw.write(doc);

xw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

/** 
 * 根据属性名获取属性值 
 * */  
   private Object getFieldValueByName(String fieldName, Object o) {  
       try {    
           String firstLetter = fieldName.substring(0, 1).toUpperCase();    
           String getter = "get" + firstLetter + fieldName.substring(1);    
           Method method = o.getClass().getMethod(getter, new Class[] {});    
           Object value = method.invoke(o, new Object[] {});    
           return value;    
       } catch (Exception e) {    
           return null;    


       }    
   } 


}



问题一:XMLUtil.java  el1.element(fieldNames[i]).addText(str[i].toString());这行出问题
但是fieldNames[i]和str[i]不为空..

问题二:我通过dom4j读到一个节点返回节点名为user 那我有怎么得到一个user对象
[解决办法]
引用:
Quote: 引用:

1,你debug的时候再看下el1 是不是为空。
2,获取每个节点的值,封装成User对象


比如我获取了一个节点名字 User  我怎么获取这个对象   获取到的节点名字是个string的呀!!!

你对象早释放了怎么可能获取到对象,再new一个,把属性填进去

热点排行