首页 > 编程 > Java > 正文

java调用wsdl(jdk自带、axis2)

2019-11-08 01:52:10
字体:
来源:转载
供稿:网友

java通过WSDL文件来调用web service的方法介绍。

一、通过axis2远程调用web service(通过反射进行调用执行,效率应该比第二种低些:个人认为)

注:该方法要求要能大概读懂xml格式的WSDL文件

package webService.client.axis;import org.apache.axiom.om.OMAbstractFactory;import org.apache.axiom.om.OMElement;import org.apache.axiom.om.OMFactory;import org.apache.axiom.om.OMNamespace;import org.apache.axis2.AxisFault;import org.apache.axis2.addressing.EndpointReference;import org.apache.axis2.client.Options;import org.apache.axis2.client.ServiceClient;import org.dom4j.Attribute;import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.Element;/*** * webservice客户端:利用axis2 *  * @author SunJun *  */public class TestAxisClient {	/***	 * 传统阻塞式客户端(新版本)	 * 	 * @return	 */	public String invokeRemoteFuc_New() {		EndpointReference targetEPR = new EndpointReference(				"http://localhost:8078/testWebService.asmx?wsdl");// 接口地址		Options options = new Options();		// 下面的一行代码可要可不要(自己测试的结果)		// options.setAction("urn:BeiJingChaoYang");//调用接口方法		options.setTo(targetEPR);		ServiceClient sender = null;		try {			sender = new ServiceClient();			sender.setOptions(options);			OMFactory fac = OMAbstractFactory.getOMFactory();			// 设置命名空间,这里的命名空间是和wsdl中的命名空间一样的(从wsdl中获取)			OMNamespace omNs = fac.createOMNamespace("http://tempuri.org/", "");			// 设置方法名称,这个方法名称(BeiJingChaoYang)和服务里面的方法一致(是需要调用的方法名称)			OMElement method = fac.createOMElement("BeiJingChaoYang", omNs);			// 设置入参名称,这个参数名称(dataXml)是和服务提供的方法里面的参数名称一致			// (例如:要和方法BeiJingChaoYang中dataXml参数名称一致),否则服务方法获取不到该参数值			OMElement name = fac.createOMElement("dataXml", omNs);			// 设置入参值			name.setText("1111");			method.addChild(name);			OMElement name2 = fac.createOMElement("testParam", omNs);			// 设置入参值			name2.setText("222");			method.addChild(name2);			method.build();			System.out.println("method:" + method.toString());// print:<getUserById							// xmlns="http://service.hsinghsu.com"><id>1</id></getUserById>			OMElement response = sender.sendReceive(method); //获取处理结果			System.out.println("response:" + response);			OMElement elementReturn = response.getFirstElement();			System.out.println("cityCode:" + elementReturn.getText());			analysisResult(elementReturn.getText());		} catch (AxisFault e) {			System.out.println("Error");			e.printStackTrace();		}		return null;	}	public String analysisResult(String data) {		String dataXml = data;		Document doc = null;		try {			doc = DocumentHelper.parseText(dataXml); // 将字符串转为XML			Element rootElt = doc.getRootElement(); // 获取根节点			Element status = rootElt.element("Status");			String status_value = status.getText();			if (status_value.equals("1")) {// 失败				Element error = rootElt.element("Error");				String error_value = error.getText();				Attribute error_id = error.attribute("id");				String error_id_value = error_id.getValue();				Attribute error_code = error.attribute("code");				String error_code_value = error_code.getValue();				Attribute error_name = error.attribute("name");				String error_name_value = error_name.getValue();			}		} catch (Exception e) {			e.printStackTrace();		}		return null;	}}二、使用wsdl2java把WSDL文件转成本地类,然后像本地类一样使用,即可。1、首先创建调用ws的web项目,就一个普通的web项目就行; 这里写图片描述 2、通过右击项目-new-other-web Services,如下图 这里写图片描述3输入wsdl地址4、点击完成后自动生成服务端代码:5、调用


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表