webService实战

titledatetagscategories
webService实战
2019-08-10 08:39:53 -0700
webService
JAVA

所需依赖

<dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>commons-discovery</groupId>
            <artifactId>commons-discovery</artifactId>
            <version>0.5</version>
        </dependency>
        <dependency>
            <groupId>org.apache.ws.xmlschema</groupId>
            <artifactId>xmlschema-core</artifactId>
            <version>2.2.1</version>
        </dependency>
        <dependency>
            <groupId>com.thoughtworks.xstream</groupId>
            <artifactId>xstream</artifactId>
            <version>1.4.10</version>
        </dependency>
        <dependency>
            <groupId>org.apache.axis</groupId>
            <artifactId>axis</artifactId>
            <version>1.4</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-frontend-jaxws</artifactId>
            <version>3.2.7</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-transports-http</artifactId>
            <version>3.2.7</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-transports-http-jetty</artifactId>
            <version>3.2.7</version>
        </dependency>
        <dependency>
            <groupId>javax.xml</groupId>
            <artifactId>jaxrpc-api</artifactId>
            <version>1.1</version>
        </dependency>

定义实体、公共方法

定义实体、公共方法

model

import java.util.List;

/**
 * Project:<记录接口传送结果或内容>
 * 
 * Comments:<>
 * 
 * 
 * @see
 * @param <T>
 */
public class RealtechMiot<T> {
	private WSRequest wsRequest;
	private WSResult wsResult;
	private List<T> datas;

	public RealtechMiot() {
	}

	public RealtechMiot(WSRequest wsRequest, List<T> datas) {
		this.wsRequest = wsRequest;
		this.datas = datas;
	}

	public RealtechMiot(WSResult wsResult, List<T> datas) {
		this.wsResult = wsResult;
		this.datas = datas;
	}

	public WSRequest getWsRequest() {
		return this.wsRequest;
	}

	public void setWsRequest(WSRequest wsRequest) {
		this.wsRequest = wsRequest;
	}

	public WSResult getWsResult() {
		return this.wsResult;
	}

	public void setWsResult(WSResult wsResult) {
		this.wsResult = wsResult;
	}

	public List<T> getDatas() {
		return this.datas;
	}

	public void setDatas(List<T> datas) {
		this.datas = datas;
	}
}
import com.thoughtworks.xstream.annotations.XStreamAlias;

/**
 * Project:<接口>
 * <p>
 * Comments:<用来传送信息>
 * <p>
 *
 * @see
 */

@XStreamAlias("head")
public class WSRequest {
    public WSRequest() {
    }

    public WSRequest(String function_id) {
        this.function_id = function_id;
    }

    public WSRequest(String function_id, String version) {
        this.function_id = function_id;
        this.version = version;
    }

    @XStreamAlias("function_id")
    private String function_id;// 方法名
    private String version;// 方法版本

    public String getFunction_id() {
        return this.function_id;
    }

    public void setFunction_id(String function_id) {
        this.function_id = function_id;
    }

    public String getVersion() {
        return this.version;
    }

    public void setVersion(String version) {
        this.version = version;
    }
}
import com.thoughtworks.xstream.annotations.XStreamAlias;

/**
 * Project:<接口>
 * <p>
 * Comments:<用来记录接口返回的结果>
 * <p>
 */
@XStreamAlias("head")
public class WSResult {
    public WSResult() {
    }

    public WSResult(boolean success, String code) {
        this.success = success;
        this.code = code;
    }

    public WSResult(boolean success, String code, String msg) {
        this.success = success;
        this.msg = msg;
        this.code = code;
    }

    private boolean success;
    private String msg;
    private String code;


    public boolean isSuccess() {
        return success;
    }

    public void setSuccess(boolean success) {
        this.success = success;
    }

    public String getMsg() {
        return this.msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public String getCode() {
        return this.code;
    }

    public void setCode(String code) {
        this.code = code;
    }

}
/**
 * Project:<接口>
 * 
 * Comments:<用来记录接口返回的结果>
 * 
 * 
 * @see data 一般为一个json或jsonArrayList
 */
public class XmlResult {
	private boolean success;
	private String msg;
	private Object data;
	private String errorCode;

	public XmlResult() {
	}

