SprintBoot 调用webService接口

1、利用JDK处带的wsimport.exe工具,根据wsdl文件生成相应的类文件

格式:wsimport -s "src目录" -p "生成类所在包名" -keep "wsdl发布地址"

示例:wsimport -s D:\\Work -p com.client -keep http://127.0.0.1:8080/sys/webservice/sysSynchroGetOrgWebService?wsdl

2、引入maven包

        
            org.apache.cxf
            cxf-rt-frontend-jaxws
            3.3.0
        
        
            org.apache.cxf
            cxf-rt-transports-http
            3.3.0
        

 3、消息头验证信息

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

import javax.xml.namespace.QName;
import java.util.List;

public class AddSoapHeader extends AbstractSoapInterceptor {

    private String url;
    private String username;
    private String password;

    public AddSoapHeader() {
        super(Phase.PREPARE_SEND);
    }
    public AddSoapHeader(String url,String username, String password) {
        // 定义在哪个阶段进行拦截
        super(Phase.PREPARE_SEND);
        this.url = url;
        this.username = username;
        this.password = password;
    }

    @Override
    public void handleMessage(SoapMessage message) throws Fault {
        List
headers = message.getHeaders(); Document doc = DOMUtils.createDocument(); Element auth = doc.createElementNS(this.url,"tns:RequestSOAPHeader"); Element username = doc.createElement("tns:user"); Element password = doc.createElement("tns:password"); username.setTextContent(this.username); password.setTextContent(this.password); auth.appendChild(username); auth.appendChild(password); headers.add(new SoapHeader(new QName("RequestSOAPHeader"), auth)); } }

 4、添加连接信息

import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import org.springframework.beans.factory.annotation.Autowired;
public abstract class WebServiceClient {

    @Autowired
    private   AppConfig appConfig;

    /**
     * 连接
     * @param serviceClass
     * @return
     */
    public  Object callService(Class serviceClass){
        JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
        // 记录入站消息
        factory.getInInterceptors().add(new LoggingInInterceptor());
        // 记录出站消息
        factory.getOutInterceptors().add(new LoggingOutInterceptor());
        // 添加消息头验证信息。如果服务端要求验证用户密码,请加入此段代码
        factory.getOutInterceptors().add(new AddSoapHeader(appConfig.oaUrl,appConfig.oaUser,appConfig.oaPassword));
        factory.setServiceClass(serviceClass);
        factory.setAddress(appConfig.oaAddress);
        // 创建服务代理并返回
        return factory.create();
    }
}

 5、调用webService

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlType;

/**
* 输入参数
**/

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "sysSynchroGetOrgInfoTokenContext", propOrder = {"pageNo", "token", "beginTimeStamp", "count", "returnOrgType"})
public class SysSynchroGetOrgInfoTokenContext {
    protected int pageNo;
    protected String token;
    private String beginTimeStamp;
    private int count;
    private String returnOrgType;

    public String getReturnOrgType() {
        return returnOrgType;
    }

    public void setReturnOrgType(String returnOrgType) {
        this.returnOrgType = returnOrgType;
    }

    public int getCount() {
        return count;
    }

    public void setCount(int count) {
        this.count = count;
    }

    public String getBeginTimeStamp() {
        return beginTimeStamp;
    }

    public void setBeginTimeStamp(String beginTimeStamp) {
        this.beginTimeStamp = beginTimeStamp;
    }

    public int getPageNo() {
        return pageNo;
    }

    public void setPageNo(int value) {
        this.pageNo = value;
    }

    public String getToken() {
        return token;
    }

    public void setToken(String value) {
        this.token = value;
    }

}

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlType;

/**
 * 输出参数对象
 */
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "sysSynchroOrgTokenResult", propOrder = { "count", "message", "returnState", "token" })
public class SysSynchroOrgTokenResult {

    protected int count;
    protected String message;
    protected int returnState;
    protected String token;


    public int getCount() {
        return count;
    }

    public void setCount(int value) {
        this.count = value;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String value) {
        this.message = value;
    }

    public int getReturnState() {
        return returnState;
    }

    public void setReturnState(int value) {
        this.returnState = value;
    }

    public String getToken() {
        return token;
    }

    public void setToken(String value) {
        this.token = value;
    }

}

import javax.jws.WebParam;
import javax.jws.WebService;


/**
 * 接口WebService
 * name:接口service名称
 * targetNamespace: 接口命名空间
 */
@WebService(name = "ISysSynchroGetOrgWebService", targetNamespace = "http://out.webservice.organization.sys.kmss.landray.com/")
public interface ISysSynchroGetOrgWebService {

    /**
     * @param arg0
     * @return
     * @throws Exception_Exception
     */
    SysSynchroOrgTokenResult getUpdatedElementsByToken(@WebParam(name = "arg0", targetNamespace = "") SysSynchroGetOrgInfoTokenContext arg0) throws Exception_Exception;
}

public class OASysDeptServerImpl extends WebServiceClient {
    @Autowired
    private BaseClient baseClient;
    
    public void sysDept() {
        try {
            ISysSynchroGetOrgWebService data = (ISysSynchroGetOrgWebService)this.callService(ISysSynchroGetOrgWebService.class);
            this.queryDept(data,1,null);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @SneakyThrows
    private void queryDept(ISysSynchroGetOrgWebService data, Integer pageNo, String token){
        //输入参数设置
        SysSynchroGetOrgInfoTokenContext tokenRequest =  new SysSynchroGetOrgInfoTokenContext();
        tokenRequest.setPageNo(pageNo);
        tokenRequest.setCount(1000);
        if(!StrUtil.isEmptyIfStr(token)){
            tokenRequest.setToken(token);
        }
        SysSynchroOrgTokenResult tokenResult = data.getUpdatedElementsByToken(tokenRequest);
        System.out.println(String.format("接口返回数据:%s", Json.encode(tokenResult)));
    }

你可能感兴趣的:(webService,java)