gpt4 book ai didi

java - Simple Framework 中的自定义匹配器用于反序列化而不是序列化

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:29:55 25 4
gpt4 key购买 nike

我正在尝试让 Simple 与 XMLGregorianCalendar 配合得很好。在这样做的过程中,我创建了一个匹配器和转换:

public class MyMatcher implements Matcher {

@Override
public Transform<?> match(@SuppressWarnings("rawtypes") final Class type) throws Exception {
if (type.equals(XMLGregorianCalendar.class)) {
return new XMLGregorianCalendarTransform();
}

return null;
}

}

public class XMLGregorianCalendarTransform implements Transform<XMLGregorianCalendar> {

@Override
public XMLGregorianCalendar read(final String value) throws Exception {
return DatatypeFactory.newInstance().newXMLGregorianCalendar(value);
}

@Override
public String write(final XMLGregorianCalendar value) throws Exception {
return value.toXMLFormat();
}

}

当这段代码用于反序列化时,效果很好:

        final Serializer serializer = new Persister(new MyMatcher());
obj = serializer.read(type, new ByteArrayInputStream(xml.getBytes(Charset.forName(UTF8_ENCODING))));

不幸的是,当我尝试使用它进行序列化时,它不起作用,它抛出 Failed to create xml string for the object。
org.simpleframework.xml.transform.TransformException:类 com.sun.org.apache.xerces.internal.jaxp.datatype 的转换
e.XMLGregorianCalendarImpl not supported
错误,从未调用我的 Transform 的写入方法(通过断点检查)。

这是我用来序列化的代码:

        final ByteArrayOutputStream baos = new ByteArrayOutputStream();
os = new DataOutputStream(baos);
final Serializer serializer = new Persister(new MyMatcher());
serializer.write(this, os);
os.flush();
xmlString = new String(baos.toByteArray(), Charset.forName(UTF8_ENCODING));

write 方法抛出异常。我用过 Serialization third-party classes with Simple XML (org.simpleframework.xml)作为引用,这就是让我进行反序列化工作的原因,但现在我被困住了。我不确定如何继续。

感谢任何帮助。

最佳答案

事实证明,答案就在问题中。错误指出 XMLGregorianCalendarImpl 不受支持。这不是我的 Matcher 检查的内容。我只需要改变:

    if (type.equals(XMLGregorianCalendar.class)) {

    if (XMLGregorianCalendar.class.isAssignableFrom(type)) {

我希望这对某人有帮助。

关于java - Simple Framework 中的自定义匹配器用于反序列化而不是序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15649554/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com