	public XmlResult(boolean success, String msg, Object data, String errorCode) {
		this.success = success;
		this.msg = msg;
		this.data = data;
		this.errorCode = errorCode;
	}

	public XmlResult(boolean success, String msg) {
		super();
		this.success = success;
		this.msg = msg;
	}

	public XmlResult(boolean success, String msg, Object data) {
		super();
		this.success = success;
		this.msg = msg;
		this.data = data;
	}

	public boolean isSuccess() {
		return success;
	}

	public void setSuccess(boolean success) {
		this.success = success;
	}

	public String getMsg() {
		return msg;
	}

	public void setMsg(String msg) {
		this.msg = msg;
	}

	public Object getData() {
		return data;
	}

	public void setData(Object data) {
		this.data = data;
	}

	public String getErrorCode() {
		return errorCode;
	}

	public void setErrorCode(String errorCode) {
		this.errorCode = errorCode;
	}
}

util

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.*;
import java.util.Properties;

public class DOMUtils {
	/**
	 * 初始化一个空Document对象返回。
	 * 
	 * @return a Document
	 */
	public static Document newXMLDocument() {
		try {
			return newDocumentBuilder().newDocument();
		}
		catch (ParserConfigurationException e) {
			throw new RuntimeException(e.getMessage());
		}
	}

	/**
	 * 初始化一个DocumentBuilder
	 * 
	 * @return a DocumentBuilder
	 * @throws ParserConfigurationException
	 */
	public static DocumentBuilder newDocumentBuilder()
			throws ParserConfigurationException {
		return newDocumentBuilderFactory().newDocumentBuilder();
	}

	/**
	 * 初始化一个DocumentBuilderFactory
	 * 
	 * @return a DocumentBuilderFactory
	 */
	public static DocumentBuilderFactory newDocumentBuilderFactory() {
		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
		dbf.setNamespaceAware(true);
		return dbf;
	}

	/**
	 * 将传入的一个XML String转换成一个org.w3c.dom.Document对象返回。
	 * 
	 * @param xmlString
	 *            一个符合XML规范的字符串表达。
	 * @return a Document
	 */
	public static Document parseXMLDocument(String xmlString) {
		if (xmlString == null) {
			throw new IllegalArgumentException();
		}
		try {
			return newDocumentBuilder().parse(
					new InputSource(new StringReader(xmlString)));
		}
		catch (Exception e) {
			throw new RuntimeException(e.getMessage());
		}
	}

	/**
	 * 给定一个输入流,解析为一个org.w3c.dom.Document对象返回。
	 * 
	 * @param input
	 * @return a org.w3c.dom.Document
	 */
	public static Document parseXMLDocument(InputStream input) {
		if (input == null) {
			throw new IllegalArgumentException("参数为null!");
		}
		try {
			return newDocumentBuilder().parse(input);
		}
		catch (Exception e) {
			throw new RuntimeException(e.getMessage());
		}
	}

	/**
	 * 给定一个文件名,获取该文件并解析为一个org.w3c.dom.Document对象返回。
	 * 
	 * @param fileName
	 *            待解析文件的文件名
	 * @return a org.w3c.dom.Document
	 */
	public static Document loadXMLDocumentFromFile(String fileName) {
		if (fileName == null) {
			throw new IllegalArgumentException("未指定文件名及其物理路径!");
		}
		try {
			return newDocumentBuilder().parse(new File(fileName));
		}
		catch (SAXException e) {
			throw new IllegalArgumentException("目标文件(" + fileName
					+ ")不能被正确解析为XML!" + e.getMessage());
		}
		catch (IOException e) {
			throw new IllegalArgumentException("不能获取目标文件(" + fileName + ")!"
					+ e.getMessage());
		}
		catch (ParserConfigurationException e) {
			throw new RuntimeException(e.getMessage());
		}
	}

