Java jaxb可以解析系统属性吗?

Java jaxb可以解析系统属性吗?,java,xml,properties,jaxb,unmarshalling,Java,Xml,Properties,Jaxb,Unmarshalling,我们使用JAXB用XML配置对象。我想知道是否有一种方法可以让JAXB解析系统属性。例如,如果我有一个具有属性颜色的bean,我希望能够做到: <mybean color="${mycolor.in.data.property}" /> 但如果我这样做,JAXB将创建mybean对象,颜色将等于字符串: mycolor.in.data.property JAXB是否有spring中的任何等价物,以便解析我的系统属性?一个XmlAdapter是一种机制,允许您在编组/解编程序期间

我们使用JAXB用XML配置对象。我想知道是否有一种方法可以让JAXB解析系统属性。例如,如果我有一个具有属性颜色的bean,我希望能够做到:

<mybean color="${mycolor.in.data.property}" />

但如果我这样做,JAXB将创建mybean对象,颜色将等于字符串:
mycolor.in.data.property


JAXB是否有spring中的任何等价物,以便解析我的系统属性?

一个
XmlAdapter
是一种机制,允许您在编组/解编程序期间将一个对象转换为另一个对象。您可以编写一个
XmlAdapter
,将系统属性名称转换为实际值

import javax.xml.bind.annotation.adapters.XmlAdapter;
公共类ColorAdapter扩展了XmlAdapter{
@凌驾
公共字符串解组(字符串v)引发异常{
返回系统.getProperty(v);
}
@凌驾
公共字符串封送处理程序(字符串v)引发异常{
返回v;
}
}
然后使用
@XmlJavaTypeAdapter
注释为属性配置
XmlAdapter

@XmlJavaTypeAdapter(ColorAdapter.class)
公共字符串getColor(){
返回颜色;
}
了解更多信息


更新


好的,谢谢。实际上我没有访问该类的权限,因为这是一部分 一个导入的库。因此,我更希望找到一种配置的方法 这直接存在于xml文件中,但可能不可能

如果不能修改该类,则可以使用
StreamReaderDelegate
修改XML输入。有几种方法可以处理文本/字符数据,因此您可能需要进行实验,以确保覆盖了最适合您使用的JAXB实现的方法

import javax.xml.bind.*;
import javax.xml.stream.*;
import javax.xml.stream.util.StreamReaderDelegate;
import javax.xml.transform.stream.StreamSource;

public class Demo {

    public static void main(String[] args) throws Exception {

        JAXBContext jc = JAXBContext.newInstance(MyBean.class);

        XMLInputFactory xif = XMLInputFactory.newFactory();
        StreamSource source = new StreamSource("input.xml");
        XMLStreamReader xsr = xif.createXMLStreamReader(source);
        xsr = new StreamReaderDelegate(xsr) {

            @Override
            public String getText() {
                String text = super.getText();
                if(text.contains("${")) {
                    text = System.getProperty(text);
                }
                return text;
            }

        };

        Unmarshaller unmarshaller = jc.createUnmarshaller();
        unmarshaller.unmarshal(xsr);
    }

}

好的,谢谢。实际上,我没有访问该类的权限,因为这是导入库的一部分。所以我更想在xml文件中直接配置它,但这可能是不可能的。@Melanie-如果您使用EclipseLink MOXy作为JAXB提供程序,那么您可以将元数据表示为xml文档(请参阅)。或者,我更新了我的答案,告诉您如何使用StAX
StreamReaderDelegate
来调整XML输入。