调用webservice接口

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

====================================================================

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值