如何调用webservice接口?

调用webservice接口

<!--依赖-->
<!--cxf webservice-->
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-spring-boot-starter-jaxws</artifactId>
            <version>3.4.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-transports-http</artifactId>
            <version>3.4.1</version>
        </dependency>
import org.apache.cxf.binding.soap.SoapHeader;
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;

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

/**
 * 工具类
 */
public class ClientLoginInterceptor extends AbstractPhaseInterceptor<SoapMessage> {
    private String username;
    private String password;
    public ClientLoginInterceptor() {
        super(Phase.PREPARE_SEND);
    }
    public ClientLoginInterceptor(String username, String password) {
        //super();
        super(Phase.PREPARE_SEND);
        this.username = username;
        this.password = password;
    }
    //@Override
    public void handleMessage(SoapMessage soap) throws Fault {
        List<Header> headers = soap.getHeaders();
        Document doc = DOMUtils.createDocument();
        // 添加用户名信息
        Element userElement = doc.createElement("tns:user");
        userElement.setTextContent(this.username);
        // 添加密码信息
        Element pwdElement = doc.createElement("tns:password");
        pwdElement.setTextContent(this.password);
        // 创建消息头节点
        Element root = doc.createElementNS("http://sys.webservice.client"
                , "tns:RequestSOAPHeader");
        root.appendChild(userElement);
        root.appendChild(pwdElement);
        QName qname = new QName("RequestSOAPHeader");
        SoapHeader head = new SoapHeader(qname, root);
        headers.add(head);
    }
}
public void test(JSONObject jsonStr){
//        jsonStr = toJsonStr();
        //封装接口上下文
        SysSynchroSetOrgContext context = new SysSynchroSetOrgContext();
        context.setOrgJsonData(jsonStr.toString());
        String oaUrl = getOAUrl();
        
        String url = demoUrl+"sys/webservice/demoservice?wsdl";
        String method = "demo";

        Object a = null;
        try {

            a = getNewWebInstance(url, method, "http://in.webservice.organization.sys.kmss.demo.com/", context);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
/**
     * 调用webservice
     * @param wsUrl 接口路径
     * @param method 接口方法
     * @param qname 空间名
     * @param jsonStr 传入参数
     * @return
     * @throws Exception
     */
    public Object getNewWebInstance(String wsUrl, String method, String qname, String jsonStr) throws Exception {
        JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
        // 需要密码的情况需要加上用户名和密码
        QName aname = new QName(qname, method);
        Client client = dcf.createClient(wsUrl);
        /*加密码验证,需要这个*/
        /*账号、密码*/
        client.getOutInterceptors().add(new ClientLoginInterceptor("noAuth", null));
        Object[] res = null;
        Object[] objects = new Object[0];

        try {
            // invoke("方法名",参数1,参数2,参数3....);
            objects = client.invoke(method,jsonStr);
            log.info("返回数据:" + objects[0]);
            return objects[0];
        } catch (java.lang.Exception e) {
            e.printStackTrace();
            return null;
        }
    }

版权声明:本文为m0_48668242原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。