xmlmapper和xpath的使用

来源:互联网 发布:java 过滤器返回json 编辑:程序博客网 时间:2024/05/17 08:42

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;
}
}

0 0
原创粉丝点击