JAVA 调用 webService 跨平台请求数据返回xml(标准通用标记语言)

 public void runTimeOrder() throws Exception {
        // TODO Auto-generated method stub
        Map params = new HashMap();
        params.put("update", 1);
        List<OrderForm> orderForms = this.orderFormDAO.query("select obj from OrderForm obj where obj.update_status=:update", params, -1, 10);
        if(orderForms.size() > 0){
            for(OrderForm order : orderForms){
                if(order.getOrder_status() == 30 && order.getUpdate_status() == 1){
                    Map express_map = Json.fromJson(Map.class,
                            order.getExpress_info());
                    //调用ddu
                     String sendMsg = appendXmlContextTow(order.getNumber(),order.getCode());//拼接请求报文
                     InputStreamReader isr = null;// 开启HTTP连接
                     BufferedReader inReader = null;
                     StringBuffer result = null;
                     OutputStream outObject = null;
                    
                     URL url = new URL("***/webservice.php?wsdl");
                     HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
                     //设置请求方式默认为GET
                     httpConn.setRequestMethod("POST");
                     httpConn.setRequestProperty("Content-Length",
                                    String.valueOf(sendMsg.getBytes().length));
                    httpConn.setRequestProperty("Content-Type", "text/xml; charset=utf-8");
                    httpConn.setDoOutput(true);//设置是否向httpUrlConnection输出,因为这个是post请求,参数要放在http正文内,因此需要设为true, 默认情况下是false;
                    httpConn.setDoInput(true); //设置是否从httpUrlConnection读入,默认情况下是true;
                    outObject = httpConn.getOutputStream();// 进行HTTP请求,此处getOutputStream会隐含的进行connect(即:如同调用上面的connect()方法, 所以在开发中不调用上述的connect()也可以)
                    outObject.write(sendMsg.getBytes());
                    if (200 != (httpConn.getResponseCode())) {
                        throw new Exception("HTTP Request is not success, Response code is " + httpConn.getResponseCode());
                    }
                    isr = new InputStreamReader(
                            httpConn.getInputStream(), "utf-8"); // 获取HTTP响应流(响应数据)
                    inReader = new BufferedReader(isr);
                    result = new StringBuffer();
                    String inputLine;
                    while ((inputLine = inReader.readLine()) != null) {
                        result.append(inputLine);
                    }
                    String xmlResult = result.toString().replace("<", "<");
                    //报文返回状态码,1表示正常
                    String responseCode = SOAPUtils.getXmlMessageByName(xmlResult, "responseCode");
                    if("1".equals(responseCode)){
                        JSONArray jsonArray = dom4jXml(xmlResult);
                        if(jsonArray != null){
                            List<String> list = new ArrayList<String>();
                            for(Object obj : jsonArray){
                                JSONObject jo = (JSONObject) obj;
                                String status = jo.get("status").toString();
                                list.add(status);
                            }
                            if(list.contains("DELIVERED")){
                                order.setUpdate_status(-1);
                            }else{
                                order.setUpdate_status(2);
                            }
                        }
                        order.setLogistics_info(jsonArray.toString());
                        this.orderFormDAO.update(order);
                    }
                }
            }
        }else{
            params.clear();
            params.put("update", 2);
            orderForms = this.orderFormDAO.query("select obj from OrderForm obj where obj.update_status=:update", params, -1, -1);
            if(orderForms.size() > 0){
                for(OrderForm order : orderForms){
                    order.setUpdate_status(1);
                    this.orderFormDAO.update(order);
                }
            }
        }
    }
    

/**
     * 解析ddu返回xml
     * @param interfaceData
     * @return
     * @throws Exception
     */
    public static JSONArray dom4jXml(String interfaceData) throws Exception{
        List<Element> elementList = null;
        List<Ddu> Ddus = null;
        try {
            SAXReader sr = new SAXReader();
            Document document = sr.read(new ByteArrayInputStream(interfaceData.getBytes()));
            Element root = document.getRootElement();
            elementList = root.elements();
            Ddus = new ArrayList();
        } catch (DocumentException e) {
            e.printStackTrace();
        }

        for (Element e : elementList) {
            // 解析标签下一级标签
            Element e1 = e.element("GetStatusDetailsResponse");
            Element e2 = e1.element("return");
            Element e3 = e2.element("responseArray");
            List<Element> elementList1 = e3.elements();
            for (Element el:elementList1){
                Ddu ddu = new Ddu();
                ddu.setTime(el.elementText("SDate"));
                ddu.setStatus(el.elementText("CStatus"));
                ddu.setLocation(el.elementText("SLocation"));
                ddu.setDetails(el.elementText("SDetails"));
                Ddus.add(ddu);
            }
        }
            return JSONArray.fromObject(Ddus);
    }

 

 // 构建请求报文

private static String appendXmlContextTow(String BookingNumber, String CompanyCode) {
          
            List<String> list  = new ArrayList<String>();
            StringBuffer stringBuffer = new StringBuffer("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +
                    "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:com=\"http://com.foresee.top.service/\">\n" +
                    "  <soapenv:Body>\n" +
                    "  <GetStatusDetails>\n" + //该标签为请求方法名
                    "  <SaveProductResult>\n" +
                    "    <BookingNumber>" + BookingNumber+ "</BookingNumber>\n" +
                    "    <CompanyCode>" + CompanyCode+ "</CompanyCode>\n" +
                    "  </SaveProductResult>\n" +
                    "  </GetStatusDetails>\n" +
                    "  </soapenv:Body>\n" +
                    "</soapenv:Envelope>");
            return stringBuffer.toString();
        }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值