栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

RPC(Axis2)方式调用WebService通用类

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

RPC(Axis2)方式调用WebService通用类

SpringBoot添加Axis2依赖

     
            org.apache.axis2
            axis2-kernel
            1.7.9
        
        
            org.apache.axis2
            axis2-ant-plugin
            1.7.9
        
        
            org.apache.axis2
            axis2-corba
            1.7.9
        
        
            org.apache.axis2
            axis2-jaxws
            1.7.9
        
        
            org.apache.axis2
            axis2-spring
            1.7.9
        

工具类:此工具类可直接访问wsdl的方法,包括头信息的添加以及请求参数和响应值的通用封装。

package org.springblade.common.utils;


import com.alibaba.fastjson.JSONObject;
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.rpc.client.RPCServiceClient;
import javax.wsdl.Definition;
import javax.wsdl.WSDLException;
import javax.wsdl.factory.WSDLFactory;
import javax.wsdl.xml.WSDLReader;
import javax.xml.namespace.QName;
import java.lang.reflect.Type;
import java.util.*;



public class WebServiceUtils {

	private static WebServiceUtils instance = new WebServiceUtils();

	public WebServiceUtils() {
	}

	public static WebServiceUtils getInstance(){
		return instance;
	}

	
	public  T convertMapToJavaObject(HashMap hashMap, T t) {
		String json = JSONObject.toJSONString(hashMap);
		return JSONObject.parseObject(json, (Type) t.getClass());
	}


	
	public RPCServiceClient addAuth(String url, String username, String password, String company) throws AxisFault, WSDLException {
		// 使用RPC方式调用WebService
		RPCServiceClient serviceClient = new RPCServiceClient();
		// 指定调用WebService的URL
		serviceClient.setTargetEPR(new EndpointReference(url));
		//添加头信息
		OMElement head = addHeader(username, password, company);
		serviceClient.addHeader(head);
		return serviceClient;
	}

	
	public HashMap request(RPCServiceClient serviceClient, String url, String methodName, String entityName, HashMap requestParams) throws Exception {

		OMElement method = setParams(url, methodName, entityName, requestParams);
		OMElement element = serviceClient.sendReceive(method);
		return getResult(element);
	}

	
	public HashMap request(RPCServiceClient serviceClient, String url, String methodName, HashMap requestParams) throws Exception {

		OMElement method = setParams(url, methodName, getWsdlEntityName(url), requestParams);
		OMElement element = serviceClient.sendReceive(method);
		return getResult(element);
	}

	
	public List request(RPCServiceClient serviceClient, String url, String methodName, String entityName, List list) throws Exception {
		OMElement method = setParams(url, methodName, entityName, list);
		OMElement element = serviceClient.sendReceive(method);
		return getResultList(element);
	}

	
	public List request(RPCServiceClient serviceClient, String url, String methodName, List list) throws Exception {
		OMElement method = setParams(url, methodName, getWsdlEntityName(url), list);
		OMElement element = serviceClient.sendReceive(method);
		return getResultList(element);
	}

	
	public HashMap request(RPCServiceClient serviceClient, String url, String methodName, String entityName, HashMap tableHead, List tableBody) throws Exception {
		OMElement method = setParams(url, methodName, entityName, tableHead, tableBody);
		OMElement element = serviceClient.sendReceive(method);
		return getHeadAndBodyResult(element);
	}


	
	public HashMap request(RPCServiceClient serviceClient, String url, String methodName, HashMap tableHead, List tableBody) throws Exception {
		OMElement method = setParams(url, methodName, getWsdlEntityName(url), tableHead, tableBody);
		OMElement element = serviceClient.sendReceive(method);
		return getHeadAndBodyResult(element);
	}

	
	public HashMap getResult(OMElement element) {
		HashMap resultMap = new HashMap<>();
		Iterator it = element.getFirstElement().getFirstElement().getFirstElement().getChildren();
		while (it.hasNext()) {
			OMElement om = it.next();
			resultMap.put(om.getLocalName(), om.getText());
		}
		return resultMap;
	}

	
	public List getResultList(OMElement element) {
		List list = new ArrayList<>();
		Iterator it = element.getFirstElement().getFirstElement().getChildren();
		//多个实体
		while (it.hasNext()) {
			OMElement next = it.next();
			//迭代属性
			Iterator attributes = next.getChildren();
			HashMap resultMap = new HashMap<>();
			while (attributes.hasNext()) {
				OMElement om = attributes.next();
				resultMap.put(om.getLocalName(), om.getText());
			}
			list.add(resultMap);
		}
		return list;
	}

	
	public HashMap getHeadAndBodyResult(OMElement element) {
		HashMap headAndBodyMap = new HashMap<>();
		HashMap resultMap = new HashMap<>();
		Iterator it = element.getFirstElement().getFirstElement().getFirstElement().getChildren();
		List list = new ArrayList<>();
		while (it.hasNext()) {
			OMElement om = it.next();
			//子节点
			if (om.getLocalName().equals("Component")) {
				Iterator componentAttributes = om.getChildren();
				HashMap componentMap = new HashMap<>();
				while (componentAttributes.hasNext()) {
					OMElement attribute = componentAttributes.next();
					componentMap.put(attribute.getLocalName(), attribute.getText());
				}
				list.add(componentMap);
			} else {
				resultMap.put(om.getLocalName(), om.getText());
			}
		}
		headAndBodyMap.put("head", resultMap);
		headAndBodyMap.put("body", list);
		return headAndBodyMap;
	}

	
	public OMElement setParams(String url, String methodName, String entityName, HashMap hashMap) throws WSDLException {
		OMFactory fac = OMAbstractFactory.getOMFactory();
		OMNamespace omNs = fac.createOMNamespace(getTargetNamespace(url), "");
		OMElement method = fac.createOMElement(methodName, omNs);
		OMElement createRequest = fac.createOMElement("CreateRequest", null);
		OMElement dataAreaOm = fac.createOMElement("DataArea", null);

		OMElement entity = fac.createOMElement(entityName, null);
		for (Map.Entry entry : hashMap.entrySet()) {
			OMElement element = fac.createOMElement(entry.getKey(), null);
			element.setText(entry.getValue());
			entity.addChild(element);
		}
		dataAreaOm.addChild(entity);
		createRequest.addChild(dataAreaOm);
		method.addChild(createRequest);
		method.build();
		return method;
	}

	
	public OMElement setParams(String url, String methodName, String entityName, List list) throws WSDLException {
		OMFactory fac = OMAbstractFactory.getOMFactory();
		OMNamespace omNs = fac.createOMNamespace(getTargetNamespace(url), "");
		OMElement method = fac.createOMElement(methodName, omNs);
		OMElement createRequest = fac.createOMElement("CreateRequest", null);
		OMElement dataAreaOm = fac.createOMElement("DataArea", null);
		for (HashMap hashMap : list) {
			OMElement entity = fac.createOMElement(entityName, null);
			for (Map.Entry entry : hashMap.entrySet()) {
				OMElement element = fac.createOMElement(entry.getKey(), null);
				element.setText(entry.getValue());
				entity.addChild(element);
			}
			dataAreaOm.addChild(entity);
		}
		createRequest.addChild(dataAreaOm);
		method.addChild(createRequest);
		method.build();
		return method;
	}


	
	public OMElement setParams(String url, String methodName, String entityName, HashMap hashMap, List list) throws WSDLException {
		OMFactory fac = OMAbstractFactory.getOMFactory();
		OMNamespace omNs = fac.createOMNamespace(getTargetNamespace(url), "");
		OMElement method = fac.createOMElement(methodName, omNs);
		OMElement createRequest = fac.createOMElement("CreateRequest", null);
		OMElement dataAreaOm = fac.createOMElement("DataArea", null);

		OMElement entity = fac.createOMElement(entityName, null);
		for (Map.Entry entry : hashMap.entrySet()) {
			OMElement element = fac.createOMElement(entry.getKey(), null);
			element.setText(entry.getValue());
			entity.addChild(element);
		}
		//多个子表行
		for (HashMap map : list) {
			OMElement component = fac.createOMElement("Component", null);
			for (Map.Entry entry : map.entrySet()) {
				OMElement element = fac.createOMElement(entry.getKey(), null);
				element.setText(entry.getValue());
				component.addChild(element);
			}
			entity.addChild(component);
		}
		dataAreaOm.addChild(entity);
		createRequest.addChild(dataAreaOm);
		method.addChild(createRequest);
		method.build();
		return method;
	}

	
	public OMElement addHeader(String username, String password, String company) throws WSDLException {
		OMFactory omFactory = OMAbstractFactory.getOMFactory();
		OMElement head = omFactory.createOMElement("Activation", null);
		OMElement usernameElement = omFactory.createOMElement("username", null);
		usernameElement.setText(username);
		OMElement passwordElement = omFactory.createOMElement("password", null);
		passwordElement.setText(password);
		OMElement companyElement = omFactory.createOMElement("company", null);
		companyElement.setText(company);
		head.addChild(usernameElement);
		head.addChild(passwordElement);
		head.addChild(companyElement);
		return head;
	}

	
	public String getTargetNamespace(String url) throws WSDLException {
		WSDLFactory factory = null;
		factory = WSDLFactory.newInstance();
		WSDLReader reader = factory.newWSDLReader();
		reader.setFeature("javax.wsdl.verbose", true);
		reader.setFeature("javax.wsdl.importDocuments", true);
		Definition def = reader.readWSDL(url);
		String namespaceURI = def.getTargetNamespace();
		System.out.println("targetnamesapce:" + namespaceURI);
		return namespaceURI;

	}

	
	public String getWsdlEntityName(String url) throws WSDLException {
		WSDLFactory factory = WSDLFactory.newInstance();
		WSDLReader reader = factory.newWSDLReader();
		reader.setFeature("javax.wsdl.verbose", true);
		reader.setFeature("javax.wsdl.importDocuments", true);
		Definition def = reader.readWSDL(url);
		QName qname = def.getQName();
		return qname.getLocalPart();
	}

}

 使用 示例:

package org.springblade.common.utils;

import com.alibaba.fastjson.JSONObject;
import org.apache.axis2.rpc.client.RPCServiceClient;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class WebServiceDemo {
	public static void main(String[] args) {
		WebServiceDemo demo = new WebServiceDemo();
		demo.testSimpleData();
		demo.testSimpleMultiData();
		demo.testSendComplexData();
	}

	public void testSimpleData()
	{
		String url = "http://192.168.2.68:8312/c4ws/services/TransferOrder/test?wsdl";
		try {
			RPCServiceClient serviceClient = WebServiceUtils.getInstance().addAuth(url,"zhuyi", "Admin1888", "150");
			//请求参数
			HashMap hashMap = new HashMap<>();
			hashMap.put("wwid", "ww008811");
			hashMap.put("wstp", "0001");
			hashMap.put("otbp", "205xxx1927");
			hashMap.put("item", "89xxx14234");
			hashMap.put("qoor", "55");

			HashMap resultMap =  WebServiceUtils.getInstance().request(serviceClient,url,"create","TransferOrder",hashMap);
			for (Map.Entry entry : resultMap.entrySet()) {
				System.out.println(entry.getKey() + "::" + entry.getValue());
			}
			TransferOrder  transferOrder = WebServiceUtils.getInstance().convertMapToJavaObject(resultMap,new TransferOrder());
			System.out.println("KKKK:"+transferOrder.getWwid());
		} catch (Exception e) {
			System.out.println(e.getMessage());
			e.printStackTrace();
		}
	}

	public void testSimpleMultiData()
	{
		String url = "http://192.168.2.68:8312/c4ws/services/TransferOrder/test?wsdl";
		try {
			RPCServiceClient serviceClient = WebServiceUtils.getInstance().addAuth(url,"zhuyi", "Admin1888", "150");
			List list = new ArrayList<>();
			//请求参数
			HashMap hashMap = new HashMap<>();
			hashMap.put("wwid", "ww008802");
			hashMap.put("wstp", "0001");
			hashMap.put("otbp", "2050xx927");
			hashMap.put("item", "8980xxx14234");
			hashMap.put("qoor", "55");
			list.add(hashMap);

			hashMap = new HashMap<>();
			hashMap.put("wwid", "ww008803");
			hashMap.put("wstp", "0002");
			hashMap.put("otbp", "205bb01927");
			hashMap.put("item", "898bbb2314234");
			hashMap.put("qoor", "44");
			list.add(hashMap);

			//HashMap resultMap = request(serviceClient,url,"create","TransferOrder",hashMap);
			List resultList =  WebServiceUtils.getInstance().request(serviceClient,url,"create","TransferOrder",list);
			for(HashMap resultMap : resultList)
			{
				for (Map.Entry entry : resultMap.entrySet()) {
					System.out.println(entry.getKey() + "::" + entry.getValue());
				}
				//String json = JSONObject.toJSONString(resultMap);
				//TransferOrder transferOrder =  JSONObject.parseObject(json,TransferOrder.class);
				TransferOrder  transferOrder = WebServiceUtils.getInstance().convertMapToJavaObject(resultMap,new TransferOrder());
				System.out.println("KKKK:"+transferOrder.getWwid());
			}



		} catch (Exception e) {
			System.out.println(e.getMessage());
			e.printStackTrace();
		}
	}

	public void testSendComplexData()
	{
		String url = "http://192.168.2.68:8312/c4ws/services/ProjectContract/test?wsdl";
		try {
			RPCServiceClient serviceClient =  WebServiceUtils.getInstance().addAuth(url, "zhuyi", "Admin1888", "150");
			List list = new ArrayList<>();
			//请求参数 表头
			HashMap headMap = new HashMap<>();
			headMap.put("Guid", "W00014");
			headMap.put("TransDate", "2022-05-12T00:00:00.000+08:00");
			headMap.put("WanweiPijiadan", "1234");
			headMap.put("BusinessPartner", "851ee0053");
			headMap.put("ProjectBP", "1234");
			headMap.put("DocumentType", "1");
			headMap.put("ContractDate", "2022-05-12T00:00:00.000+08:00");
			headMap.put("EffectDate", "2022-05-11T00:00:00.000+08:00");
			headMap.put("ExpireDate", "2022-05-31T00:00:00.000+08:00");
			headMap.put("Project", "abc0001");
			HashMap hashMap = new HashMap<>();
			//表体
			hashMap = new HashMap<>();
			hashMap.put("Guid", "ww008898");
			hashMap.put("WanweiLineID", "1");
			hashMap.put("LineNo", "1");
			hashMap.put("ItemCode", "301cc12");
			hashMap.put("TransDate", "2022-05-12T00:00:00.000+08:00");
			hashMap.put("Price", "55");
			hashMap.put("Quantity", "44");
			list.add(hashMap);

			hashMap = new HashMap<>();
			hashMap.put("Guid", "ww008899");
			hashMap.put("WanweiLineID", "1");
			hashMap.put("LineNo", "1");
			hashMap.put("ItemCode", "301ee12");
			hashMap.put("TransDate", "2022-05-12T00:00:00.000+08:00");
			hashMap.put("Price", "22");
			hashMap.put("Quantity", "33");
			list.add(hashMap);

			//HashMap resultMap = request(serviceClient,url,"create","TransferOrder",hashMap);
			HashMap result =  WebServiceUtils.getInstance().request(serviceClient, url, "create",  headMap, list);
			HashMap resultHead = (HashMap) result.get("head");
			for (Map.Entry entry : resultHead.entrySet()) {
				System.out.println("头:" + entry.getKey() + "::" + entry.getValue());
			}

			List> resultList = (List>) result.get("body");
			for (HashMap resultMap : resultList) {
				for (Map.Entry entry : resultMap.entrySet()) {
					System.out.println("体:" + entry.getKey() + "::" + entry.getValue());
				}
				String json = JSONObject.toJSONString(resultMap);
				TransferOrder transferOrder = JSONObject.parseObject(json, TransferOrder.class);
				System.out.println("KKKK:" + transferOrder.getWwid());
			}


		} catch (Exception e) {
			System.out.println(e.getMessage());
			e.printStackTrace();
		}
	}
}

工具类自动生成的请求Body如下图所示

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/876808.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号