java--->读取wsdl方法(二)

方法1:在简单的使用后面:

package com.cai.test;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.StringReader;
import java.net.HttpURLConnection;
import java.net.URL;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

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

public class ServiceTest2 {

    public static void main(String[] args)throws Exception {
        getResult("李涛", "getValue");

    }
    /**
     * 
     * @param condition 参数(值)
     * @param methodName 方法名称
     * @param iMethodArgsName 参数(名称)
     * @return
     */
    public static String setRequestSoapMsg(String condition, String methodName,
            String iMethodArgsName){
        String soapMsg="<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
                "<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas." +
                "xmlsoap.org/soap/envelope/\" xmlns:SOAP-ENC=\"http:" +
                "//schemas.xmlsoap.org/soap/encoding/\" xmlns:xsi=\"http" +
                "://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http:" +
                "//www.w3.org/2001/XMLSchema\">"+
            "<SOAP-ENV:Body>"+
                "<m:"+methodName+" xmlns:m=\"http://test.cs.com/\">" +  //http://test.cs.com  ==》wsdl 种对应的namespace
                    "<"+iMethodArgsName+">"+ condition+"</"+iMethodArgsName+">" +
                "</m:"+methodName+">" +
            "</SOAP-ENV:Body>"+
            "</SOAP-ENV:Envelope>";
        System.out.println("soapMsg:"+soapMsg);
        return soapMsg;
    }
    public static String getResult(String condition, String methodName)
        throws Exception {
        String soapMsg = setRequestSoapMsg(
                condition,methodName,"condition");
        URL u = null;
        HttpURLConnection conn = null;
        OutputStream out = null;
        InputStream in = null;
        InputStreamReader isr = null;
        StringBuffer sb = new StringBuffer();
        try {
            u = new URL("http://localhost:8080/testService/sfws/testService?wsdl");             
            conn = (HttpURLConnection)u.openConnection();
            conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; QQPinyin 689; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)");
            conn.setRequestProperty("Content-Type", "text/xml; charset=utf-8");
            conn.setRequestMethod("POST");
            conn.setDoOutput(true);
            conn.setDoInput(true);
            conn.setConnectTimeout(60*1000);
            conn.setReadTimeout(60*1000);
            out = conn.getOutputStream();
            out.write(soapMsg.getBytes("utf-8"));        
            if(conn.getResponseCode()==200){
                in = conn.getInputStream();
                isr = new InputStreamReader(in,"utf-8");
                char[] c = new char[1024];
                int a = isr.read(c);
                while(a!=-1){
                    sb.append(new String(c,0,a));
                    a = isr.read(c);
                }
            }
        }  catch (Exception e){
            throw e;
        } finally{
            if(conn!=null){
                conn.disconnect();
            }
            try {
                if(in!=null){
                    in.close();
                }
                if(isr!=null){
                    isr.close();
                }
                if(out!=null){
                    out.close();
                }
            } catch (IOException e) {
                throw e;
            }
        }
        Document doc = getDocFromXml(sb.toString());
        String result = getValueByTagName(doc, "return", 0);//result==>@WebResult(name = "result")(如果没有注解是 return)
        System.out.println("result:"+result);
        
        return result;
    }
    
    /**
     * xml 转 Document对象
     * @param xml
     * @return Document
     * @throws Exception
     */
    public static Document getDocFromXml(String xml) throws Exception{
        DocumentBuilderFactory domfac = DocumentBuilderFactory.newInstance();
        DocumentBuilder dombuilder = domfac.newDocumentBuilder();
        StringReader sr=new StringReader(xml);
        InputSource is=new InputSource(sr);
        Document doc = dombuilder.parse(is);
        return doc;
    }
    /**
     * 
     * @param doc  xml
     * @param tagName  标签名
     * @param itemIndex 第几个
     * @return
     */
    public static String getValueByTagName(Document doc,String tagName, int itemIndex){
        String value = "";
        if(doc != null && tagName != null && !"".equals(tagName)){
            Node node = doc.getElementsByTagName(tagName).item(itemIndex);
            if(node != null)
                value = node.getTextContent().trim();
        }
        return value;
    }

}

 

posted @ 2020-09-10 10:42  就是你baby  阅读(1028)  评论(0编辑  收藏  举报