gpt4 book ai didi

grails - 如何使用 JAXB 类型作为 Grails 域类?

转载 作者:行者123 更新时间:2023-12-02 14:12:49 24 4
gpt4 key购买 nike

我的系统由一个用 Java 编写的后端部分组成,它公开了一组使用 WSDL 和 XSD 定义契约优先的 Web 服务。在通过 Web 服务传输的数据中,有大量的产品类型(准确地说,它们是不同类型的银行账户)。我们的前端是一个 Grails Web 应用程序。它使用并公开后端托管的数据和操作。出于安全原因,前端没有自己的数据库;所有数据都存储在后端。相当标准的架构。

现在,这组产品规模庞大、不断增长且不稳定。每个产品类型都必须在 Web 应用程序用户界面上进行 CRUD。如果我能告诉 Grails 使用产品类型的 XSD 规范作为域类型,并为它们生成 View 和 Controller ,那就太好了。

即使经过大量的实验和大量的网页浏览,我还没有找到解决这个难题的方法。我有大约一年的 Grails 专业经验。任何帮助或想法将不胜感激。

一些细节:

产品类型是一个简单的 POJO 数据载体。一些简化的例子:

package jaxbgenerated;

public class Product1 {
protected Account from;
protected Account to;
protected String name;
// + getters and setters
}

public class Product2 {
protected List<Account> accounts;
protected String name;
// + getters and setters
}

public class Account {
protected String id1;
protected String id2;
// + getters and setters
}

请注意,“帐户”不是产品类型,而是 JAXB 生成的类型。除了简单数据类型(如 String、int 和 Date)的属性之外,产品还可以包含此类,但它们从不包含其他产品类型。

我想要的最终结果是一个 Grails 生成的表单,用户可以在其中编辑带有嵌套表单的 Product1 实例,以编辑其组成帐户。 Product2 也是如此。

我的想法是首先为每个 JAXB 生成的类型手动编码一个 Grails 域类:
//in grails-app/domain:
 
import utilities.Copier
 
class Product1 extends jaxbgenerated.Product1 {
Product1(jaxbgenerated.Product1 jaxb) {
Copier.copy(jaxb, this)
    }

static constraints = {
}
}

这里有一些样板代码,但我只能忍受。 Copier.copy() 函数(我认为)需要将从后端获取的 jaxbegenerated.Product 实例转换为可在 Grails 中使用的 Product1 实例。它递归地在 jaxb 源中查找 jaxb 生成的属性,并将它们的值复制到相应的 Grails 域类型。构造函数是从从后端获取数据的层调用的。

我可以使用约束块在需要的地方手动添加语义约束,例如“从”和“到”帐户是不一样的。

接下来,我为所有这样构造的 Grails 域类生成 Controller 和 View ,并运行应用程序。并得到一堆异常:
Caused by MappingException: Could not determine type for: Account, at table:
product1_type, for columns: [org.hibernate.mapping.Column(from)]

我认为这里的问题是 Product1 的“from”和“to”属性不是 Account 类型,而是 jaxbgenerated.Account 类型。

我尝试了不同的方法,但无济于事。一些注意事项:
  • 正如我所说,所有数据存储都发生在我的后端,所以我不需要
    Grails 的 GORM/Hibernate 方面。因此我尝试添加
    "static mapWith = "none"到域类,但没有
    帮助。
  • 我尝试明确告诉 Hibernate 帐户的类型
    在 Product1 中添加“static mapping = { from type: Account }”但是
    那也没有用。

  • 任何帮助或想法将不胜感激。

    /Jan Reher,Systematic A/S,丹麦

    最佳答案

    我认为您确实编写了一个与此概念类似的数据库插件 simpledb

    关于grails - 如何使用 JAXB 类型作为 Grails 域类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12857796/

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