Domanda

Ho un progetto Grails che contiene alcuni oggetti di dominio. Sto usando un progetto Java in questo codice che può analizzare un documento per me. Il controller che le chiamate che progetto Java sta usando JAXB per generare XML dall'oggetto restituito dal progetto Java. Voglio usare questo documento XML (che viene generato dopo qualche analisi del testo, utilizzando JAXB) per popolare le mie classi di dominio nel mio progetto Grails. Come fa questo lavoro in Grails? Posso usare qualcosa come Castore, e creare una mappatura utilizzando i nomi dei miei classi Groovy? L'idea è che voglio generare nuove voci nel database e salvarlo per l'utente in base a ciò che il testo è stato analizzato dal documento hanno caricati.

Come fa questo lavoro anche in Grails comunque? Posso creare un nuovo oggetto di dominio da controllore di un altro oggetto con qualcosa di simile

 Project p = new Project(); 

e poi fare un p.save()?

È stato utile?

Soluzione

Scarica i vasetti XML Core e Castor Castor da qui e metterli nella directory lib (probabilmente c'è un modo migliore per gestire questa dipendenza con Grails' la gestione delle dipendenze , ma questo è un veloce e sporco).

Castor introspezione modalità non c'è bisogno di preoccuparsi sulla creazione di file di mapping se il vostro XML corrisponda piacevolmente con i tuoi domini. Ecco un esempio:

graal-app / dominio / MyDomain.groovy

class MyDomain {
    String foo
    String bar
}

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

Spostarsi localhost:8080/appname/my/myAction e dovrebbe visualizzare "Trovato N risultati", N> 0.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top