题意同this SO question除了我试图在不使用 JAXB 的情况下实现。但是是的,使用 JAXB 使用的反射。
我尽量不使用 JAXB,因为我有一个预定义的 bean,当给出 XML 时,我必须获得适当的类和 setter 来填充该 bean。
XML在这里只是一个数据源,我需要拉取bean需要的任何数据。
我已经尝试并成功地获得了不太复杂的 XML。但对于像下面这样的复杂问题则失败了。
<Response>
<Result>
<Result_Flag>2</Result_Flag>
<Result_Code>1000</Result_Code>
<Result_Message>Failure</Result_Message>
<Result_Description>Just for fun2</Result_Description>
</Result>
<Remits>
<OR>
<I_Number>40002829</I_Number>
<OrderNumber>agdfsg</OrderNumber>
<Agents>
<number>y</number>
<Agent>
<name>a</name>
<id>1</id>
<phone>
<number>9424648525</number>
<network>AIRTEL1</network>
</phone>
<phone>
<number>9424648525</number>
<network>AIRTEL1</network>
</phone>
</Agent>
<Agent>
....similar data...
</Agent>
</Agents>
</OR>
<OR>
<I_Number>40004213</I_Number>
<OrderNumber>fgrtey</OrderNumber>
<Agents>
<number>z</number>
<Agent>
<name>c</name>
<id>2</id>
<phone>
<number>9424645555</number>
<network>AIRCEL1</network>
</phone>
<phone>
<number>9424645555</number>
<network>AIRCEL2</network>
</phone>
<I_Number>40002829</I_Number>
</Agent>
<Agent>
....similar data...
</Agent>
</Agents>
</OR>
</Remits>
</Response>
在上面的 XML 数组元素是 OR,Agent,phone
这里是各自的bean...
public class SampleBean {
private String responseCode;
private String responseMessage;
private ArrayList<OR> records;
private String txnId;
}
public class OR{
private String txnId;
private String orderNumber;
private String numberOfAgents;
private ArrayList<Agent> otherAgents;
}
public class Agent {
private String agentName;
private String agentId;
private ArrayList<Phone> agentPhoneDetails;
}
public class Phone {
private String agentPhoneNumber;
private String agentPhoneNetwork;
}
我试过使用反射但未能实现。希望有人会尝试过这个...如果您知道任何此类实现,请提供帮助。
注意:不使用 JAXB
最佳答案
我认为您可以使用 xstream,这是一个将 xml 数据转换为 java 类和其他方式的库。使用起来非常简单。
http://x-stream.github.io/tutorial.html这里有一个教程。
我已经使用了更复杂的结构并且工作正常。
关于java - 使用反射(不是 JAXB)将 XML 转换为现有的 Java Bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42016842/