【WebService】客户端

一 、 wsdl2java 生成webService服务端代码
1.1 下载apache cxf的包,如apache-cxf-3.2.7,地址:cxf.apache.org/download.html
在这里插入图片描述
1.2 解压 apache-cxf-3.2.7.zip 至某一目录, D:\apache-cxf-3.2.7
1.3 设置环境变量
CXF_HOME=D:\apache-cxf-3.2.7
在path后面加上 %CXF_HOME%/bin;
在这里插入图片描述
在这里插入图片描述
1.4 cmd 中运行 wsdl2java 工具
在cmd命令中输入wsdl2java,如果有提示usage,就表明配置成功
在这里插入图片描述
在cmd命令中输入:wsdl2java -d D:\src -client http://?wsdl
(D:\src 是客户端程序代码所在的目录, http://
?wsdl 是 定义webservice的地址)

此时便可以在 D:\src 下生成 wsdl 代码
1.5配置Header头部
若webservice需要头部验证。添加一下代码(实际情况而定)

package com.shennong.webservice;

import java.util.List;

import javax.xml.namespace.QName;

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;

public class ClientAuthInterceptor1 extends AbstractSoapInterceptor
{
	private static final String NAME = "sh*****g";//用户名
	 
    private static final String PASSWORD = "sns*****425";//密码
 
    public ClientAuthInterceptor1() {
        //准备发送阶段
        super(Phase.PREPARE_SEND);
    }
 
    @Override
    public void handleMessage(SoapMessage message) throws Fault {
        List<Header> headers = message.getHeaders();
 
        Document doc = DOMUtils.createDocument();
 
        Element auth = doc.createElement("authHeader");//参数
       
        Element name = doc.createElement("username");//参数
        name.setTextContent(NAME);
 
        Element password = doc.createElement("password");//参数
        password.setTextContent(PASSWORD);
 
        auth.appendChild(name);
        auth.appendChild(password);
 
        headers.add(new Header(new QName(""), auth));
    }
}

1.6实际调用:

@RequestMapping("test")
	@ResponseBody
    public Object test(){
		URL wsdlURL = CommunicationServiceImplService.WSDL_LOCATION;//生成代码中存在
		CommunicationServiceImplService ss = new CommunicationServiceImplService(wsdlURL, SERVICE_NAME);
        CommunicationService port = ss.getCommunicationServiceImplPort();
        Client client= ClientProxy.getClient(port);//添加头部信息
        client.getOutInterceptors().add(new ClientAuthInterceptor1());//添加头部信息
        java.lang.String _getTypes__return = port.sendMsg(count);//生成代码中的方法
        System.out.println(_getTypes__return);
        ***
        
        return null;
    }

猜你喜欢

转载自blog.csdn.net/ivy_doudou/article/details/86551630