java 調用wsdl的webservice接口 兩種調用方式


關於wsdl接口對於我來說是比較頭疼的 基本沒搞過。一臉懵 就在網上搜 看着寫的都很好到我這就不好使了,非常藍瘦、謹以此隨筆紀念我這半個月踩過的坑、、、

  背景:短短兩周除了普通開發外我就接到了兩個webservice接口,很少搞這樣的接口 就很懵;

  開發工具:eclipse、idea

  方法一:

    第一種就是個人覺得很容易懂得方法,作為wsdl接口,我們可以用開發工具將wsdl接口轉為本地文件,這樣就可以看他們的調用方法以及參數了。

·以eclipse為例,在你的項目里右鍵選擇other

 

 

·然后搜索web,選擇web service client

  

 

·之后將你的wsdl路徑輸入,點擊finish 就可以看到了

  

 

·這個時候寫個main方法像調本地方法一樣去調用就好了

  

 

·idea的這里將生成路徑說一下:

  

  

 

 

·一般wsdl調用比較正規的話 具體調用就會寫在XXXservicePort.java里  然后寫個調用方法去調用就好了

·另外附上我的測試:

  ps:因為我這邊開發有代理需要加上代理就加上代理訪問的(這也是個坑啊!!!)

 //給java進程強制加代理
        System.getProperties().put("proxySet", "true");
        System.getProperties().put("proxyHost", "172.30.XX.XXX");
        System.getProperties().put("proxyPort", "9999");
        System.out.println("Hello World!");
        TaskService service = new TaskService();
        TaskServicePort port = service.getTaskServicePort();
        B2BParameter para1 = new B2BParameter();
        B2BParameter para2 = new B2BParameter();
        B2BParameter para3 = new B2BParameter();
        B2BParameter para4 = new B2BParameter();
        B2BParameter para5 = new B2BParameter();
        B2BParameter para6 = new B2BParameter();
        para1.setName("loginId");
        para1.setValue("AWP_B2B_CN");
        para2.setName("password");
        para2.setValue("audatex");
        para3.setName("maxCount");
        para3.setValue("100");
        para4.setName("startAtIndex");
        para4.setValue("1");
        para5.setName("fieldsToReturn");
        para5.setValue("ResponsibleUserLoginId,CreatorLoginId,CreationDate,CaseId,TaskId,ClaimNumber,ManufacturerName,ModelName,PlateNumber,VIN,BusinessStatusKind");
        para6.setName("returnPayloadAsXML");
        para6.setXsltParameter(true);
        B2BRequest request = new B2BRequest();
        request.getParameter().add(para1);
        request.getParameter().add(para2);
        request.getParameter().add(para3);
        request.getParameter().add(para4);
        request.getParameter().add(para5);
        request.getParameter().add(para6);
        request.setPayload("CreationDate >\"2019-07-01T11:00:00\" and CreationDate < \"2019-08-08T12:00:00\" ");

        B2BResponse response = port.findTasks(request);
        System.out.println(response.getHostName());
        System.out.println(response.getLoginId());
        System.out.println(response.getPayload());
        System.out.println(response.getReturnCode());

 

 

 

 

 

方法二:

    另外就是用httpClient的方式去調用。下面我將附上我的代碼,希望能幫到(pps:有加代理

 
         

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;

 
         

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.InputStreamRequestEntity;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.RequestEntity;
import org.apache.log4j.Logger;
import org.dom4j.Document;
import org.dom4j.io.SAXReader;

// 這里引得依賴  包的話需要自己找了 下面地址可以找到
//https://mvnrepository.com/



public
static InputStream postXmlRequestInputStream(String requestUrl, String xmlData) throws IOException{ PostMethod postMethod = new PostMethod(requestUrl); byte[] b = xmlData.getBytes("utf-8"); InputStream is = new ByteArrayInputStream(b, 0, b.length); RequestEntity re = new InputStreamRequestEntity(is, b.length, "text/xml;charset=utf-8"); postMethod.setRequestEntity(re); HttpClient httpClient = new HttpClient(); httpClient.getParams().setAuthenticationPreemptive(true); httpClient.getHostConfiguration().setProxy(CommonPptsUtil.get("PROXY_HOST"), Integer.valueOf(CommonPptsUtil.get("PROXY_PORT"))); int statusCode = httpClient.executeMethod(postMethod); logger.debug("responseCode:"+statusCode); if (statusCode != 200) { return null; } return postMethod.getResponseBodyAsStream(); } public static void main(String[] args) { String reqJsonStr = "{\"workId\":\"20171018161622\",\"status\":\"201\",\"startTime\":\"2017-10-18 16:16:22\"}"; String xmlData = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ser=\"http://service.interfacemodule.cic.com/\"><soapenv:Header/><soapenv:Body><ser:statusWriteBack><jsonString>" + "{\"workId\":\"314\",\"orderId\":\"5207675\",\"longitude\":\"104.068310\",\"latitude\":\"30.539503\",\"sendTime\":\"2019-08-13 08:38:45\",\"servicePerName\":\"於xx\",\"servicePerPhone\":\"184xxxx7680\"}" + "</jsonString></ser:statusWriteBack></soapenv:Body></soapenv:Envelope>"; String url = "http://xx.xxx.246.88:7103/avs/services/CCService?wsdl"; SAXReader reader = new SAXReader(); String result = ""; try { InputStream in = postXmlRequestInputStream(url,xmlData); if(in!=null){ Document doc = reader.read(in); result = doc.getRootElement().element("Body").element("statusWriteBackResponse").element("return").getText(); logger.debug("result:"+result); } } catch (Exception e) { logger.error("error:",e); e.printStackTrace(); } }

 CommonPptsUtil://就是獲取配置文件里的代理信息

 

import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.PropertiesConfiguration;
import org.apache.commons.configuration.reloading.FileChangedReloadingStrategy;
import org.apache.log4j.Logger;

/**
 * 通用屬性文件工具類
 * 
 * @author y.c
 * 
 */
public class CommonPptsUtil {

    private static final Logger logger = Logger.getLogger(CommonPptsUtil.class);

    private static final String CONFIG_FILE = "common.properties";

    private static PropertiesConfiguration ppts;

    static {
        try {
            ppts = new PropertiesConfiguration(CONFIG_FILE);
            ppts.setReloadingStrategy(new FileChangedReloadingStrategy());
        } catch (ConfigurationException e) {
            logger.error("文件【common.properties】加載失敗!");
            ppts = null;
        }
    }

    /**
     * 獲取屬性值
     * 
     * @param key
     * @return 屬性值
     */
    public static String get(String key) {
        if (ppts == null) {
            return null;
        }

        return ppts.getString(key);
    }
}

 

 

 

 

 
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM