XStream简单使用之Xml与实体间互转

3 篇文章 0 订阅

应用场景:通过http接口发送xml报文和接收xml报文,针对不同的接口报文xml对应不同的JavaBean,更加适合商业业务的扩展。

准备报文XML:

<?xml version="1.0" encoding="GBK"?>
<Package>
  <Header>
    <UUID>94d14276-9eed-45ee-9fc5-5cc079ada6e5</UUID>
    <UserName>Username</UserName>
    <PassWord>Password</PassWord>
    <InfoSource>WX</InfoSource>
    <SendTime></SendTime>
    <RequestType>xFire</RequestType>
  </Header>
  <Request>
    <bankserialno>1234567890</bankserialno>
    <certificatetype>1</certificatetype>
    <certificateno>110101199606020013</certificateno>
    <depositacct>111111111111111111</depositacct>
    <depositacctname>张三</depositacctname>
    <contractno>222222222</contractno>
    <applicationamount>100</applicationamount>
  </Request>
</Package>

XML转化工具类:XstreamUtil.java

package xstream.util;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;

public class XstreamUtil {
    public static final String xmlHead = "<?xml version=\"1.0\" encoding=\"GBK\"?>\n";
    public static final XStream xStream  = new XStream();
    static{
        xStream.autodetectAnnotations(true);
    }
    /**
     * 把实体类转换为xml字符串
     * 
     * @param obj
     * @return
     */
    public static String toXml(Object obj) {
        return xmlHead + xStream.toXML(obj);
    }
    /**
     * 把xml文件转换为实体类
     * 
     * @param <T>
     * @param xmlStr
     * @param cls
     * @return
     */
    @SuppressWarnings("unchecked")
    public static <T> T toBean(String xmlStr, Class<T> cls) {
        XStream xs = new XStream(new DomDriver());
        xs.processAnnotations(cls);
        xs.autodetectAnnotations(true);
        return (T) xs.fromXML(xmlStr);
    }
}

针对每种报文都有共同的Header,不同的Request,可以提取公共实体类:RequestPackage.java

package xstream.dto;
import xstream.util.XstreamUtil;
import com.thoughtworks.xstream.annotations.XStreamAlias;

public class RequestPackage {
    private RequestHeader Header = new RequestHeader();
    // 把本类转为xml
    public String toXml() {
        return XstreamUtil.toXml(this);
    }
    @XStreamAlias("Header")
    public static class RequestHeader {
        private String UUID = java.util.UUID.randomUUID().toString();
        private String UserName = "UserName";
        private String PassWord = "PassWord";
        private String InfoSource = "WX";
        private String RequestType; // 请求服务类型
        public String getRequestType() {
            return RequestType;
        }
        public void setRequestType(String requestType) {
            RequestType = requestType;
        }
    }
    public RequestHeader getHeader() {
        return Header;
    }
    public void setHeader(RequestHeader header) {
        Header = header;
    }
}

业务逻辑实体类:BusinessObjectRequest.java

package xstream.dto;
import com.thoughtworks.xstream.annotations.XStreamAlias;

@XStreamAlias("Package")
public class BusinessObjectRequest extends RequestPackage {
    private Request Request = new Request();
    @XStreamAlias("Request")
    public static class Request {
        private String bankserialno;
        private String certificatetype;
        private String certificateno;
        private String depositacct;
        private String depositacctname;
        private String contractno;
        private String applicationamount;
        // getters and setters
    }
    // getters and setters
}

测试类:Client.java

package xstream.client;
import xstream.dto.BusinessObjectRequest;

public class Client {
    public static void main(String[] args) {
    	BusinessObjectRequest request = new BusinessObjectRequest();
		request.getHeader().setRequestType("xFire");
		request.getRequest().setBankserialno("1234567890");
		request.getRequest().setCertificatetype("1");
		request.getRequest().setCertificateno("110101199606020013");
		request.getRequest().setDepositacct("111111111111111111");
		request.getRequest().setDepositacctname("张三");
		request.getRequest().setContractno("222222222");
		request.getRequest().setApplicationamount("100");
		String xml = request.toXml();
		System.out.println(xml);
	}
}

接口返回XML:

