Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Pattern.complie中断XStream_Java_Regex_Eclipse_Serialization_Xstream - Fatal编程技术网

Java Pattern.complie中断XStream

Java Pattern.complie中断XStream,java,regex,eclipse,serialization,xstream,Java,Regex,Eclipse,Serialization,Xstream,在读取XStream库生成的文件并对结果使用Patter.compile时,我从XStream库中观察到了非常奇怪的行为 运行时,它会出现空指针异常,但如果我在调试模式下一步一步地运行它,它会正常工作 我把它的范围缩小到Pattern.complie如果我只是读取字符串变量的值,它就可以正常工作,如果我使用Pattern.complie(“.*)和unmarshal方法,它也可以正常工作 我使用Java 7和XStream 1.4.4 我认为这是由于reader.getAttribute(“ke

在读取XStream库生成的文件并对结果使用Patter.compile时,我从XStream库中观察到了非常奇怪的行为 运行时,它会出现空指针异常,但如果我在调试模式下一步一步地运行它,它会正常工作
我把它的范围缩小到Pattern.complie如果我只是读取字符串变量的值,它就可以正常工作,如果我使用Pattern.complie(“.*)和unmarshal方法,它也可以正常工作
我使用Java 7和XStream 1.4.4
我认为这是由于reader.getAttribute(“key”)返回null,而不是在调试时 知道为什么会这样吗?
以下是我所拥有的:
我的班级

}

测试用例

public void testA() throws FileNotFoundException, IOException, ClassNotFoundException{
    XStream xstream = new XStream();
    xstream.alias("MessageFieldMappings", A.class);
    xstream.registerConverter(new AConverter());
    ObjectInputStream in = xstream.createObjectInputStream(new FileInputStream("test1.xml"));
    A rootNode = (A) in.readObject();
    in.close();

}
测试文件(test1.xml)

线索在里面

path                : /MessageFieldMappings/RootMapping
line number         : 3
您已将
MessageFieldMappings
化名为class
A
,因此当它看到
MessageFieldMappings
时,它将调用转换器,该转换器将
向下移动到
RootMapping
元素,并尝试从中提取
属性。它没有一个,因此NPE

您需要在转换器中进行额外的上下移动:

reader.moveDown(); // RootMapping
reader.moveDown(); // First FieldMap
A n = new A(reader,context);
reader.moveUp();
reader.moveUp();
return n;

是的,很明显我真的不知道我怎么会错过它。非常感谢您抽出时间!我想我的调试器可能忽略了空指针
<object-stream>
<MessageFieldMappings>
<RootMapping>
  <FieldMap key=".*">
    <FieldMap key="A.*">
      <FieldMap key="AB.*"/>
      <FieldMap key="AC.*"/>
    </FieldMap>
    <FieldMap key="D.*"/>
  </FieldMap>
</RootMapping>
</MessageFieldMappings>
</object-stream>
com.thoughtworks.xstream.converters.ConversionException: null : null
---- Debugging information ----
cause-exception     : java.lang.NullPointerException
cause-message       : null
class               : nz.orion.monkPraser.praser.fieldConverter.A
required-type       : nz.orion.monkPraser.praser.fieldConverter.A
converter-type      : nz.orion.monkPraser.praser.fieldConverter.AConverter
path                : /MessageFieldMappings/RootMapping
line number         : 3
version             : null
-------------------------------
at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:79)
...
path                : /MessageFieldMappings/RootMapping
line number         : 3
reader.moveDown(); // RootMapping
reader.moveDown(); // First FieldMap
A n = new A(reader,context);
reader.moveUp();
reader.moveUp();
return n;