java 调用webservice入参并解析xml结果

本文介绍了一个使用Java Axis2客户端库调用WebService的示例,包括设置请求参数、执行请求并解析返回结果的过程。示例中演示了如何通过反射机制填充请求对象及如何将返回的XML数据转换为Map。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import com.yemast.roadcqc.server.webserivce.login.request.UserInfoRequest;
import lombok.extern.slf4j.Slf4j;
import org.apache.axiom.om.*;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.client.ServiceClient;
import javax.xml.namespace.QName;
import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

@Slf4j
public class Test {
    static final String url = "http://localhost:8091/roadcqc_webservice_war_exploded/services/loginIntf?wsdl";
    static final String method = "getToken";
    static final String targetNamespace = "http://login.webserivce.server.roadcqc.yemast.com";

    public static void main(String[] args) {
        axis2WebService();
    }
    private static void axis2WebService() {
        try {
            // 参数值
            UserInfoRequest u = new UserInfoRequest();
            u.setUploadDateTime("2020-06-01");
            u.setUserName("admin");
            u.setPassword("admin");
            u.setUploadDateTime("2020-01-1");
            u.setToken("");
            OMElement o = requestWs(targetNamespace,url,method,u);
            Map m = getResultToMap(o);
            System.out.println(m.toString());
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
    private static OMElement requestWs(String targetNamespace, String url, String method, Object o) {
        try {
            ServiceClient sender = new ServiceClient();
            EndpointReference endpointReference = new EndpointReference(url);
            Options options = new Options();
            options.setTo(endpointReference);
            sender.setOptions(options);
            OMFactory fac = OMAbstractFactory.getOMFactory();
            // 这个和qname差不多,设置命名空间
            OMNamespace omNs = fac.createOMNamespace(targetNamespace, ""); //这个是namespace的str
            OMElement data = fac.createOMElement(method, omNs);   //method是方法
            QName qname = new QName("request"); //固定的request参数 webservice接收参数的名称
            OMElement inner = fac.createOMElement(qname);
            if (o != null) { //通过反射获取参数
                Class c = o.getClass();
                Field[] fields = c.getDeclaredFields();
                for (Field f : fields) {
                    f.setAccessible(true);
                    QName qname1 = new QName(f.getName());
                    OMElement inner1 = fac.createOMElement(qname1);
                    inner1.setText(String.valueOf(f.get(o)));
                    inner.addChild(inner1);
                }
            }
            data.addChild(inner);
            // 发送数据,返回结果
            OMElement omElement = sender.sendReceive(data);
            return omElement;
        } catch (Exception e) {
            log.error("ws error:", e);
        }
        return null;
    }

    //解析返回的结果
    public static Map<String, Object> getResultToMap(OMElement element) {
        Map<String, Object> map = new HashMap<>();
        if(element == null ) return  map;

        Iterator iterator = element.getChildElements();//response
        while (iterator.hasNext()) { //n:return
            OMElement result = (OMElement) iterator.next();
            Iterator iterator_layer2 = result.getChildElements();
            while (iterator_layer2.hasNext()) { // 结果
                OMElement result_2 = (OMElement) iterator_layer2.next();
                String key = result_2.getLocalName();
                String value = result_2.getText();
                map.put(key, value);
            }
        }
        return map;
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值