简单粗暴:实体类Object拼接XML以及相互转换
1、请求报文实体类拼接代码:
@XmlAccessorType(value=XmlAccessType.FIELD) //访问类型改为字段
@XmlType(propOrder={"idcardno","personnalname","countycode","countyname","communitycode","communityname"})
public class RCardinfo {
//身份证号
private String idcardno;
//人员姓名
private String personnalname;
// 所在区编码
private String countycode;
//所在区名称
private String countyname;
//所在社区编码
private String communitycode;
//所在社区名称
private String communityname;
public String getIdcardno() {
return idcardno;
}
public void setIdcardno(String idcardno) {
this.idcardno = idcardno;
}
public String getPersonnalname() {
return personnalname;
}
public void setPersonnalname(String personnalname) {
this.personnalname = personnalname;
}
public String getCountycode() {
return countycode;
}
public void setCountycode(String countycode) {
this.countycode = countycode;
}
public String getCountyname() {
return countyname;
}
public void setCountyname(String countyname) {
this.countyname = countyname;
}
public String getCommunitycode() {
return communitycode;
}
public void setCommunitycode(String communitycode) {
this.communitycode = communitycode;
}
public String getCommunityname() {
return communityname;
}
public void setCommunityname(String communityname) {
this.communityname = communityname;
}
@Override
public String toString() {
return "Cardinfo [communitycode=" + communitycode + ", communityname="
+ communityname + ", countycode=" + countycode
+ ", countyname=" + countyname + ", idcardno=" + idcardno
+ ", personnalname=" + personnalname + "]";
}
}
2、返回报文拼接成实体类:
@XmlAccessorType(value=XmlAccessType.FIELD) //访问类型改为字段
@XmlRootElement(name = "result") // XML文件中的根标识
@XmlType(propOrder={"resultinfo","errorinfo","cardinfo","payfeeinfo","payfeelist","payfeetotal"})
public class Backs {
private Bresultinfo resultinfo;
private Berrorinfo errorinfo;
private RCardinfo cardinfo;
private RPayfeeinfo payfeeinfo;
private RPayfeelist payfeelist;
private RPayfeetotal payfeetotal;
public Bresultinfo getResultinfo() {
return resultinfo;
}
public void setResultinfo(Bresultinfo resultinfo) {
this.resultinfo = resultinfo;
}
public Berrorinfo getErrorinfo() {
return errorinfo;
}
public void setErrorinfo(Berrorinfo errorinfo) {
this.errorinfo = errorinfo;
}
public RCardinfo getCardinfo() {
return cardinfo;
}
public void setCardinfo(RCardinfo cardinfo) {
this.cardinfo = cardinfo;
}
public RPayfeeinfo getPayfeeinfo() {
return payfeeinfo;
}
public void setPayfeeinfo(RPayfeeinfo payfeeinfo) {
this.payfeeinfo = payfeeinfo;
}
public RPayfeelist getPayfeelist() {
return payfeelist;
}
public void setPayfeelist(RPayfeelist payfeelist) {
this.payfeelist = payfeelist;
}
public RPayfeetotal getPayfeetotal() {
return payfeetotal;
}
public void setPayfeetotal(RPayfeetotal payfeetotal) {
this.payfeetotal = payfeetotal;
}
@Override
public String toString() {
return "Backs [cardinfo=" + cardinfo + ", errorinfo=" + errorinfo
+ ", payfeeinfo=" + payfeeinfo + ", payfeelist=" + payfeelist
+ ", payfeetotal=" + payfeetotal + ", resultinfo=" + resultinfo
+ "]";
}
}
3、具体的请求拼装:
public class RequestxxxService {
public static final String path = "192.168.000.000:0000";
public static String selectPayFee(String idcardno,String bankcode,String insurancecode){
String url = "http://"+path+"/xxx.do";
String res = "";
//拼接访问XML
Requests re = new Requests();
RCardinfo cardinfo = new RCardinfo();
cardinfo.setIdcardno(idcardno);
re.setCardinfo(cardinfo);
RPayfeeinfo payfeeinfo = new RPayfeeinfo();
payfeeinfo.setBankcode(bankcode);
payfeeinfo.setInsurancecode(insurancecode);
re.setPayfeeinfo(payfeeinfo);
String xml = RXMLUtil.objToXml(re);
xml = xml.replaceAll("encoding=\"UTF-8\" standalone=\"yes\"?", "encoding=\"UTF-8\"");
System.out.println("原始串:"+xml);
try {
String rs = HttpRequest.sendPost("BK01", url, xmlbyte);
/*String rs = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><result><resultinfo><resultcode>0</resultcode><resultmessage>操作正确完成。</resultmessage>"+
"</resultinfo><errorinfo><errorcode>-20001</errorcode><errormessage>查无此人。</errormessage></errorinfo>" +
"<errorinfo><errorcode>-20002</errorcode><errormessage>查无此人2。</errormessage></errorinfo>"+
"<cardinfo><idcardno>130101199901010001</idcardno><personnalname>测试人员</personnalname><countycode>01</countycode>+" +
"<countyname>XXX区</countyname><communitycode>01</communitycode><communityname>XXX社区</communityname></cardinfo>"+
"<payfeeinfo><paidregserialno>1000000000000000</paidregserialno><payamount>200</payamount>" +
"<paypermemo>2008年度xxxxxxxx</paypermemo></payfeeinfo></result>";*/
System.out.println("返回:"+rs);
Backs back = (Backs) RXMLUtil.XmlStrToObject(Backs.class, rs);
System.out.println(back.toString());
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return res;
}
public static void main(String[] args) {//
selectPayFee("","90","24");
}
公共方法:
//Object转Xml
public static String objToXml(Object obj) {
// 创建输出流
StringWriter sw = new StringWriter();
try {
// 利用jdk中自带的转换类实现
JAXBContext context = JAXBContext.newInstance(obj.getClass());
Marshaller marshaller = context.createMarshaller();
// 格式化xml输出的格式
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,
Boolean.TRUE);
// 将对象转换成输出流形式的xml
marshaller.marshal(obj, sw);
} catch (JAXBException e) {
e.printStackTrace();
}
return sw.toString();
}
//Xml转Object
public static Object XmlStrToObject(Class clazz, String xmlStr) {
Object xmlObject = null;
try {
JAXBContext context = JAXBContext.newInstance(clazz);
// 进行将Xml转成对象的核心接口
Unmarshaller unmarshaller = context.createUnmarshaller();
StringReader sr = new StringReader(xmlStr);
xmlObject = unmarshaller.unmarshal(sr);
} catch (JAXBException e) {
e.printStackTrace();
}
return xmlObject;
}