<?xml version="1.0" encoding="GBK"?>
<Package>
    <Header>
        <RequestType>xFire</RequestType>
        <UUID>846c3feb-15e0-4d03-9fec-3ed47e46073e</UUID>
        <ResponseCode>Y</ResponseCode>
    </Header>
    <Response>
        <Status>0</Status>
        <Msg>OK</Msg>
        <ContInfo>
            <bankserialno>1234567890</bankserialno>
            <certificatetype>1</certificatetype>
            <certificateno>110101199606020013</certificateno>
            <depositacct>111111111111111111</depositacct>
            <depositacctname>张三</depositacctname>
            <contractno>222222222</contractno>
            <applicationamount>100</applicationamount>
        </ContInfo>
    </Response>
</Package>

 公共头部:ResponsePackage.java

package xstream.dto;
import com.thoughtworks.xstream.annotations.XStreamAlias;

public class ResponsePackage {
    private ResponseHead Header;
    @XStreamAlias("Header")
    public class ResponseHead {
        private String RequestType;
        private String UUID;
        private String ResponseCode;
        @Override
        public String toString() {
            return "ResponseHead=[RequestType=" + RequestType + ", UUID="
                    + UUID + ", ResponseCode=" + ResponseCode + "]";
        }
    }
    @Override
    public String toString() {
        return "[Header=" + Header + "]";
    }
}

返回Response: BusinessObjectResponse.java

package xstream.dto;
import com.thoughtworks.xstream.annotations.XStreamAlias;

@XStreamAlias("Package")
public class BusinessObjectResponse extends ResponsePackage {
    public Response Response;
    @XStreamAlias("Response")
    public class Response {
        private String Status;
        private String Msg;
        private ContInfo ContInfo;
        @Override
        public String toString() {
            return "Response [Status=" + Status + ", Msg=" + Msg
                    + "," + ContInfo + "]";
        }
    }
    @XStreamAlias("ContInfo")
    public class ContInfo {
        private String bankserialno;
        private String certificatetype;
        private String certificateno;
        private String depositacct;
        private String depositacctname;
        private String contractno;
        private String applicationamount;
        @Override
        public String toString() {
            return "ContInfo=[bankserialno=" + bankserialno
                    + ", certificatetype=" + certificatetype
                    + ", certificateno=" + certificateno + ", depositacct="
                    + depositacct + ", depositacctname=" + depositacctname
                    + ", contractno=" + contractno + ", applicationamount="
                    + applicationamount + "]";
        }
    }
    @Override
    public String toString() {
        return "[" + Response + super.toString() + "]";
    }
}

测试类:Client1.java 

package xstream.client;
import xstream.dto.BusinessObjectResponse;
import xstream.util.XstreamUtil;

public class Client1 {
    public static void main(String[] args) {
        String str = "<?xml version=\"1.0\" encoding=\"GBK\"?>\n" +
        "<Package>\n" +
        "\t<Header>\n" +
        "\t\t<RequestType>xFire</RequestType>\n" +
        "\t\t<UUID>846c3feb-15e0-4d03-9fec-3ed47e46073e</UUID>\n" +
        "\t\t<ResponseCode>Y</ResponseCode>\n" +
        "\t</Header>\n" +
        "\t<Response>\n" +
        "\t    <Status>0</Status>\n" +
        "\t    <Msg>OK</Msg>\n" +
        "\t\t<ContInfo>\n" +
        "\t\t\t<bankserialno>1234567890</bankserialno>\n" +
        "\t\t\t<certificatetype>1</certificatetype>\n" +
        "\t\t\t<certificateno>110101199606020013</certificateno>\n" +
        "\t\t\t<depositacct>111111111111111111</depositacct>\n" +
        "\t\t\t<depositacctname>张三</depositacctname>\n" +
        "\t\t\t<contractno>222222222</contractno>\n" +
        "\t\t\t<applicationamount>100</applicationamount>\n" +
        "\t\t</ContInfo>\n" +
        "\t</Response>\n" +
        "</Package>";
        BusinessObjectResponse response = XstreamUtil.toBean(str, BusinessObjectResponse.class);
        System.out.println(response);
    }
}

 引用的jar包:xstream-[version].jar、xmlpull-[version].jar

 

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值