jaxb解析xml在WebService中的使用,以及Date类型的解决方案

1.前言


  以前在学校学习的时候,没有接触过WebService。如今开始实习之后,由于项目需要,要对接别人程序提供出来的接口,要用到WebService。而在使用WebService的时候,我这里入参和出参都需要是xml。而为了封装信息和以后维护方便等理由,这里很自然而然的,就需要用到jaxb技术,将一个对象转换为xml以及将xml转换为一个对象。(其实说白了,就像是使用gson解析json数据一样,只不过gson使用起来比较方便)。这里只介绍一下,在实际应用中如何实现对象与xml之间的相互转换,并不述说WebService。

2.入参


  首先,当我调用WebService发起请求时,入参要求我传入的是xml格式的,现在,先让我们看一个入参的例子:

<Request>
    <PatientId>3869622</PatientId>
    <VisitId>12097107</VisitId>
</Request>

  xml的格式很简单,相信稍微学过一下xml的,一看就懂了。说老实话,如果要我们自己用字符串拼接这么一串xml格式的入参,其实也是不难的。

String inXml = "<Request><PatientId>" + PatientId + "</PatientId><VisitId>" + VisitId + "</VisitId></Request>";
但是,不难发现,这样的话,当这个入参内容很多的时候,这个字符串就会变得很长,而且还需要有很多变量去组拼字符串,可维护性是非常低的。因为,我们需要有一个类去封装数据,然后再真正使用的时候,将这个类的对象,通过jaxb转换为xml。

下面让我们看看这个类的样子:

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "Request")
public class GetBillRateRequest {

	private String patientId;
	private String visitId;

	@XmlElement(name = "PatientId")
	public String getPatientId() {
		return patientId;
	}

	public void setPatientId(String patientId) {
		this.patientId = patientId;
	}

	@XmlElement(name = "VisitId")
	public String getVisitId() {
		return visitId;
	}

	public void setVisitId(String visitId) {
		this.visitId = visitId;
	}

}

这个类中只有两个成员变量,刚好对应上面的字符串。

@XmlRootElement(name = "Request")定义最外层的节点,也就是根节点的名称。

<Request>
    ……
</Request>

如果对名字没有要求的话,直接@XmlRootElement()这样写就可以了。

<getBillRateRequest>
……
</getBillRateRequest>

但是,因为项目的要求,我这边每一个WebService的请求,都必须是用<Request>做最外层的节点,包括里面的内容的,这么多种用于封装信息的类,不可能每一个类的类名都叫Request吧?而且你仔细观察的话,GetBillRateRequest这样的类名,转换后会变成<getBillRateRequest>,也就是说哪怕类名是Request也是不符合要求的。所以,这里我采用了@XmlRootElement(name = "Request")。

这里复制一下官方文档的内容,罗列一下这个注解的其他属性

Modifier and Type
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值