jaxbjava的简单介绍
今天给各位分享jaxbjava的知识,其中也会对进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、继承类怎么用jaxb解析获取父类的属性
- 2、关于jaxb用jaxb如何实现java对象和xml的转换
- 3、如何用jaxb xsd 生成java类
- 4、JAVA中怎么把XML文件中的数据通过JAXB技术保存到List集合里面去,为什么我的老报错找不到根节点?
- 5、java中利用jaxb转换xml的格式?
- 6、如何在java中使用JAXB返回Map格式返回参数不报错
继承类怎么用jaxb解析获取父类的属性
JAXB中的继承问题
问题
JAXB是我用过的java处理XML的方法中做方便的一个,在jaxb中如何使用类的集成关系有一个小小的需要注意的地方。看下面的两端XML。
XML
示例1:
a
b/b
c/c
a
XML示例2:
a
b/b
d/d
a
这两段XML的唯一差别就在c元素与d元素。为了生成这两个XML,有几种方案。
方案一
不利用类的继承来重用代码,写两套Java代码, 如:
@XmlRootElement(name = a)
public class A
{
B b;
C c:
}
@XmlRootElement(name = a)
public class A2
{
B b;
D d:
}
public class B {}
public class D {}
这一方案不是我们想要的,虽然可以解决问题,但是不能重用两个XML中共有的结构。
方案二
利用一个父类表示两个XML之间的共同的结构,用两个子类扩展这个父类,分别添加 C 和 D
元素。
代码如下:
@XmlRootElement(name = "a")
public class A {
B
b;
}
public class B {}
public class C {}
public class D
{}
public class E extends A {
C c;
}
public class F
extends A {
D d;
}
这一方案看似很直观,但是实践中却发现 E 和 F 却都只能生成 父类的
部分,如下的XML:
a
b/b
a
即使把 @XmlRootElement(name = “a”) 移到 E 和 F类上也行不通。
方案三
用一个类代表共同的结构,用一个父类代表C和D元素,在用两个类代表具体化的C和D类,如:
@XmlRootEelemnt(name =
"a")
public class A {
B b;
@XmlElements({
@XmlElement(name =
"c", type=C.class),
@XmlElement(name = "d", type=D.class)
})
E
e;
}
public class B {}
public class E {}
public class C extends
E {}
public class D extends E {}
这样做才最终达到目的。关键点就是@XmlElements的使用。
关于jaxb用jaxb如何实现java对象和xml的转换
既然你不想定义result这个类,那你service中的属性都可以不用定义了,直接使用XmlJavaTypeAdapter这样大的注解去marshal、unmarshal对象xml就行了。一般使用jaxb,如果属性为某个类库中定义的类,而需要转换为xml时,通过XmlJavaTypeAdapter来进行特殊处理。如插件开发中,元素属性为:org.eclipse.draw2d.geometry.Rectangle(矩形)时,通过XmlJavaTypeAdapter转换,如下所示: import javax.xml.bind.annotation.adapters.XmlAdapter; import org.eclipse.draw2d.geometry.Rectangle; public class LayoutXmlAdapter extends XmlAdapterString, Rectangle{@Overridepublic String marshal(Rectangle v) throws Exception{if(v == null) return ""; return v.x + "," + v.y + "," + v.width + "," + v.height;}@Overridepublic Rectangle unmarshal(String v) throws Exception{if(v != null v.trim().length() 0){String[] ps = v.split(","); if(ps.length ==4){int x = Integer.parseInt(ps[0]); int y = Integer.parseInt(ps[1]); int width = Integer.parseInt(ps[2]); int height = Integer.parseInt(ps[3]); return new Rectangle(x, y, width, height);}}return new Rectangle(0, 0, 0, 0);}}如果你非要不定义result类,直接转换为: 那你可以使用XmlJavaTypeAdapter注解。
如何用jaxb xsd 生成java类
#0. 准备要转换的xml文件,在Project视界中,右击这个xml文件,在弹出的菜单上选择“Generate XSD schema from XML File...”, 按默认设置生成xsd文件。
将xsd 文件移至#1配置段的configuration/sources/source指定的路径下.
JAVA中怎么把XML文件中的数据通过JAXB技术保存到List集合里面去,为什么我的老报错找不到根节点?
先看看你给出的路径对不对。File路径。接着看看你xml文件符不符合jaxb规范。你通过注解的方式配置的xml,那你还得看看xmlElement下的每一个uri和你java po类的uri对应不。也就是看字段的名字对应不,问题的关键 是处在这里,uri不对应。该为一致或是@XMLElement(name="uri")
java中利用jaxb转换xml的格式?
package com.jaxb.core;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Customer {
String name;
int age;
int id;
public String getName() {
return name;
}
@XmlElement
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
@XmlElement
public void setAge(int age) {
this.age = age;
}
public int getId() {
return id;
}
@XmlAttribute
public void setId(int id) {
this.id = id;
}
}
如何在java中使用JAXB返回Map格式返回参数不报错
在Java中,定义方法返回Map跟返回其他类型一样,只需要指定方法的返回类型为Map即可。
具体实现如下:
public MapString,Object doSomething(){...}
Map是Java中的一个键值对接口,开发中经常会用到。Map接口提供三种collection
视图,允许以键集、值集或键-值映射关系集的形式查看某个映射的内容。映射顺序 定义为迭代器在映射的 collection
视图上返回其元素的顺序。Map接口的实现子类有很多,其中较为常用的有HashMap, Hashtable,TreeMap,ConcurrentHashMap等。
jaxbjava的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于、jaxbjava的信息别忘了在本站进行查找喔。
发布于:2022-12-21,除非注明,否则均为
原创文章,转载请注明出处。