gpt4 book ai didi

Java 摘要解析

转载 作者:行者123 更新时间:2023-11-30 09:22:43 25 4
gpt4 key购买 nike

我正在做 xml 到 java 对象的解析,但是解析时间得到了 billingDetailsexpiryDetails *null*我的 xml 是 _

<?xml version="1.0" encoding="UTF-8" standalone="yes">
<item>
<id>7</id>
<category>NONE</category>
<name>ServiceCharge</name>
<description>Service Charge</description>
<unitKey>NONE</unitKey>
<billingDetails>
<billFrequency>NONE</billFrequency>
<billingCycle>NOT_DEFINED</billingCycle>
</billingDetails>
<expiryDetails>
<expiryDays>0</expiryDays>
<expiryMethod>EXPIRE_PERIOD</expiryMethod>
</expiryDetails>
<gracePeriod>0</gracePeriod>
</item>

正在执行此 java 代码_

public static void digestItemsDetails(Digester digester, String root) {

String itemTag = root;
digester.addObjectCreate(itemTag, Item.class);
digester.addCallMethod(itemTag +"/id", "setId", 0);
digester.addCallMethod(itemTag +"/category", "setCategory", 0);
digester.addCallMethod(itemTag +"/name", "setName", 0);
digester.addCallMethod(itemTag +"/description", "setDescription", 0);
digester.addCallMethod(itemTag +"/unitKey", "setUnitKey", 0);

String billingPrefix = itemTag + "/billingDetails";
digester.addObjectCreate(billingPrefix, BillingDetails.class);
digester.addCallMethod(billingPrefix +"/billFrequency", "setBillFrequency", 0);
digester.addCallMethod(billingPrefix +"/billingCycle", "setBillingCycle", 0); 0);

String expiryPrefix = itemTag + "/expiryDetails";
digester.addObjectCreate(expiryPrefix, ExpiryDetails.class);
digester.addCallMethod(expiryPrefix +"/expiryDays", "setExpiryDays", 0);
digester.addCallMethod(expiryPrefix +"/expiryMethod", "setExpiryMethod", 0);

digester.addCallMethod(itemTag+"/gracePeriod", "setGracePeriod", 0);
}

Item.java

public class Item {
....
public BillingDetails getBillingDetails() {
return billingDetails;
}
public void setBillingDetails(BillingDetails billingDetails) {
this.billingDetails = billingDetails;
}
......
}

但是我在 billingDetailsexpiryDetails 中得到 NULL,有大佬知道这是怎么回事吗?谢谢

最佳答案

这个测试有效。

import java.io.*;
import org.xml.sax.*;
import org.junit.*;
import org.apache.commons.digester.*;

import static org.junit.Assert.*;

public class DigesterTest {
@Test
public void testItemBillingDetailsNotNull() throws IOException, SAXException {
Digester d = new Digester();
MyApp.digestItemsDetails(d, "item");
Item item = (Item) d.parse(DigesterTest.class.getResource("/test.xml"));
assertNotNull(item.getBillingDetails());
assertEquals("NONE", item.getBillingDetails().getBillFrequency());
assertEquals("NOT_DEFINED", item.getBillingDetails().getBillingCycle());
}
}

我认为您只是错过了对 addSetNext() 的调用:

import org.apache.commons.digester.*;

public class MyApp {
public static void digestItemsDetails(Digester digester, String root) {
String itemTag = root;
digester.addObjectCreate(itemTag, Item.class);
/* snip */
String billingPrefix = itemTag + "/billingDetails";
digester.addObjectCreate(billingPrefix, BillingDetails.class);
digester.addCallMethod(billingPrefix +"/billFrequency", "setBillFrequency", 0);
digester.addCallMethod(billingPrefix +"/billingCycle", "setBillingCycle", 0);
digester.addSetNext(billingPrefix, "setBillingDetails");
/* snip */
}
}

关于Java 摘要解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16371039/

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