如何创建并填充Apache CXF自动生成的大型类对象?
如何创建并填充CXF生成的AcceptorBatchTransfer对象
嘿,我来帮你搞定这个CXF自动生成类的实例化和填充问题~ 因为这些生成的类通常只有getter/setter、无自定义构造方法,所以我们只需要按步骤逐个实例化嵌套对象,再通过setter把它们组装到主对象里就行。
步骤1:实例化主对象
首先直接用new关键字创建AcceptorBatchTransfer的实例(Java会默认提供无参构造,除非类里显式定义了其他构造方法):
AcceptorBatchTransfer batchTransfer = new AcceptorBatchTransfer();
步骤2:创建并填充Header3对象
虽然你没写完Header3的完整定义,但它肯定也是CXF生成的、只有getter/setter的类。我们先实例化它,再给它的属性赋值(比如你提到的DwnldTrf字段),最后把它设置到主对象:
// 实例化Header3 Header3 hdr = new Header3(); // 填充属性(这里假设DwnldTrf是布尔类型,根据实际字段类型调整) hdr.setDwnldTrf(true); // 把Header3绑定到主对象 batchTransfer.setHdr(hdr);
步骤3:创建并填充DataSet列表
DataSet是List<CardPaymentDataSet1>类型,我们需要先初始化一个列表(比如ArrayList),然后逐个创建CardPaymentDataSet1实例、填充属性,再添加到列表中,最后设置到主对象:
// 初始化DataSet列表 List<CardPaymentDataSet1> dataSetList = new ArrayList<>(); // 创建第一个CardPaymentDataSet1并填充 CardPaymentDataSet1 firstDataSet = new CardPaymentDataSet1(); // 这里根据CardPaymentDataSet1的实际属性调用setter,比如假设它有PaymentAmount字段 firstDataSet.setPaymentAmount(new BigDecimal("100.00")); dataSetList.add(firstDataSet); // 如果有多个DataSet元素,重复上面的步骤 CardPaymentDataSet1 secondDataSet = new CardPaymentDataSet1(); secondDataSet.setPaymentAmount(new BigDecimal("200.00")); dataSetList.add(secondDataSet); // 把列表绑定到主对象 batchTransfer.setDataSet(dataSetList);
步骤4:创建并填充SctyTrlr对象
最后处理ContentInformationType1类型的sctyTrlr,同样是实例化、填充属性、绑定到主对象:
// 实例化ContentInformationType1 ContentInformationType1 sctyTrlr = new ContentInformationType1(); // 填充它的属性,比如假设它有Signature字段 sctyTrlr.setSignature("你的签名内容"); // 绑定到主对象 batchTransfer.setSctyTrlr(sctyTrlr);
几个注意点
- 因为所有属性都标记了
required=true,所以每个属性都必须填充,不然后续做XML序列化/反序列化的时候会抛出验证错误 - 如果遇到更深层次的嵌套类(比如
CardPaymentDataSet1里还有其他自定义类),用同样的逻辑:new实例 → 调用setter赋值 → 绑定到父对象 - 如果需要批量创建大量
CardPaymentDataSet1元素,可以用循环来简化代码,比如从数据库查询数据后循环生成
内容的提问来源于stack exchange,提问作者ip696
相关产品推荐
相关产品推荐

