<?xml version="1.0" encoding="UTF-8"?>
<xml>
<ToUserName>toUser</ToUserName>
<FromUserName>fromUser</FromUserName>
<CreateTime>1348831860</CreateTime>
<MsgType>text</MsgType>
<Content>this is a test</Content>
<MsgId>1234567890123456</MsgId>
</xml>
上面文件名字 ax.xml
WxMessage 类
package sys.cdsoft.entity;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name="xml") //规定根节点信息 如果不指定 则是类名小写
@XmlAccessorType(XmlAccessType.FIELD) // 表示 根据属性名称映射 要求名称和xml数据的节点名称一样
public class WxMessage {
protected String FromUserName;
// 发送方帐号(一个OpenID)
protected String ToUserName;
// 消息创建时间
protected Long CreateTime;
//点击key或者跳转的页面
protected String EventKey;
//event事件
protected String Event;
//二维码
protected String Ticket;
/**
* 消息类型
* text 文本消息
* image 图片消息
* voice 语音消息
* video 视频消息
* music 音乐消息
*/
protected String MsgType;
// 消息id
protected Long MsgId;
// 文本内容
private String Content;
// 图片链接(由系统生成)
private String PicUrl;
// 图片消息媒体id,可以调用多媒体文件下载接口拉取数据
private String MediaId;
public String getFromUserName() {
return FromUserName;
}
public void setFromUserName(String fromUserName) {
FromUserName = fromUserName;
}
public String getToUserName() {
return ToUserName;
}
public void setToUserName(String toUserName) {
ToUserName = toUserName;
}
public Long getCreateTime() {
return CreateTime;
}
public void setCreateTime(Long createTime) {
CreateTime = createTime;
}
public String getMsgType() {
return MsgType;
}
public void setMsgType(String msgType) {
MsgType = msgType;
}
public Long getMsgId() {
return MsgId;
}
public void setMsgId(Long msgId) {
MsgId = msgId;
}
public String getContent() {
return Content;
}
public void setContent(String content) {
Content = content;
}
public String getPicUrl() {
return PicUrl;
}
public void setPicUrl(String picUrl) {
PicUrl = picUrl;
}
public String getMediaId() {
return MediaId;
}
public void setMediaId(String mediaId) {
MediaId = mediaId;
}
public String getEventKey() {
return EventKey;
}
public void setEventKey(String eventKey) {
EventKey = eventKey;
}
public String getEvent() {
return Event;
}
public void setEvent(String event) {
Event = event;
}
public String getTicket() {
return Ticket;
}
public void setTicket(String ticket) {
Ticket = ticket;
}
@Override
public String toString() {
return "WxMessage [FromUserName=" + FromUserName + ", ToUserName=" + ToUserName + ", CreateTime="
+ CreateTime + ", EventKey=" + EventKey + ", Event=" + Event + ", Ticket=" + Ticket + ", MsgType="
+ MsgType + ", MsgId=" + MsgId + ", Content=" + Content + ", PicUrl=" + PicUrl + ", MediaId="
+ MediaId + "]";
}
}
student 类
package sys.cdsoft.entity;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name="xml") //规定根节点信息 如果不指定 则是类名小写
@XmlAccessorType(XmlAccessType.FIELD) // 表示 根据属性名称映射 要求名称和xml数据的节点名称一样
public class Student {
private String Name;
private String Age;
//@XmlElementWrapper注解可以在原xml结点上再包装一层xml,但仅允许出现在数组或集合属性上。
@XmlElementWrapper(name="Gay")
private String[] Gender;
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
public String getAge() {
return Age;
}
public void setAge(String age) {
Age = age;
}
public String[] getGender() {
return Gender;
}
public void setGender(String[] gender) {
Gender = gender;
}
@Override
public String toString() {
return "Student [Name=" + Name + ", Age=" + Age + ", Gender=" + Gender + "]";
}
public Student(String name, String age, String[] gender) {
super();
Name = name;
Age = age;
Gender = gender;
}
public Student() {
super();
// TODO Auto-generated constructor stub
}
}
测试类
package sys.cdsoft.util;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.io.StringWriter;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import sys.cdsoft.entity.Student;
import sys.cdsoft.entity.WxMessage;
public class XmlToJava {
public static void main(String[] args) throws JAXBException, IOException {
InputStream resourceAsStream = XmlToJava.class.getClassLoader().getResourceAsStream("ax.xml");
WxMessage pojo = toPojo(WxMessage.class, resourceAsStream);
System.out.println(pojo);
Student s =new Student("mary", "22", new String[] {"女"});
String xml = toXml(s);
System.out.println(s);
}
public static <T>T toPojo(Class<T> pojo,InputStream in) throws JAXBException {
JAXBContext context = JAXBContext.newInstance(pojo);
Unmarshaller un = context.createUnmarshaller();
T tjo = (T)un.unmarshal(in);
return tjo;
}
public static <T>String toXml(T pojo) throws JAXBException{
JAXBContext context = JAXBContext.newInstance(pojo.getClass());
Marshaller ma =context.createMarshaller();
// 修改输出格式 默认在同一行输出 修改成这样 格式化输出
ma.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
// 修改输出编码
ma.setProperty(Marshaller.JAXB_ENCODING, "utf-8");
// 去掉头部信息
ma.setProperty(Marshaller.JAXB_FRAGMENT, true);
StringWriter writer = new StringWriter();
ma.marshal(pojo, writer);
String xml = writer.toString();
System.out.println(xml);
return xml;
}
}
输出结果