java 调用webservice并解析xml结果

 
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; } }

 

posted @ 2020-06-18 15:30  冬天不眠  阅读(2008)  评论(0编辑  收藏  举报