JAVA-欧盟VAT有效性校验
组装访问主体
private String getMessage(VatTaxationCustoms vatTaxationCustoms) {
StringBuffer soapRequestData = new StringBuffer("");
soapRequestData.append("<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:urn=\"urn:ec.europa.eu:taxud:vies:services:checkVat:types\">");
soapRequestData.append("<soapenv:Body>");
soapRequestData.append("<urn:checkVatApprox>");
soapRequestData.append("<urn:countryCode>" + vatTaxationCustoms.getCountryCode() + "</urn:countryCode>");
soapRequestData.append("<urn:vatNumber>" + vatTaxationCustoms.getVatNumber() + "</urn:vatNumber>");
soapRequestData.append("</urn:checkVatApprox>");
soapRequestData.append("</soapenv:Body>");
soapRequestData.append("</soapenv:Envelope>");
logger.info("请求数据nstcXml=" + soapRequestData);
return soapRequestData.toString();
}
调用服务
private Map<String, Object> getStringObjectMap(String message,String url) {
MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
headers.add("Content-Type", "text/xml;charset=UTF-8");
headers.add("Content-Length", Integer.toString(message.getBytes().length));
headers.add("Content-Language", "en-US");
headers.add("Host", host);
headers.add("Connection", "Keep-Alive");
HttpEntity<String> httpEntity = new HttpEntity<>(message, headers);
ResponseEntity<String> response = restTemplate.postForEntity(url, httpEntity, String.class);
String body = response.getBody();
// 获取根节点
logger.info("请求数据nstcXml=" + body);
Map<String, Object> map = new HashMap<>();
xmltoMap(body, map);
return map;
}
注:url:http://ec.europa.eu/taxation_customs/vies/services/checkVatService
解析
private Map<String, Object> xmltoMap(String xml, Map<String, Object> map) {
Document document = null;
try {
document = DocumentHelper.parseText(xml);
} catch (DocumentException e) {
logger.error("XML格式解析出错", e);
}
//获取根节点元素对象
Element root = document.getRootElement();
List<Element> elements = root.elements();
if (elements.isEmpty()) {
//该元素无子元素,获取元素的值
String name = root.getName();
String nodeValue = root.getTextTrim();
map.put(name, nodeValue);
} else {
extracted(elements, map);
}
return map;
}
private void extracted(List<Element> elements, Map<String, Object> map) {
for (Element e : elements) {
List<Element> elements1 = e.elements();
if (elements1.isEmpty()) {
String name = e.getName();
String nodeValue = e.getTextTrim();
map.put(name, nodeValue);
continue;
} else {
//递归
extracted(elements1, map);
}
}
}
总结:整体不难