1

我有一个包含一些域对象的 grails 项目。我在这段代码中使用了一个 java 项目,它可以为我解析一个文档。调用该 Java 项目的控制器使用 JAXB 从 Java 项目返回的对象生成 XML。我想使用这个 XML 文档(在使用 JAXB 进行一些文本解析后生成)在我的 grails 项目中填充我的域类。这在 grails 中是如何工作的?我可以使用 Castor 之类的东西,并使用我的 groovy 类的名称创建映射吗?这个想法是我想在数据库中生成新条目,并根据从他们上传的文档中解析出的任何文本为用户保存它。

无论如何,这甚至在 grails 中如何工作?我可以从另一个对象的控制器创建一个新的域对象吗?

 Project p = new Project(); 

然后做一个p.save()

4

1 回答 1

0

Download the Castor Core and Castor XML jars from here and put them in the lib directory (there's probably a better way to manage this dependency using Grails' dependency management, but this one's a quick and dirty).

With Castor introspection mode you don't need to worry about creating mapping files if your XML matches up nicely with your domains. Here's an example:

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"
    }
}

Navigate to localhost:8080/appname/my/myAction and it should display "Found N results", N > 0.

于 2010-09-16T21:58:04.967 回答