	/*
	 * 把dom文件转换为xml字符串
	 */
	public static String toStringFromDoc(Document document) {
		String result = null;

		if (document != null) {
			StringWriter strWtr = new StringWriter();
			StreamResult strResult = new StreamResult(strWtr);
			TransformerFactory tfac = TransformerFactory.newInstance();
			try {
				Transformer t = tfac.newTransformer();
				t.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
				t.setOutputProperty(OutputKeys.INDENT, "yes");
				t.setOutputProperty(OutputKeys.METHOD, "xml"); // xml, html,
				// text
				t.setOutputProperty(
						"{http://xml.apache.org/xslt}indent-amount", "4");
				t.transform(new DOMSource(document.getDocumentElement()),
						strResult);
			}
			catch (Exception e) {
				System.err.println("XML.toString(Document): " + e);
			}
			result = strResult.getWriter().toString();
			try {
				strWtr.close();
			}
			catch (IOException e) {
				e.printStackTrace();
			}
		}

		return result;
	}

	/*
	 * 把dom文件转换为xml字符串
	 */
	public static String toStringFromDoc(Element element) {
		String result = null;

		if (element != null) {
			StringWriter strWtr = new StringWriter();
			StreamResult strResult = new StreamResult(strWtr);
			TransformerFactory tfac = TransformerFactory.newInstance();
			try {
				Transformer t = tfac.newTransformer();
				t.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
				t.setOutputProperty(OutputKeys.INDENT, "yes");
				t.setOutputProperty(OutputKeys.METHOD, "xml"); // xml, html,
				// text
				t.setOutputProperty(
						"{http://xml.apache.org/xslt}indent-amount", "4");
				t.transform(new DOMSource(element), strResult);
			}
			catch (Exception e) {
				System.err.println("XML.toString(Document): " + e);
			}
			result = strResult.getWriter().toString();
			try {
				strWtr.close();
			}
			catch (IOException e) {
				e.printStackTrace();
			}
		}

		return result;
	}

	/**
	 * 给定一个节点,将该节点加入新构造的Document中。
	 * 
	 * @param node
	 *            a Document node
	 * @return a new Document
	 */

	public static Document newXMLDocument(Node node) {
		Document doc = newXMLDocument();
		doc.appendChild(doc.importNode(node, true));
		return doc;
	}

	/**
	 * 将传入的一个DOM Node对象输出成字符串。如果失败则返回一个空字符串""。
	 * 
	 * @param node
	 *            DOM Node 对象。
	 * @return a XML String from node
	 */

	/*
	 * public static String toString(Node node) { if (node == null) { throw new
	 * IllegalArgumentException(); } Transformer transformer = new
	 * Transformer(); if (transformer != null) { try { StringWriter sw = new
	 * StringWriter(); transformer .transform(new DOMSource(node), new
	 * StreamResult(sw)); return sw.toString(); } catch (TransformerException
	 * te) { throw new RuntimeException(te.getMessage()); } } return ""; }
	 */

	/**
	 * 将传入的一个DOM Node对象输出成字符串。如果失败则返回一个空字符串""。
	 * 
	 * @param node
	 *            DOM Node 对象。
	 * @return a XML String from node
	 */

	/*
	 * public static String toString(Node node) { if (node == null) { throw new
	 * IllegalArgumentException(); } Transformer transformer = new
	 * Transformer(); if (transformer != null) { try { StringWriter sw = new
	 * StringWriter(); transformer .transform(new DOMSource(node), new
	 * StreamResult(sw)); return sw.toString(); } catch (TransformerException
	 * te) { throw new RuntimeException(te.getMessage()); } } return ""; }
	 */

	/**
	 * 获取一个Transformer对象,由于使用时都做相同的初始化,所以提取出来作为公共方法。
	 * 
	 * @return a Transformer encoding gb2312
	 */

	public static Transformer newTransformer() {
		try {
			Transformer transformer = TransformerFactory.newInstance()
					.newTransformer();
			Properties properties = transformer.getOutputProperties();
			properties.setProperty(OutputKeys.ENCODING, "gb2312");
			properties.setProperty(OutputKeys.METHOD, "xml");
			properties.setProperty(OutputKeys.VERSION, "1.0");
			properties.setProperty(OutputKeys.INDENT, "no");
			transformer.setOutputProperties(properties);
			return transformer;
		}
		catch (TransformerConfigurationException tce) {
			throw new RuntimeException(tce.getMessage());
		}
	}

