首页 > 编程知识 正文

怎么在java中加入xml文件,java jar包中的xml解析

时间:2023-05-05 06:07:14 阅读:213897 作者:4240

I've got a set of JAXB generated classes and some of the classes have setter methods which accepts

"Object" as the parameter. For example:

@XmlAccessorType(XmlAccessType.FIELD)

@XmlType(name="Car", propOrder = {

"defaultCar"

}

public class Car {

@XmlElement(name = "DefaultCar")

protected Object defaultcar;

public void setDefaultCar(Object value) {

this.defaultCar = value;

}

After I've created instances of these classes in my code, I call the setter methods passing in the required value. Although the method's parameter is Object, the values are most likely to be strings (I've got no control over how it is defined). However, to keep things consistent, I cast the string to Object so that it matches the method's parameter type. The code looks something like this:

Object value = "Old Banger";

method.invoke(aCar, value);

When I marshall the Java objects, I get the following within the resulting XML, just in front of the value of the string:

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string"

I've read somewhere about mismatching data types between the method's parameter type and what has been passed to it. In my case the method parameter being "Object" but I'm passing in a string to it (although I've cast it to Object). I've also seen this post and it looks similar to my problem:

However, it doesn't help me overcome my problem. Is there a way to remove these references to xmlns:xsi and xsi:type?

Thx

JAXB exports xsi:type if your data specifies other type than your model. In your case, you set a string, but the field is Object. So your data has a different type than your model. The behaviour is correct.

How you can fix that. You have align the type of the property with the type of the data. There's quite a number of ways to achieve that:

Make it String, why is it an Object in the first place?

Update: You can use jaxb:javaType binding for that.

Ùse @XmlElementRef/@XmlMixed combo instead.

However, to keep things consistent, I cast the string to Object so

that it matches the method's parameter type.

What do you think happens to the string when you cast it to object? :)

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。