SpringBoot+Axis2远程调用WebService

当时用这个主要是为了 解决cxf连接webservice的 undefined element declaration s:schema 错误,然后自己弄了一个工具类出来,方便使用。

步骤:

    • 第一步:加入axis2的依赖
    • 第二步:创建自定义工具类
    • 第三步:调用方法

第一步:加入axis2的依赖

pom.xml


<dependency><groupId>org.apache.axis2groupId><artifactId>axis2-springartifactId><version>1.7.8version><scope>runtimescope>
dependency>
<dependency><groupId>org.apache.axis2groupId><artifactId>axis2-transport-httpartifactId><version>1.7.8version><scope>runtimescope>
dependency>
<dependency><groupId>org.apache.axis2groupId><artifactId>axis2-transport-localartifactId><version>1.7.8version><scope>runtimescope>
dependency>
<dependency><groupId>org.apache.axis2groupId><artifactId>axis2-xmlbeansartifactId><version>1.7.8version>
dependency>
<dependency><groupId>org.apache.ws.commons.axiomgroupId><artifactId>axiom-apiartifactId><version>1.2.20version>
dependency>
<dependency><groupId>org.apache.axis2groupId><artifactId>axis2-jaxwsartifactId><version>1.7.8version>
dependency>

第二步:创建自定义工具类

Axis2ClientUtils.java

/**
* axis2调用webservice工具类
*
* @author lwx
* @since 2022-09-16
*/
public class Axis2ClientUtils {/*** 使用axis2调用webservice* @param url wsdl地址* @param targetNamespace soap命名空间* @param method 目标方法* @param params [参数名,参数值,参数名1,参数值1,...] 参数集合* @return 调用结果* @throws AxisFault*/public static String invokeAxis2Server(String url, String targetNamespace, String method, Object... params) throws AxisFault {ServiceClient serviceClient = new ServiceClient();Options options = serviceClient.getOptions();// 指定调用WebService的URLEndpointReference targetEPR = new EndpointReference(url);options.setTo(targetEPR);// 确定调用方法options.setAction(targetNamespace + method);OMFactory fac = OMAbstractFactory.getOMFactory();// 指定命名空间OMNamespace omNs = fac.createOMNamespace(targetNamespace, "");// 指定方法OMElement methodElement = fac.createOMElement(method, omNs);//为方法指定参数for (int i = 0; i < params.length; i=i+2) {OMElement theRegionCode = fac.createOMElement(String.valueOf(params[i]), omNs);theRegionCode.setText(String.valueOf(params[i+1]));methodElement.addChild(theRegionCode);}methodElement.build();//远程调用web服务OMElement omElement = serviceClient.sendReceive(methodElement);// 结果集(根据情况修改)/*String result = null;Iterator childElements = omElement.getChildElements();while (childElements.hasNext()) {OMElement elem = (OMElement) childElements.next();result = elem.getText();}*/String result = omElement.getFirstElement().toString();return result;}
}

第三步:调用方法

String url = ""; // webservice接口地址,不带?wsdl
String targetNamespace = ""; // 接口文档的targetNamespace
String method = ""; // webservice方法名
String paramName = ""; // webservice接口参数的参数名
String param = ""; // webservice接口参数try {String result = Axis2ClientUtils.invokeAxis2Server(url, targetNamespace, method, paramName, param);// todo 处理返回的xml字符串:result} catch (Exception e) {e.printStackTrace();
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部