xmlmapper:jackson-dataformat-xml用于xml转换成java bean,从java bean 转换成xml,或称从json转换成xml或xml转换成json
pom:
<!-- Jackson -->
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.3.0</version>
</dependency>
例子:
HttpEntity entity = response.getEntity();
InputStream in = entity.getContent();
ObjectMapper xmlMapper = new XmlMapper();
xmlMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
T t = xmlMapper.readValue(in, returnType);
dom4j的xpath所需要的:
<!-- Parsing XML -->
<dependency>
<groupId>jaxen</groupId>
<artifactId>jaxen</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
例子:
package com.hp.vtms.vcloud;
import com.hp.vtms.util.XPathSupport;
import com.hp.vtms.vcloud.model.ConsoleParam;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.Serializable;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class VCloudResponseXpathSupport implements Serializable {
/**
*
*/
private static final long serialVersionUID = 7950382990606412397L;
private static final Logger _LOG = LoggerFactory.getLogger(VCloudResponseXpathSupport.class);
@Autowired
private XPathSupport xPathSupport;
public String parseVersionUrl(byte[] vCloudByteResponse, String vCloudVersion) {
String xPathString = "//t:VersionInfo[Version=1.5]";
String versionUrl = xPathSupport.getLoginUrl(vCloudByteResponse, xPathString);
return versionUrl;
}
public String parseLoginSessionToOrgUrl(byte[] vCloudByteResponse, String orgName) {
String xPathString = "//t:Link[@name='" + orgName + "']";
String orgUrl = xPathSupport.getUrl(vCloudByteResponse, xPathString);
return orgUrl;
}
public String parseOrgToVdcUrl(byte[] vCloudByteResponse) {
String xPathString = "//t:Link[@type='application/vnd.vmware.vcloud.vdc+xml']";
String versionUrl = xPathSupport.getUrl(vCloudByteResponse, xPathString);
return versionUrl;
}
public String parseVdcToVAppUrl(byte[] vCloudByteResponse, String vAppName) {
String xPathString = "//t:ResourceEntity[@name='" + vAppName + "']";
String vAppUrl = xPathSupport.getUrl(vCloudByteResponse, xPathString);
return vAppUrl;
}
public String getTaskUrlOfVmOrVapp(byte[] in) {
String xPathString = "/t:Task";
String vcdUrl = xPathSupport.getUrl(in, xPathString);
return vcdUrl;
}
public String getOrglistUrl(String orglist, byte[] sessionIn) {
String xPathString = "//t:Link[@type='application/vnd.vmware.vcloud.orgList+xml']";
String orgListUrl = xPathSupport.getUrl(sessionIn, xPathString);
return orgListUrl;
}
public String getOrgUrl(String orgName, byte[] OrgIn) {
String xPathString = "//t:Link[@name='" + orgName + "']";
String orgUrl = xPathSupport.getUrl(OrgIn, xPathString);
return orgUrl;
}
public String getVCdUrl(String vCdName, byte[] OrgIn) {
String xPathString = "//t:Link[@name='" + vCdName + "']";
String vcdUrl = xPathSupport.getUrl(OrgIn, xPathString);
return vcdUrl;
}
public String getVAppUrl(String vAppname, byte[] vCdIn) {
String xPathString = "//t:ResourceEntities/t:ResourceEntity[@name='" + vAppname + "']";
String VAPPUrl = xPathSupport.getUrl(vCdIn, xPathString);
return VAPPUrl;
}
public String getVmUrl(String vMname, byte[] vAppIn) {
String xPathString = "//t:Vm[@name='" + vMname + "']";
String VmUrl = xPathSupport.getUrl(vAppIn, xPathString);
return VmUrl;
}
public String getStatusOfAction(byte[] in) {
String xPathString = "/t:Task";
String vcdUrl = xPathSupport.getStatus(in, xPathString);
return vcdUrl;
}
public String getStatusOfVapp(byte[] in) {
String xPathString = "//t:Link";
String vcdUrl = xPathSupport.getStatus(in, xPathString);
return vcdUrl;
}
public String getStatusOfVm(byte[] in) {
String xPathString = "//t:Link";
String vcdUrl = xPathSupport.getStatus(in, xPathString);
return vcdUrl;
}
public String changeUrlToHttps(String url) {
if (!url.contains("https")) {
url = url.replace("http", "https");
}
return url;
}
public String parseVappToVappTaskStatus(byte[] vCloudByteResponse) {
String xPathString = "//t:Tasks/t:Task[@status='running']";
String taskUrl = xPathSupport.getUrl(vCloudByteResponse, xPathString);
return taskUrl;
}
public String parseVappToVmTaskStatus(String name, byte[] vCloudByteResponse) {
String xPathString = "//t:Children/t:Vm[@name='" + name + "']/t:Tasks/t:Task[@status='running']";
String taskUrl = xPathSupport.getUrl(vCloudByteResponse, xPathString);
return taskUrl;
}
public static byte[] input2byte(InputStream inStream) throws IOException {
ByteArrayOutputStream swapStream = new ByteArrayOutputStream();
byte[] buff = new byte[100];
int rc = 0;
while ((rc = inStream.read(buff, 0, 100)) > 0) {
swapStream.write(buff, 0, rc);
}
byte[] in2b = swapStream.toByteArray();
return in2b;
}
public ConsoleParam parseScreenTicket(byte[] screenTicketByteResponse) {
String xPathString = "/t:ScreenTicket";
String info = xPathSupport.getTicketInfo(screenTicketByteResponse, xPathString);
_LOG.info(info);
ConsoleParam param = new ConsoleParam();
if (info != null && !info.equals("")) {
String[] temp = info.replaceFirst("mks://", "").split("/");
String ticket = temp[1].split("\\?ticket\\=")[1];
String vmid = temp[1].split("\\?ticket\\=")[0];
String host = temp[0];
param.setHost(host);
param.setTicket(ticket);
param.setVmid(vmid);
}
return param;
}
public static void main(String[] args) throws IOException {
InputStream ins = Thread.currentThread().getContextClassLoader().getResourceAsStream("vAppTask.xml");
byte[] response = input2byte(ins);
VCloudResponseXpathSupport support = new VCloudResponseXpathSupport();
support.xPathSupport = new XPathSupport();
String parseVersionUrl = support.parseVersionUrl(response, "1.5");
_LOG.info(parseVersionUrl);
}
}
package com.hp.vtms.util;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import org.dom4j.*;
import org.dom4j.io.SAXReader;
import org.jaxen.NamespaceContext;
import org.jaxen.SimpleNamespaceContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
@Component
public class XPathSupport {
private static Logger _LOG = LoggerFactory.getLogger(XPathSupport.class);
public String getUrl(byte[] streambyte, String xPathString) {
DocumentFactory factory = DocumentFactory.getInstance();
SAXReader reader = new SAXReader(factory);
InputStream is = byte2Input(streambyte);
Document document = null;
try {
if (is != null) {
document = reader.read(is);
}
} catch (DocumentException e) {
e.printStackTrace();
}
Map<String, String> namespaceMap = new HashMap<String, String>();
namespaceMap.put("t", "http://www.vmware.com/vcloud/v1.5");
XPath xPath = null;
Node node = null;
NamespaceContext namespaceContext = new SimpleNamespaceContext(namespaceMap);
try {
try {
xPath = factory.createXPath(xPathString);
} catch (Exception e) {
e.getStackTrace();
}
xPath.setNamespaceContext(namespaceContext);
try {
node = xPath.selectSingleNode(document);
} catch (Exception e) {
e.getStackTrace();
}
} catch (Exception e) {
e.getStackTrace();
}
String result = "";
if (node != null) {
result = node.selectSingleNode("@href").getText();
}
return result;
}
public String getLoginUrl(byte[] streambyte, String xPathString) {
DocumentFactory factory = DocumentFactory.getInstance();
SAXReader reader = new SAXReader(factory);
InputStream is = byte2Input(streambyte);
Document document = null;
try {
if (is != null) {
document = reader.read(is);
}
} catch (DocumentException e) {
e.printStackTrace();
}
Map<String, String> namespaceMap = new HashMap<String, String>();
namespaceMap.put("t", "http://www.vmware.com/vcloud/versions");
XPath xPath = null;
Node node = null;
NamespaceContext namespaceContext = new SimpleNamespaceContext(namespaceMap);
try {
try {
xPath = factory.createXPath(xPathString);
} catch (Exception e) {
e.getStackTrace();
}
xPath.setNamespaceContext(namespaceContext);
try {
node = xPath.selectSingleNode(document);
} catch (Exception e) {
e.getStackTrace();
}
} catch (Exception e) {
e.getStackTrace();
}
String result = "";
if (node != null) {
result = node.selectSingleNode("@href").getText();
}
return result;
}
public String getStatus(byte[] streambyte, String xPathString) {
DocumentFactory factory = DocumentFactory.getInstance();
SAXReader reader = new SAXReader(factory);
InputStream is = byte2Input(streambyte);
Document document = null;
try {
if (is != null) {
document = reader.read(is);
}
} catch (DocumentException e) {
e.printStackTrace();
}
Map<String, String> namespaceMap = new HashMap<String, String>();
namespaceMap.put("t", "http://www.vmware.com/vcloud/v1.5");
XPath xPath = null;
Node node = null;
NamespaceContext namespaceContext = new SimpleNamespaceContext(namespaceMap);
try {
try {
xPath = factory.createXPath(xPathString);
} catch (Exception e) {
e.getStackTrace();
}
xPath.setNamespaceContext(namespaceContext);
try {
node = xPath.selectSingleNode(document);
} catch (Exception e) {
e.getStackTrace();
}
} catch (Exception e) {
e.getStackTrace();
}
String result = "";
if (node != null) {
result = node.selectSingleNode("@status").getText();
}
return result;
}
public String getTicketInfo(byte[] streambyte, String xPathString) {
DocumentFactory factory = DocumentFactory.getInstance();
SAXReader reader = new SAXReader(factory);
InputStream is = byte2Input(streambyte);
Document document = null;
try {
if (is != null) {
document = reader.read(is);
}
} catch (DocumentException e) {
e.printStackTrace();
}
Map<String, String> namespaceMap = new HashMap<String, String>();
namespaceMap.put("t", "http://www.vmware.com/vcloud/v1.5");
XPath xPath = null;
Node node = null;
NamespaceContext namespaceContext = new SimpleNamespaceContext(namespaceMap);
try {
try {
xPath = factory.createXPath(xPathString);
} catch (Exception e) {
e.getStackTrace();
}
xPath.setNamespaceContext(namespaceContext);
try {
node = xPath.selectSingleNode(document);
} catch (Exception e) {
e.getStackTrace();
}
} catch (Exception e) {
e.getStackTrace();
}
String result = "";
if (node != null) {
result = node.getText();
}
return result;
}
public InputStream byte2Input(byte[] buf) {
InputStream input = null;
if (buf != null) {
input = new ByteArrayInputStream(buf);
}
return input;
}
}