	/**
	 * 返回一段XML表述的错误信息。提示信息的TITLE为:系统错误。之所以使用字符串拼装,主要是这样做一般 不会有异常出现。
	 * 
	 * @param errMsg
	 *            提示错误信息
	 * @return a XML String show err msg
	 */
	/*
	 * public static String errXMLString(String errMsg) { StringBuffer msg = new
	 * StringBuffer(100);
	 * msg.append("<?xml version="1.0" encoding="gb2312" ?>");
	 * msg.append("<errNode title="系统错误" errMsg="" + errMsg + ""/>"); return
	 * msg.toString(); }
	 */
	/**
	 * 返回一段XML表述的错误信息。提示信息的TITLE为:系统错误
	 * 
	 * @param errMsg
	 *            提示错误信息
	 * @param errClass
	 *            抛出该错误的类,用于提取错误来源信息。
	 * @return a XML String show err msg
	 */
	/*
	 * public static String errXMLString(String errMsg, Class errClass) {
	 * StringBuffer msg = new StringBuffer(100);
	 * msg.append("<?xml version='1.0' encoding='gb2312' ?>");
	 * msg.append("<errNode title="
	 * 系统错误" errMsg=""+ errMsg + "" errSource=""+ errClass.getName()+ ""/>");
	 *  return msg.toString(); }
	 */
	/**
	 * 返回一段XML表述的错误信息。
	 * 
	 * @param title
	 *            提示的title
	 * @param errMsg
	 *            提示错误信息
	 * @param errClass
	 *            抛出该错误的类,用于提取错误来源信息。
	 * @return a XML String show err msg
	 */

	public static String errXMLString(String title, String errMsg,
			Class errClass) {
		StringBuffer msg = new StringBuffer(100);
		msg.append("<?xml version='1.0' encoding='utf-8' ?>");
		msg.append("<errNode title=" + title + "errMsg=" + errMsg
				+ "errSource=" + errClass.getName() + "/>");
		return msg.toString();
	}

}
import com.pexetech.core.util.EmptyUtils;
import com.pexetech.core.util.PropertiesFileUtil;
import com.pexetech.rest.common.model.WSResult;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

import javax.xml.namespace.QName;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import java.io.IOException;
import java.io.StringReader;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

public class XmlOperationUtil<T> {
    protected final Log _log = LogFactory.getLog(getClass());
    private final String PATTERN = "yyyy-MM-dd HH:mm:ss";
    private final SimpleDateFormat FORMAT = new SimpleDateFormat(PATTERN);

    public List<T> getTByname(Class<T> cls, NodeList nodeList) {
        List<T> tList = new ArrayList<T>();
        for (int i = 0; i < nodeList.getLength(); i++) {
            Element ele = (Element) nodeList.item(i);
            T t = XmlUtil.toBean(DOMUtils.toStringFromDoc(ele), cls);
            tList.add(t);
        }
        return tList;
    }

    public Element getElerootByTagName(String xml, String tagName) {
        NodeList bomNodeList = getElerootsByTagName(xml, tagName);
        Element bomRoot = (Element) bomNodeList.item(0);
        return bomRoot;
    }

    public NodeList getElerootsByTagName(String xml, String tagName) {
        if (EmptyUtils.isBlank(xml)) {
            return null;
        }
        Document document = createDocument(xml);
        return document.getElementsByTagName(tagName);
    }

    public WSResult createErrWSResult() {
        WSResult r = new WSResult();
        r.setCode("-100");
        r.setMsg("系统出现异常!");
        return r;
    }

