[英]XML unmarshalling with Castor and Grails
我有一个grails项目,其中包含一些域对象。 我在此代码中使用一个Java项目,该项目可以为我解析文档。 调用该Java项目的控制器正在使用JAXB从Java项目返回的对象生成XML。 我想使用此XML文档(在使用JAXB进行一些文本解析之后生成),以在grails项目中填充Domain类。 它如何工作? 我可以使用Castor之类的东西,并使用groovy类的名称创建映射吗? 我的想法是我想在数据库中生成新条目,并根据从他们上传的文档中解析出的任何文本将其保存给用户。
无论如何这怎么在grails中起作用? 我可以从另一个对象的控制器创建一个新的Domain对象吗?
Project p = new Project();
然后做一个p.save()
?
从这里下载Castor Core和Castor XML jar并将它们放在lib
目录中(使用Grails的依赖管理可能是一种更好的方法来管理这种依赖,但这是一种快速而肮脏的方法)。
使用Castor内省模式 ,如果您的XML与您的域很好地匹配,则无需担心创建映射文件。 这是一个例子:
grails-app / domain / MyDomain.groovy
class MyDomain {
String foo
String bar
}
grails-app / controllers / MyController.groovy
import org.exolab.castor.xml.Unmarshaller
import java.io.ByteArrayInputStream
class MyController {
def myAction = {
def xml = '''
<myDomain>
<foo>My Foo String</foo>
<bar>My Bar String</bar>
</myDomain>
'''
def reader = new ByteArrayInputStream(xml.bytes).newReader()
def domain = (MyDomain)Unmarshaller.unmarshal(MyDomain.class, reader)
domain.save()
def count = MyDomain.countByFoo('My Foo String')
render "Found $count results"
}
}
导航到localhost:8080/appname/my/myAction
,它应显示“找到N个结果”,N> 0。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.