java - 使用反射(不是 JAXB)将 XML 转换为现有的 Java Bean

标签 java xml reflection

题意同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/

相关文章:

检测到 JavaFX 未完成的资源锁

java - 我可以在多个环境中使用单个 war 文件吗?我是不是该?

xml.Unmarshall 多根 XML 在 Go

c# - 在 C# 中引用属性本身。反射?通用的?类型?

reflection - Scala:如何动态实例化对象并使用反射调用方法?

python - 如何以编程方式更改 python 装饰器中函数的 argspec?

java - X509证书获取PublicKey

java - 使用Java从十六进制中提取64位数字

java - 如何在 Android Studio 中引用界面组件

Java - 根据节点的属性编辑节点元素