    public Document createDocument(String xml) {
        try {
            DocumentBuilderFactory factory = DocumentBuilderFactory
                    .newInstance();
            DocumentBuilder builder;
            builder = factory.newDocumentBuilder();
            if (EmptyUtils.isBlank(xml)) {
                return null;
            }
            StringReader sr = new StringReader(xml);
            InputSource is = new InputSource(sr);
            return builder.parse(is);
        } catch (SAXException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ParserConfigurationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }

    public String callWebService(String xml, String method) {
        try {
            // 指出service所在完整的URL
            String endpoint = PropertiesFileUtil.getInstance("api").get("webservicePath");
            //调用接口的targetNamespace
            String targetNamespace = "http://webservice.web.rest.pexetech.com/";
            //所调用接口的方法method
            method = method == null ? PropertiesFileUtil.getInstance("api").get("methodName") : method;
            //以上需要配置
            _log.info("发送信息:" + xml);
            // 创建一个服务(service)调用(call)
            Service service = new Service();
//            javax.xml.rpc.Call call= service.createCall();
            Call call = (Call) service.createCall();// 通过service创建call对象
            // 设置service所在URL
            call.setTargetEndpointAddress(new java.net.URL(endpoint));
            call.setOperationName(new QName(targetNamespace, method));
            call.setUseSOAPAction(true);
            //变量最好只是用String类型,其他类型会报错
            call.addParameter(new QName(targetNamespace, "xml"), org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN);//设置参数名 state  第二个参数表示String类型,第三个参数表示入参
            call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);// 设置返回类型
            // String path = targetNamespace + method;
            // call.setSOAPActionURI(path);
            String jsonString = (String) call.invoke(new Object[]{xml});//此处为数组,有几个变量传几个变量
//			//将json字符串转换为JSON对象
//			JSON json = (JSON) JSON.parse(jsonString);
//			//将接送对象转为java对象,此处用object代替,用的时候转换为你需要是用的对象就行了
//			Object object = JSON.toJavaObject(json, Object.class);//注意别到错包com.alibaba.fastjson.JSON
            _log.info("返回结果:" + jsonString);
            return jsonString;
        } catch (Exception e) {
            _log.error("callWebService error ", e);
        }
        return null;
    }
}
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import java.io.IOException;
import java.io.StringReader;

/**
 * 输出xml和解析xml的工具类
 *
 * @ClassName:XmlUtil
 * @author: chenyoulong Email: chen.youlong@payeco.com
 * @date :2012-9-29 上午9:51:28
 * @Description:TODO
 */
public class XmlUtil {

    /**
     * java 转换成xml
     *
     * @param obj 对象实例
     * @return String xml字符串
     * @Title: toXml
     * @Description: TODO
     */
    public static String toXml(Object obj) {
        XStream xstream = new XStream();
        XStream.setupDefaultSecurity(xstream);
        xstream.allowTypes(new Class[]{XmlUtil.class});
        // XStream xstream=new XStream(new DomDriver()); //直接用jaxp dom来解释
        // XStream xstream=new XStream(new DomDriver("utf-8"));
        // //指定编码解析器,直接用jaxp dom来解释

        // //如果没有这句,xml中的根元素会是<包.类名>;或者说:注解根本就没生效,所以的元素名就是类的属性
        xstream.processAnnotations(obj.getClass()); // 通过注解方式的,一定要有这句话
        return xstream.toXML(obj);
    }

    /**
     * 将传入xml文本转换成Java对象
     *
     * @param xmlStr
     * @param cls    xml对应的class类
     * @return T xml对应的class类的实例对象
     * <p>
     * 调用的方法实例:PersonBean person=XmlUtil.toBean(xmlStr,
     * PersonBean.class);
     * @Title: toBean
     * @Description: TODO
     */
    public static <T> T toBean(String xmlStr, Class<T> cls) {
        // 注意:不是new Xstream(); 否则报错:java.lang.NoClassDefFoundError:
        // org/xmlpull/v1/XmlPullParserFactory
        XStream xstream = new XStream(new DomDriver());
        xstream.processAnnotations(cls);
        T obj = (T) xstream.fromXML(xmlStr);
        return obj;
    }

    public static NodeList getRootEleList(String bomXml, String rootName) {
        Document document = createDocument(bomXml);
        NodeList bomNodeList = document.getElementsByTagName(rootName);
        return bomNodeList;
    }

    public static Element getRootEle(String bomXml, String rootName) {
        Document document = createDocument(bomXml);
        NodeList bomNodeList = document.getElementsByTagName(rootName);
        if (bomNodeList == null || bomNodeList.getLength() == 0) {
            return null;
        }
        Element bomRoot = (Element) bomNodeList.item(0);
        return bomRoot;
    }

    public static String getRootEleValue(String bomXml, String rootName) {
        Document document = createDocument(bomXml);
        NodeList bomNodeList = document.getElementsByTagName(rootName);
        if (bomNodeList == null || bomNodeList.getLength() == 0) {
            return null;
        }
        Element bomRoot = (Element) bomNodeList.item(0);
        return bomRoot.getTextContent();
    }

    // 返回根目录下元素的值
    public static String getRootDocumentValue(String bomXml, String rootName) {
        Document document = createDocument(bomXml);
        NodeList bomNodeList = document.getChildNodes();
        for (int i = 0; i < bomNodeList.getLength(); i++) {
            Element bomRoot = (Element) bomNodeList.item(i);
            NodeList childrenNodeList = bomRoot.getChildNodes();
            for (int j = 0; j < childrenNodeList.getLength(); j++) {
                if (childrenNodeList.item(j).hasChildNodes()) {
                    Element childrenRoot = (Element) childrenNodeList.item(j);
                    if (rootName.equals(childrenRoot.getTagName())) {
                        return childrenRoot.getTextContent();
                    }
                }
            }
        }
        return null;
    }

    public static String getRootEleValue(Element ele, String rootName) {
        NodeList bomNodeList = ele.getElementsByTagName(rootName);
        if (bomNodeList == null || bomNodeList.getLength() == 0) {
            return null;
        }
        Element bomRoot = (Element) bomNodeList.item(0);
        return bomRoot.getTextContent();
    }

    public static Document createDocument(String xml) {
        try {
            DocumentBuilderFactory factory = DocumentBuilderFactory
                    .newInstance();
            DocumentBuilder builder;
            builder = factory.newDocumentBuilder();

            StringReader sr = new StringReader(xml);
            InputSource is = new InputSource(sr);
            return builder.parse(is);
        } catch (SAXException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ParserConfigurationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }

//    public static XmlResult sendWebService(String command, String xml) {
//        try {
//            // Client c = new Client(new
//            // URL("http://wuxin20642.xicp.net:19845/services/myService?wsdl"));
//            Client c = new Client(new URL("http://127.0.0.1:7890/HelloWorld?wsdl"));
//            Object[] result = c.invoke(command, new String[]{xml});
//            return new XmlResult(true, "call success.", (String) result[0]);
//        } catch (ConnectException ce) {
//            return new XmlResult(false, "call ConnectException.", null, "404");
//        } catch (Exception e) {
//            System.err.println(e.toString());
//        }
//        return new XmlResult(false, "call error.", null, "500");
//    }
}
import com.pexetech.core.util.EmptyUtils;
import com.pexetech.rest.common.model.RealtechMiot;
import com.pexetech.rest.common.model.WSRequest;
import com.pexetech.rest.common.model.WSResult;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

import java.util.List;

public class XmlUtilForMiot<T> extends XmlOperationUtil<T> {
	public static final String ROOT = "realtech";
	public static final String BODY = "body";
	public static final String HEAD = "head";
	public static final String DATA = "data";

	public RealtechMiot<T> toRequestBean(String xmlStr, Class<T> cls) {
		Element rootEle = getRootEle(xmlStr);

		Element head = getElerootByTagName(DOMUtils.toStringFromDoc(rootEle),
				HEAD);
		WSRequest wsRequest = XmlUtil.toBean(DOMUtils.toStringFromDoc(head),
				WSRequest.class);
		List<T> tList = createTlist(cls, rootEle);
		RealtechMiot<T> tm = new RealtechMiot<T>(wsRequest, tList);
		return tm;
	}

	private List<T> createTlist(Class<T> cls, Element rootEle) {
		Element bodyEle = getBodyEle(DOMUtils.toStringFromDoc(rootEle));
		List<T> tList = null;
		if (cls != null) {
			NodeList nodeList = getElerootsByTagName(
					DOMUtils.toStringFromDoc(bodyEle), DATA);
			if (nodeList != null && nodeList.getLength() > 0) {
				tList = getTByname(cls, nodeList);
			}
		}
		return tList;
	}

	public RealtechMiot<T> toResultBean(String xmlStr, Class<T> cls) {
		Element rootEle = getRootEle(xmlStr);
		Element head = getElerootByTagName(DOMUtils.toStringFromDoc(rootEle),
				HEAD);
		WSResult wsResult = XmlUtil.toBean(DOMUtils.toStringFromDoc(head),
				WSResult.class);
		List<T> tList = createTlist(cls, rootEle);
		RealtechMiot<T> tm = new RealtechMiot<T>(wsResult, tList);
		return tm;
	}

