简体   繁体   English

用于指定Java类并返回对象的XML文件

[英]XML file to Specify Java class and return object

I have a Maven & Spring based Java web application 我有一个基于Maven和Spring的Java Web应用程序

In src/main/resources, I have one XML file. 在src / main / resources中,我有一个XML文件。

sourceconfig.xml sourceconfig.xml

<?xml version="1.0" encoding="UTF-8"?>
<sourceConfig area="Defects">
    <adapterObject>jAdapter</adapterObject>
    <resultObject>jsonObject</resultObject>
</sourceConfig>

In I have a POJO for this SourceConfig.java 在此SourceConfig.java中有一个POJO

@XmlRootElement
public class SourceConfig {
    String area;
    String adapterObject;
    String resultObject;

    public String getArea() {
        return area;
    }

    @XmlAttribute
    public void setArea(String area) {
        this.area = area;
    }

    public String getAdapterObject() {
        return adapterObject;
    }

    @XmlElement
    public void setAdapterObject(String adapterObject) {
        this.adapterObject = adapterObject;
    }

    public String getResultObject() {
        return resultObject;
    }

    @XmlElement
    public void setResultObject(String resultObject) {
        this.resultObject = resultObject;
    }
}

I am able to parse the xml to object. 我能够将xml解析为对象。

public class SourceAdapterConfig {

    public SourceConfig getConfigObject() throws JAXBException, IOException {
        JAXBContext jaxbContext = JAXBContext.newInstance(SourceConfig.class);
        Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();

        Resource resource=new ClassPathResource("sourceconfig.xml");
        File file=resource.getFile();

        SourceConfig sourceConfig = (SourceConfig) jaxbUnmarshaller.unmarshal(file);
        return sourceConfig;
    }
}

It is working fine. 一切正常。

But all are String. 但是所有都是String。 Some I want as object. 我想要一些作为对象。 For example, In XML I have mentioned <resultObject>jsonObject</resultObject> 例如,在XML中,我提到了<resultObject>jsonObject</resultObject>

I have a class com.myapp.config.JsonObject.java 我有一个com.myapp.config.JsonObject.java

So, instead of <resultObject>jsonObject</resultObject> If I mention class like this 因此,如果我没有提到这样的类,请使用<resultObject>jsonObject</resultObject>

<resultObject class="com.myapp.config.JsonObject">jsonObject</resultObject> 

or some other way to mention class, I should be able to get a JsonObject object in my SourceConfig How can I do that? 或以其他方式提及课程,我应该可以在SourceConfig中获取JsonObject对象。该怎么办?

use java reflection 使用java反射

Class theClass = Class.forName("com.example.Test");
Test testObject = (Test)theClass.newInstance();

This will create an instance of com.example.Test. 这将创建com.example.Test的实例。

In your context, 根据您的情况,

public class SourceAdapterConfig {

    private SourceConfig config;

    private SourceConfig getConfigObject() throws JAXBException, IOException {
        JAXBContext jaxbContext = JAXBContext.newInstance(SourceConfig.class);
        Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();

        Resource resource=new ClassPathResource("sourceconfig.xml");
        File file=resource.getFile();

        SourceConfig sourceConfig = (SourceConfig) jaxbUnmarshaller.unmarshal(file);
        return sourceConfig;
    }

    public SourceAdapterConfig(){
        config = getConfigObject();
    }

    public Object getAdapterObject(){
        String adapterClassName = config.getAdapterObject();
        Class theClass = Class.forName(adapterClassName);
        return theClass.newInstance();
 }
}

Usage: 用法:

SourceAdapterConfig config = new SourceAdapterConfig();
Object adapterObject = config.getAdapterObject();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM