概述:
最近在弄微信,大家都知道微信是CDATA数据转换,这个挺头疼的,在网上找的EclipseLink很好用。
这里采用maven工程
1、第一步引用jar包
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>org.eclipse.persistence.moxy</artifactId>
<version>2.7.0-RC1</version>
</dependency>
2、写一个普通java bean
import javax.xml.bind.annotation.XmlRootElement;
import org.eclipse.persistence.oxm.annotations.XmlCDATA;
@XmlRootElement(name="c")
public class Customer {
private String bio;
@XmlCDATA
public String getBio() {
return bio;
}
public void setBio(String bio) {
this.bio = bio;
}
}
注意注解 @XmlCDATA就是生成cdata结构的数据
3、添加一个属性文件(替换默认java的工厂类)
文件结构
名称:jaxb.properties
内容:
javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory
4、测试用例
import java.io.StringReader;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Customer.class);
Unmarshaller u = jc.createUnmarshaller();
String xml = "<c><bio><![CDATA[O(∩_∩)O哈哈哈~]]></bio></c>";
Customer c = (Customer) u.unmarshal(new StringReader(xml));
System.out.println("Unmarshal: " + c.getBio());
Marshaller m = jc.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
m.setProperty(Marshaller.JAXB_FRAGMENT, true);
Customer cs = new Customer();
cs.setBio("122323232");
System.out.print("Marshal: ");
m.marshal(cs, System.out);
}
}
5、日志
Unmarshal: O(∩_∩)O哈哈哈~
Marshal: <c>
<bio><![CDATA[122323232]]></bio>
</c>
注意:这属性文件必须要添加,不然没有效果