天天看點

webService原生調用

以下為調用代碼

//類service需要導的包

import org.apache.axis.client.Service;
      
Service service = new Service();
Call call = service.createCall();
//需要通路的webservice位址http://ip:端口号/webservice釋出位址?wsdl
call.setTargetEndpointAddress("http://ip:端口号/webservice釋出位址?wsdl");
//QName參數 1,webservice的命名空間 2,需要通路的方法名
call.setOperationName(new QName("http://xxxxx/","xxx"));

//參數,對應要通路的方法參數,參數名字要和方法中參數一樣
call.addParameter("aaa", XMLType.XSD_STRING, ParameterMode.IN);
call.addParameter("bbb", XMLType.XSD_STRING,ParameterMode.IN);
call.addParameter("ccc", XMLType.XSD_STRING,ParameterMode.IN);

System.out.println("開始接口調用");
//調用,傳回的是xml結構的
Object o = call.invoke(new Object[]{"fdfds","eee","ggggg"});
System.out.println("獲得傳回值" + o);
           

webservice的命名空間,可以通過對方給的路徑來擷取

在浏覽器輸入位址http://ip:端口号/webservice釋出位址?wsdl

webService原生調用

紅框中為webService的命名空間!

//另一種webservice請求方式,增加表頭

webService原生調用

發送webservice代碼

JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
String address = ip+webservice位址?wsdl";
org.apache.cxf.endpoint.Client client = dcf.createClient(address);
log.info("拼接的ip位址是" + address);
//增加表頭的方法
client.getOutInterceptors().add(new ClientAuthInterceptor(“需要的使用者名”, “需要的密碼”));
//body json資料
Object[] obj = client.invoke("commonRequest", “json資料”);
Object object = null;
if (null != obj) {
    object = obj[0];
}
if (null == object) {
   
} else {
    //得到傳回資料
    String xmlString = object.toString();
    log.info("傳回資料成功!");
    log.info(xmlString);
}      

//發送表頭的類

package com.ptpec.ims.service.card;

import java.util.List;

import javax.xml.namespace.QName;

import org.apache.cxf.binding.soap.SoapMessage;
import org.apache.cxf.headers.Header;
import org.apache.cxf.helpers.DOMUtils;
import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.phase.AbstractPhaseInterceptor;
import org.apache.cxf.phase.Phase;
import org.w3c.dom.Document;
import org.w3c.dom.Element;

/**
 * 
 */
public class ClientAuthInterceptor extends AbstractPhaseInterceptor<SoapMessage> {

    private String userName;
    private String passWord;
    
    
    public ClientAuthInterceptor(String userName, String passWord) {
        //準備發送階段
        super(Phase.PREPARE_SEND);
        this.userName = userName;
        this.passWord = passWord;
  
    }
    
    
    @Override
    public void handleMessage(SoapMessage message) throws Fault {
       
        List<Header> headers = message.getHeaders();
           Document doc = DOMUtils.createDocument();
        Element auth = doc.createElement("AuthenticationToken");
        Element username = doc.createElement("Username");
        username.setTextContent(userName);
        Element password = doc.createElement("Password");
        password.setTextContent(passWord);
        auth.appendChild(username);
        auth.appendChild(password);
        headers.add(new Header(new QName(""), auth));
        
        System.out.println("------------------"+headers);
    }
}