	public String toRequestXml(WSRequest wsRequest, List<T> datas) {
		String head = XmlUtil.toXml(wsRequest);
		String dataStr = listToXmlStr(datas);

		String result = connectXmlStr(head, dataStr);
		return result;
	}

	public String toRequestXml(WSRequest wsRequest, Object datas) {
		String head = XmlUtil.toXml(wsRequest);
		String dataStr = listToXmlStr(datas);

		String result = connectXmlStr(head, dataStr);
		return result;
	}

	public String toResultXml(WSResult wsResult, List<T> datas) {
		try {
			String head = XmlUtil.toXml(wsResult);
			String dataStr = listToXmlStr(datas);

			String result = connectXmlStr(head, dataStr);
			return result;
		}
		catch (Exception e) {
			String head = XmlUtil.toXml(createErrWSResult());
			return connectXmlStr(head, null);
		}
	}

	private String connectXmlStr(String head, String dataStr) {
		if (dataStr == null || EmptyUtils.isBlank(dataStr)) {
			dataStr = "<data></data>";
		}
		String result = "<" + ROOT + ">" + head + "<" + BODY + ">" + dataStr
				+ "</" + BODY + ">" + "</" + ROOT + ">";
		// 处理xStreambug,一个"_"会变成2个
		if (result.contains("__")) {
			result = result.replace("__", "_");
		}
		return result;
	}

	private String listToXmlStr(List<T> datas) {
		String dataStr = "";
		if (datas != null) {
			for (T t : datas) {
				dataStr += XmlUtil.toXml(t);
			}
		}
		return dataStr;
	}

	private String listToXmlStr(Object datas) {
		String dataStr = XmlUtil.toXml(datas);
		return dataStr;
	}

	public Element getRootEle(String xml) {
		return getElerootByTagName(xml, ROOT);
	}

	public Element getBodyEle(String xml) {
		return getElerootByTagName(xml, BODY);
	}
}

spring注入

applicationContext-webservice.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:jaxws="http://cxf.apache.org/jaxws"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://cxf.apache.org/jaxws
        http://cxf.apache.org/schemas/jaxws.xsd">

    <jaxws:endpoint id="pexeService" implementor="com.pexetech.rest.web.webservice.PexeServiceImpl"
                    address="http://127.0.0.1:6789/webService"/>
    <!--物料入库-->
        <bean id="create_material_input" class="com.pexetech.rest.web.webservice.service.InventoryInputRestService">
            <property name="function" value="createMaterialInput"/>
        </bean>
</beans>

工厂

public interface WSFunctionFactory {
	public String execute(String message);
}
import com.pexetech.core.util.EmptyUtils;
import com.pexetech.rest.web.webservice.WSFunctionFactory;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import java.lang.reflect.InvocationTargetException;

public abstract class WebService implements WSFunctionFactory {
    protected final Log _log = LogFactory.getLog(getClass());
    private String _function;
    private String _companyId = "c3457cb41baa4b568e05799751de33e4";

    public String getCompanyId() {
        return _companyId;
    }

    public void setCompanyId(String companyId) {
        this._companyId = companyId;
    }

    public void setFunction(String function) {
        this._function = function;
    }

    public String getFunction() {
        return this._function;
    }

    public String executeMethod(String message) {
        return null;
    }

    public String execute(String message) {
        String s = null;
        try {
            if (!EmptyUtils.isBlank(getFunction())) {
                s = (String) this.getClass()
                        .getMethod(getFunction(), String.class)
                        .invoke(this, message);
            } else {
                s = executeMethod(message);
            }
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (SecurityException e) {
            e.printStackTrace();
        }
        return s;
    }
}

提供者

public class CreateUnbomRequestRestService extends WebService {
     private XmlUtilForMiot<PurchaseUnbomRequestPXView> iixml = new XmlUtilForMiot<PurchaseUnbomRequestPXView>();
      public String createUnbomRequest(String msg) {
             WSResult r = null;
        r = new WSResult(true, "100", "抛送成功");
                    return iixml.toResultXml(r, resultList);    
      }
    
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值