自己写的读xml配置文件获取变量(类似spring)中遇到的问题

1.
java.lang.IllegalAccessException: Class com.zhao.config.BeanConfig can not access a member of class com.zhao.object.Contact with modifiers "private"
at sun.reflect.Reflection.ensureMemberAccess(Unknown Source)
at java.lang.reflect.Field.doSecurityCheck(Unknown Source)
at java.lang.reflect.Field.getFieldAccessor(Unknown Source)
at java.lang.reflect.Field.set(Unknown Source)
at com.zhao.config.BeanConfig.makeBean(BeanConfig.java:98)
at com.zhao.config.BeanConfig.makeBeans(BeanConfig.java:155)
at com.zhao.config.BeanConfig.parse(BeanConfig.java:59)
at com.zhao.config.BeanConfig.<init>(BeanConfig.java:27)
at com.zhao.test.TestRef.main(TestRef.java:12)
java.lang.IllegalAccessException: Class com.zhao.config.BeanConfig can not access a member of class com.zhao.object.Person with modifiers "private"
at sun.reflect.Reflection.ensureMemberAccess(Unknown Source)
at java.lang.reflect.Field.doSecurityCheck(Unknown Source)
at java.lang.reflect.Field.getFieldAccessor(Unknown Source)
at java.lang.reflect.Field.set(Unknown Source)
at com.zhao.config.BeanConfig.makeBean(BeanConfig.java:91)contact:

at com.zhao.config.BeanConfig.makeBeans(BeanConfig.java:155)
at com.zhao.config.BeanConfig.parse(BeanConfig.java:59)
at com.zhao.config.BeanConfig.<init>(BeanConfig.java:27)
at com.zhao.test.TestRef.main(TestRef.java:12)
java.lang.IllegalAccessException: Class com.zhao.config.BeanConfig can not access a member of class com.zhao.object.Student with modifiers "private"
at sun.reflect.Reflection.ensureMemberAccess(Unknown Source)
at java.lang.reflect.Field.doSecurityCheck(Unknown Source)
at java.lang.reflect.Field.getFieldAccessor(Unknown Source)
at java.lang.reflect.Field.set(Unknown Source)
at com.zhao.config.BeanConfig.makeBean(BeanConfig.java:98)
at com.zhao.config.BeanConfig.makeBeans(BeanConfig.java:155)
at com.zhao.config.BeanConfig.parse(BeanConfig.java:59)
at com.zhao.config.BeanConfig.<init>(BeanConfig.java:27)
at com.zhao.test.TestRef.main(TestRef.java:12)
Exception in thread "main" java.lang.NullPointerException
at com.zhao.test.TestRef.main(TestRef.java:19)

/////////////////////////
Field field = cls.getDeclaredField(key);
------------------>
Field field = cls.getDeclaredField(key);

if(!field.isAccessible())
{
field.setAccessible(true);
}

private 的属性,反射修改要设置它为可修改先

2.
java.lang.NumberFormatException

//////////////////
public void makeBeans(HashMap beanClass, HashMap beanProperties,
HashMap beanFlat) {

for (Iterator iter = beanClass.keySet().iterator(); iter.hasNext();)
{
String id = (String)iter.next();
String className = (String)beanClass.get(id);
Properties porp = (Properties)beanProperties.get("id");
HashMap map = (HashMap)beanFlat.get("id");

makeBean(id,className,porp,map);
}


}

--------------------------->

public void makeBeans(HashMap beanClass, HashMap beanProperties,
HashMap beanFlat) {

for (Iterator iter = beanClass.keySet().iterator(); iter.hasNext();)
{
String id = (String)iter.next();
String className = (String)beanClass.get(id);
Properties porp = (Properties)beanProperties.get(id);
HashMap map = (HashMap)beanFlat.get(id);

makeBean(id,className,porp,map);
}


}

习惯性地get中都写成了""的字符串

3.
public void characters(char[] ch, int start, int length)
throws SAXException {
// TODO Auto-generated method stub
currentValue.delete(0, currentValue.length());
currentValue.append(ch, start, length);
System.out.println("currentValue:"+currentValue+"value");
propertyMsg.setValue(new String(currentValue.toString()));
}

//////////////////////

currentValue:
value
currentValue:
value
currentValue:
value
currentValue:
      value
currentValue:123456value
currentValue:
value
currentValue:
value
currentValue:
              value
currentValue:gzvalue
currentValue:
        value
currentValue:
value
currentValue:

    value
currentValue:
        value
currentValue:
              value
currentValue:1value
currentValue:
        value
currentValue:
        value
currentValue:
              value
currentValue:zhaovalue
currentValue:
        value
currentValue:
        value
currentValue:
              value
currentValue:123value
currentValue:
        value
currentValue:
    value
currentValue:

     value
currentValue:
        value
currentValue:
              value
currentValue:1value
currentValue:
        value
currentValue:
        value
currentValue:
              value
currentValue:becknamvalue
currentValue:
        value
currentValue:
        value
currentValue:
              value
currentValue:0201value
currentValue:
        value
currentValue:
        value
currentValue:
              value
currentValue:
        value
currentValue:
    value
currentValue:
    value
currentValue:
value
val is:

contact:
java.lang.NumberFormatException: For input string: "
"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.valueOf(Unknown Source)
at com.zhao.config.BeanConfig.makeBean(BeanConfig.java:109)
at com.zhao.config.BeanConfig.makeBeans(BeanConfig.java:162)
at com.zhao.config.BeanConfig.parse(BeanConfig.java:59)
at com.zhao.config.BeanConfig.<init>(BeanConfig.java:27)
at com.zhao.test.TestRef.main(TestRef.java:12)
Exception in thread "main" java.lang.NullPointerException
at com.zhao.test.TestRef.main(TestRef.java:19)

可以看出public void characters(char[] ch, int start, int length)
是在有空字符串时也会触发的,如
<beans>(1)
<bean name="mybean">(2)
<property name="name">(3)
<value>goodname(4)</value>
</property>(5)
</bean>(6)
</beans>(7)
原以为这个函数只是会在(4)处会被执行,结果是(1)-->(7)都会被执行!
(1)-->(3),(5)-->(7)会出现长长的空字符串.
public void ignorableWhitespace(char ch[], int start, int length)
是在(1)-->(3),(5)-->(7)时会执行.
当有ignorableWhitespace和characters一起时两个都可以触发的~~~!

你可能感兴趣的:(java,spring,xml,Access,sun)