为了复现线上的一个bug,因为生产,测试环境原因,需要把webservice的xml数据转成对象调试.
XML数据( 已脱敏 ):
<getExternalOrdersResponse>
<externalOrders>
<externalOrder>
<id>123456</id>
<companyCode>test</companyCode>
<traveller>
<userId>A8B76C54D3E98765F432GHIJKL1M987654</userId>
<blueskyId>135790</blueskyId>
<userCerts>
<UserCert>
<id>234568</id>
</UserCert>
</userCerts>
<userRoles>
<UserRole>
<id>234567</id>
</UserRole>
</userRoles>
</traveller>
<orderRuleDetails>
<companyCode>test</companyCode>
<domAirOrders>
<domAirOrder>
<date>2018-11-20</date>
</domAirOrder>
<domAirOrder>
<date>2018-11-20</date>
</domAirOrder>
</domAirOrders>
</orderRuleDetails>
</externalOrder>
</externalOrders>
</getExternalOrdersResponse>
DTO:
import java.util.List;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class GetExternalOrdersResponse
{
@XmlElementWrapper(name="externalOrders")
@XmlElement(name="externalOrder")
protected List<ExternalOrderDto> externalOrders;
set()
get()
}
public class ExternalOrderDto
{
protected Long id;
protected String companyCode;
protected UserBasicDto traveller;
protected OrderRuleDetailsParam orderRuleDetails;
set()
get()
}
import java.util.Date;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
import org.apache.commons.lang3.StringUtils;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement
@XmlType(propOrder={"userId", "blueskyId", "userCerts", "userRoles",})
public class UserBasicDto
{
protected String userId;
protected String blueskyId;
@XmlElementWrapper(name="userCerts")
@XmlElement(name="UserCert")
protected List<UserCertDto> userCerts;
@XmlElementWrapper(name="userRoles")
@XmlElement(name="UserRole")
protected List<UserRoleDto> userRoles;
set()
get()
}
import java.util.Date;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
@XmlRootElement
@XmlType(propOrder={"id"})
public class UserCertDto
{
private Long id;
set()
get()
}
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
@XmlRootElement
@XmlType(propOrder={"id"})
public class UserRoleDto
{
private Long id;
set()
get()
}
import java.util.List;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class OrderRuleDetailsParam
{
protected String companyCode;
@XmlElementWrapper(name="domAirOrders")
@XmlElement(name="domAirOrder")
protected List<DomAirOrderRuleDto> domAirOrders;
set()
get()
}
public class DomAirOrderRuleDto
{
protected String date;
set()
get()
}
工具类:
import java.io.StringReader;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
public class XMLUtil {
@SuppressWarnings("unchecked")
/**
* 将String类型的xml转换成对象
*/
public static Object convertXmlStrToObject(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;
}
}
测试步骤省略,想必你一定知道怎么测试了.