1、调用webservice接口,获取结果
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Map;
import org.codehaus.jackson.JsonProcessingException;
import net.sf.json.JSONObject;
public class Test {
public static void main(String[] args) throws MalformedURLException, JsonProcessingException {
String url = "http://localhost:9999/test-controller/services/Test?wsdl";
URL wsdlLocation = new URL(url);
Mchis objF = new Mchis(wsdlLocation);
MchisPortType mchisPortType = objF.getMchisHttpSoap11Endpoint();
/**
* 获取token
*/
String st = mchisPortType.login("admin","123456");
JSONObject jSONObject = JSONObject.fromObject(st);
System.out.println("返回jSONObject" + jSONObject);
Map<String,Object> resuletMap = (Map) jSONObject;
String result = (String) resuletMap.get("result");
String message = (String) resuletMap.get("message");
Map<String,Object> dataMap = (Map) resuletMap.get("data");
String token = (String) dataMap.get("token");
System.out.println("返回result:" + result);
System.out.println("返回message:" + message);
System.out.println("返回dataMap:" + dataMap);
System.out.println("返回token:" + token);
/**
* 上传Data
* 测试
*/
/*WomanMain womanMain = new WomanMain();
womanMain.setAddrCode("11111");
womanMain.setAbo("2222");
womanMain.setAge("33");
JSON jsonStr = (JSON) JSON.toJSON(womanMain);
System.out.println("WomanMain:" + jsonStr);
Map<String,Object > data = new HashMap<String,Object>();
String jsondata;
data.put("spath", "womanMain");
data.put("remark", "测试一下下");
data.put("runServer", "save");
data.put("data", jsonStr);
jsondata = JSON.toJSONString(data);
System.out.println("生成的jsondata:" + jsondata);
String result = mchisPortType.saveData("cardId",jsondata);
System.out.println("result:" + result);*/
}
}
===========================================================================
===========================================================================
2、webservice接口,传递xml参数
1、创建如下工具类:XmlUtils、XMlHandler
2、调用工具类,生成实体
xml = xml.substring(xml.indexOf("<BirthCodeVo>"),
xml.lastIndexOf("</BirthCodeVo>") + 14);
log.info("======================解析xml:"+xml);
List<BirthCodeParam> listParam = XmlUtils.parseXml2Bean(xml,"BirthCodeVo",BirthCodeParam.class,new HashMap<String, Class>());
BirthCodeParam birthCodeParam = listParam.get(0);
=======================================================================
package code.data.webservice.birthCert.utils;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang.StringUtils;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
/**
* XML解析成实体的handler TODO
*
*/
public class XMlHandler<T> extends DefaultHandler {
String rootElemntName;
Map<String, String> dataMap;
StringBuilder stringBuilder;
List<T> dataList;
T data;
Class<T> clz;
@SuppressWarnings("rawtypes")
private Map<String, Class> attrs;
/**
* @Description
* <p>
* 当前标签名称
* </P>
* @version 1.0
*/
private String currentTag;
/**
* 要解析的单个实体的根元素名称
*
* @param rootElemntName
* @throws IllegalAccessException
* @throws InstantiationException
*/
@SuppressWarnings("rawtypes")
XMlHandler(String rootElemntName, Class<T> clz, Map<String, Class> attrsMap) {
this.rootElemntName = rootElemntName;
this.clz = clz;
this.attrs = attrsMap;
}
@Override
public void startDocument() throws SAXException {
super.startDocument();
dataMap = new HashMap<String, String>();
stringBuilder = new StringBuilder();
dataList = new ArrayList();
}
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
super.startElement(uri, localName, qName, attributes);
// 赋值给当前标签名称
currentTag = qName;
if (rootElemntName.equals(qName)) {
try {
data = clz.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
// 每次对一个标签解析前,都先置为空
stringBuilder.setLength(0);
// 如果某个标签中有属性,则将其保存到map中,保存规则:key = “标签名称_属性名称” value = “属性值”
if (attributes != null && dataMap != null) {
for (int i = 0; i < attributes.getLength(); i++) {
dataMap.put(qName + "_" + attributes.getQName(i), attributes.getValue(i));
}
}
}
@Override
public void characters(char[] ch, int start, int len) throws SAXException {
super.characters(ch, start, len);
stringBuilder.append(ch, start, len);
Field[] fields = clz.getDeclaredFields();
try {
if (StringUtils.isNotEmpty(currentTag) && data != null) {
for (Field field : fields) {
String name = field.getName();
if (currentTag.equals(name)) {
name = name.substring(0, 1).toUpperCase() + name.substring(1);
Method method = data.getClass().getMethod("set" + name, field.getType());
if (field.getType().toString().equals("int")) {
method.invoke(data, Integer.parseInt(stringBuilder.toString()));
} else {
method.invoke(data, stringBuilder.toString());
}
}
}
}
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
super.endElement(uri, localName, qName);
if (rootElemntName.equals(qName)) {
try {
if (attrs != null) {
for (String attrName : attrs.keySet()) {
String methodName = "set" + attrName.substring(0, 1).toUpperCase() + attrName.substring(1);
Method method = data.getClass().getMethod(methodName, attrs.get(attrName));
method.invoke(data, dataMap.get(attrName));
}
}
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
dataList.add(data);
}
}
@Override
public void endDocument() throws SAXException {
// System.out.println("解析结束:"+dataList);
super.endDocument();
}
public List<T> getDataList() {
return dataList;
}
public T getData() {
return data;
}
}
package code.data.webservice.birthCert.utils;
import java.io.ByteArrayInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.io.StringWriter;
import java.util.List;
import java.util.Map;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
/**
* XML解析成实体Util
*/
public class XmlUtils {
/**
* @Description
* <p>
* 将实体类直接转换成xml
* </p>
* @param t 要转换成xml的对象
* @return xml字符串
*/
public static <T> String createXmlFromBean(T t) {
String xml = "";
if (t == null) {
return xml;
} else {
try {
StringWriter write = new StringWriter();
JAXBContext context = JAXBContext.newInstance(t.getClass());
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(t, write);
xml = write.toString();
} catch (JAXBException e) {
e.printStackTrace();
}
return xml;
}
}
================================================
/**
* @Description
* <p>
* 将实体类直接转换成xml,要转换的类必需加油@XmlRootElement注解
* </p>
* @param t 要转换成xml的对象
* @param format 是否格式化输出,{@code true}格式化输出,{@code false} 不进行格式化
* @return xml字符串
*/
public static <T> String createXmlFromBean(T t, boolean format) {
String xml = "";
if (t == null) {
return xml;
} else {
try{
StringWriter write = new StringWriter();
// 利用jdk中自带的转换类实现
JAXBContext context = JAXBContext.newInstance(t.getClass());
Marshaller marshaller = context.createMarshaller();
// 格式化xml输出的格式
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, format);
// 将对象转换成xml写入到StringWriter中
marshaller.marshal(t, write);
xml = write.toString();
} catch (JAXBException e) {
e.printStackTrace();
}
return xml;
}
}
/**
* @Description
* <p>
* 将实体类直接转换成xml,要转换的类必需加油@XmlRootElement注解
* </p>
* @param t 要转换成xml的对象
*
* @param filePath 要保存到的文件路径
* @return xml字符串
*/
public static <T> void createXmlToFile(T t, String filePath) {
try{
FileWriter write = new FileWriter(filePath);
// 利用jdk中自带的转换类实现
JAXBContext context = JAXBContext.newInstance(t.getClass());
Marshaller marshaller = context.createMarshaller();
// 格式化xml输出的格式
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
// 将对象转换成xml写入到StringWriter中
marshaller.marshal(t, write);
} catch (JAXBException e) {
e.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
}
@SuppressWarnings("unchecked")
public static <T> T getBeanFromXml(String xml, Class<T> clz) {
T t = null;
try{
StringReader reader = new StringReader(xml);
JAXBContext context = JAXBContext.newInstance(clz);
Unmarshaller unmarshal = context.createUnmarshaller();
t = (T) unmarshal.unmarshal(reader);
} catch (JAXBException e) {
e.printStackTrace();
}
return t;
}
/**
* @Description
* <p>
* 将xml转换为指定对象
* </P>
* @param xml 要解析的xml数据
* @param rootElemntName 要解析的内容的根标签名称
* @param clz 要转换成的实体类,
* @param attrs key值为要解析的xml标签中的属性值, value 值为属性值类型
* @return
*/
public static <T> List<T> parseXml2Bean(String xml, String rootElemntName, Class<T> clz, @SuppressWarnings("rawtypes") Map<String, Class> attrs) {
XMlHandler<T> handler = null;
try {
ByteArrayInputStream stream = new ByteArrayInputStream(xml.getBytes());
InputStreamReader reader = new InputStreamReader(stream, "utf-8");
InputSource source = new InputSource(reader);
handler = new XMlHandler(rootElemntName, clz, attrs);
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
source.setEncoding("utf-8");
parser.parse(source, handler);
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return handler.getDataList();
}
public static void main(String[] args) {
}
}
================================================================
package code.data.webservice.birthCert.entity;
public class BirthCodeParam {
private String birthSoleNo;//人口
private String motherName;//母亲姓名
public String getBirthSoleNo() {
return birthSoleNo;
}
public void setBirthSoleNo(String birthSoleNo) {
this.birthSoleNo = birthSoleNo;
}
public String getMotherName() {
return motherName;
}
public void setMotherName(String motherName) {
this.motherName = motherName;
}
}
====================================================================
====================================================================