All Downloads are FREE. Search and download functionalities are using the official Maven repository.
Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
com.centit.support.xml.XMLObject Maven / Gradle / Ivy
package com.centit.support.xml;
import com.centit.support.algorithm.*;
import org.apache.commons.lang3.StringUtils;
import org.dom4j.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.util.*;
/**
* Created by codefan on 17-6-30.
*/
@SuppressWarnings("unused")
public abstract class XMLObject {
private XMLObject() {
throw new IllegalAccessError("Utility class");
}
protected static final Logger logger = LoggerFactory.getLogger(XMLObject.class);
public static Element createXMLElement(String elementName , String valueType, Object value){
Element element = DocumentHelper.createElement(elementName);
element.addAttribute("type",valueType);
element.setText(StringBaseOpt.objectToString(value));
return element;
}
@SuppressWarnings("unchecked")
public static Element createXMLElementFromObject(String elementName , Object object){
if(object instanceof String){
return createXMLElement(elementName ,"String", object);
}
if(object instanceof Long){
return createXMLElement(elementName ,"Long", object);
}
if(object instanceof BigDecimal){
return createXMLElement(elementName ,"BigDecimal", object);
}
if(object instanceof Boolean){
return createXMLElement(elementName ,"Boolean", object);
}
if(object instanceof Integer){
return createXMLElement(elementName ,"Integer", object);
}
if(object instanceof Number){
return createXMLElement(elementName ,"Number", object);
}
if(object instanceof Date){
return createXMLElement(elementName ,"Date", object);
}
if(object instanceof Map){
Element element = DocumentHelper.createElement(elementName);
element.addAttribute("type","Object");
for(Map.Entry jo : ((Map)object).entrySet()){
if(jo.getValue()!=null)
element.add(createXMLElementFromObject(
StringBaseOpt.objectToString(jo.getKey()), jo.getValue()));
}
return element;
}
if(object instanceof Object[]){
Element element = DocumentHelper.createElement(elementName);
element.addAttribute("type","Array");
for(Object obj: (Object[]) object){
if(obj!=null) {
element.add(createXMLElementFromObject("item", obj));
}
}
return element;
}else if(object instanceof Collection){
Element element = DocumentHelper.createElement(elementName);
element.addAttribute("type","Array");
for(Object obj: (Collection>) object){
if(obj!=null) {
element.add(createXMLElementFromObject("item", obj));
}
}
return element;
}
if(ReflectionOpt.isScalarType(object.getClass())){
return createXMLElement(elementName ,"String", object);
}else{
Field[] fields = ReflectionOpt.getFields(object);
if(fields==null)
return createXMLElement(elementName ,"String", object);
Element element = DocumentHelper.createElement(elementName);
element.addAttribute("type","Object");
for(Field field: fields){
Object obj = ReflectionOpt.getFieldValue( object, field);
if(obj!=null)
element.add(createXMLElementFromObject(field.getName(), obj));
}
return element;
}
}
public static String jsonObjectToXMLString(Map json){
Element element = createXMLElementFromObject("object",json);
return element.asXML();
//return DocumentHelper.createDocument(element).asXML();
}
public static String objectToXMLString(String rootName, Object object){
Element element = createXMLElementFromObject(rootName,object);
return element.asXML();
//return DocumentHelper.createDocument(element).asXML();
}
public static String objectToXMLString(Object object){
return objectToXMLString("object", object);
}
public static Object elementToObject(Element element ){
//Map objectMap = new HashMap<>();
Attribute attr = element.attribute("type");
String stype = attr==null?null:element.attribute("type").getValue();
if(StringUtils.equals("Date", stype)){
return DatetimeOpt.smartPraseDate(element.getTextTrim());
}else if(StringUtils.equals("Long", stype)){
return NumberBaseOpt.castObjectToLong(element.getTextTrim());
}else if(StringUtils.equals("Integer", stype)){
return NumberBaseOpt.castObjectToInteger(element.getTextTrim());
}else if(StringUtils.equals("Number", stype)){
return NumberBaseOpt.castObjectToDouble(element.getTextTrim());
}else if(StringUtils.equals("Boolean", stype)){
return StringRegularOpt.isTrue(element.getTextTrim());
}else if(StringUtils.equals("BigDecimal", stype)){
return new BigDecimal(element.getTextTrim());
}else if(StringUtils.equals("Array", stype)){
List subElements = element.elements();
if(subElements==null)
return null;
List objs = new ArrayList<>(subElements.size());
for(Element subE : subElements ){
if(StringUtils.equals("item",element.getName())) {
objs.add(
elementToObject(subE));
}
}
return objs;
}else if(StringUtils.equals("Object", stype)){
Map objectMap = new HashMap<>();
List subElements = element.elements();
if(subElements==null)
return null;
for(Element subE : subElements ){
objectMap.put(element.getName(),
elementToObject( subE ));
}
return objectMap;
}else {
return element.getTextTrim();
}
}
@SuppressWarnings("unchecked")
public static Map elementToJSONObject(Element element ){
Object obj = elementToObject(element);
if(obj instanceof Map)
return (Map ) obj;
return null;
}
public static Map xmlStringToJSONObject(String xmlString){
try {
Document doc = DocumentHelper.parseText(xmlString);
return elementToJSONObject(doc.getRootElement());
} catch (DocumentException e) {
logger.error(e.getMessage(),e);//e.printStackTrace();
return null;
}
}
public static Object xmlStringToObject(String xmlString){
try {
Document doc = DocumentHelper.parseText(xmlString);
return elementToObject(doc.getRootElement());
} catch (DocumentException e) {
logger.error(e.getMessage(),e);//e.printStackTrace();
return null;
}
}
}