前言
最近需要对接另一个系统提供的 WebService 接口,在网上查了很多种方法都不行,这里记录一下我使用的方法,仅供大家参考。注意我这里使用的是 Axis 而不是 Axis2,可能是提供的 WebService 接口版本太老了,我使用 Axis2 也无法调用。
实现
引入 Maven
<!-- Axis 调用 WebService 接口 Start --> <dependency> <groupId>org.apache.axis</groupId> <artifactId>axis</artifactId> <version>1.4</version> </dependency> <dependency> <groupId>javax.xml.rpc</groupId> <artifactId>javax.xml.rpc-api</artifactId> <version>1.1.1</version> </dependency> <dependency> <groupId>org.apache.geronimo.bundles</groupId> <artifactId>commons-discovery</artifactId> <version>0.4_1</version> </dependency> <!-- Axis 调用 WebService 接口 End -->
三个包都必须引入,不然会报错。
代码
@Slf4j public class WebServiceUtil { private final static String URL = "http://ip:port/WebService/WebServiceSOAP2.asmx"; private final static String AUTH_KEY = "123"; /** * 发送请求 * * @param localPart 接口名 * @param desc 接口描述 * @param params 请求参数 * @param rClass 响应实体 * @return R */ @SneakyThrows private static <Q, R> R request(String localPart, String desc, Q params, Class<R> rClass) { // 转换为xml String requestXml = XmlUtil.beanToXML(params); log.info("WebService-{}接口请求参数为:{}", desc, requestXml); Service service = new Service(); Call call = (Call) service.createCall(); call.setTimeout(30000); call.setTargetEndpointAddress(new URL(URL)); call.setSOAPActionURI("http://tempuri.org/" + localPart); // 设置操作的名称 call.setOperationName(new QName("http://tempuri.org/", localPart)); // 设置返回的数据类型 call.setReturnType(XMLType.XSD_STRING); // 设置参数 call.addParameter(new QName("http://tempuri.org/", "authkey"), XMLType.XSD_STRING, ParameterMode.IN); call.addParameter(new QName("http://tempuri.org/", "Request_Xml"), XMLType.XSD_STRING, ParameterMode.IN); // 执行调用 String responseXml = (String) call.invoke(new Object[]{AUTH_KEY, requestXml}); // 解析 log.info("HisWebService-{}接口请求成功,响应参数为:{}", desc, responseXml); return JSONUtil.xmlToJson(responseXml).getJSONObject("Response").toBean(rClass); } }
出入参按照接口要求来传,代码仅供参考。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于