我正在尝试使用带有clojure的XStream api加载xml文件。这个过程不起作用,我不知道发生了什么。
我在命名空间中定义了一个类型:
(ns myapp.domain.foo)
(defrecord Foo [value price])
我有一个使用XStream从xml文件导入数据的函数。
(ns myapp.xml.xml-reader
(:import myapp.domain.foo.Foo)
(:import com.thoughtworks.xstream.XStream)
(:import com.thoughtworks.xstream.io.xml.DomDriver))
(defn load-from-xml
[xml]
(let [parser (XStream. (DomDriver.))]
(.alias parser "Foo" Foo)
(.fromXML parser reader)))
当我尝试使用此函数将xml数据加载到Foo时,键入以下错误:
com.thoughtworks.xstream.mapper.CannotResolveClassException:myapp.domain.foo.Foo : myapp.domain.foo.Foo
这是我的测试代码:
(deftest leitor-xml-test
(let[ xml "<Foo><value>43.5</value><price>1000</price></Foo>"]
(testing "should be possible to load xml"
(let [ foo-list (load-from-xml xml)]
(is (= (count foo-list) 1)))))
我不明白为什么会这样。 我认为问题可能是命名空间,因为当我在repl工作中使用它时很好。
有人可以帮忙吗?
答案 0 :(得分:1)
记录不提供字段的getter和setter。 XStream能否直接序列化字段?
此外,您应该在xml-reader命名空间中要求foo命名空间。
(ns myapp.xml.xml-reader
(:require
myapp.domain.foo)
(:import
myapp.domain.foo.Foo
com.thoughtworks.xstream.XStream
com.thoughtworks.xstream.io.xml.DomDriver))
否则不会生成defrecord。