美文网首页
顺丰丰桥接口开发-java(工具类)

顺丰丰桥接口开发-java(工具类)

作者: 我想你是不知道的 | 来源:发表于2019-10-14 17:16 被阅读0次

    上一篇讲到我们用的是xml与bean之间的转换的方式来处理数据,那么就需要用到一些类库来解决,网上搜一下JAXBContext,就有很多相关的文章介绍(感谢大咖们的贡献),主要涉及两个方法如下:

    /**
         * java对象转换为xml文件
         * @param obj  对象数据
         * @param load    java对象.Class
         * @return    xml文件的String
         * @throws JAXBException    
         */
        public static String beanToXml(Object obj,Class<?> load) throws JAXBException{
            JAXBContext context = JAXBContext.newInstance(load);
            Marshaller marshaller = context.createMarshaller();
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
            marshaller.setProperty(Marshaller.JAXB_ENCODING, "utf-8");
            marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true); //去掉头部
            StringWriter writer = new StringWriter();
            marshaller.marshal(obj,writer);
            return writer.toString();
        }
        
        /**
         * xml文件配置转换为对象
         * @param xml  xml数据
         * @param load    java对象.Class
         * @return    java对象
         * @throws JAXBException    
         * @throws IOException
         */
        public static Object xmlToBean(String xml, Class<?> load) throws JAXBException, IOException{
            JAXBContext context = JAXBContext.newInstance(load);  
            Unmarshaller unmarshaller = context.createUnmarshaller(); 
            Object object = unmarshaller.unmarshal(new StringReader(xml));
            return object;
        }
    

    另外与丰桥的数据对接,必然要用到http工具类,可以使用HttpClient,或者Okhttp等,看个人喜欢,参考如下:

    /**
         * @param url
         * @param content
         * @return
         * @throws Exception
         */
        public static String post(String url, Map params) throws Exception {
            HttpClient httpclient = getHttpClient();
        
            HttpPost httppost = new HttpPost(url); 
            httppost.setHeader("Content-Type","application/x-www-form-urlencoded;charset=utf-8");
            
            NameValuePair[] nvps = new NameValuePair[params.size()];
            int index = 0;
            for(java.util.Iterator it = params.keySet().iterator(); it.hasNext(); ) {
                String key = (String) it.next();
                nvps[index++] = new BasicNameValuePair(key, (String) params.get(key));
            }
            
            httppost.setEntity(new UrlEncodedFormEntity(nvps, "utf-8"));
            
            HttpResponse response = null;
            
            response = httpclient.execute(httppost);
            System.out.println(response.getStatusLine());
            HttpEntity resEntity = response.getEntity();
    
            return (resEntity ==null) ?null : EntityUtils.toString(resEntity);
        }
    

    有了上面这个方法,就可以开始测试接口是否正常了,如下:

            private static void testRequest() throws Exception {
                String reqURL="http://bsp-oisp.sf-express.com/bsp-oisp/sfexpressService";
                String reqXml="<Request service = \"OrderService\" lang = \"zh-CN\" > \n" + 
                        "<Head>SLKJ2019</Head>\n" + 
                        "<Body>\n" + 
                        "  <Order \n" + 
                        "   orderid=\"SFKD-20160219000019\" \n" + 
                        "   j_company=\"深圳宝龙达信息技术股份有限公司\" \n" + 
                        "   j_contact=\"邓丽君\" \n" + 
                        "   j_tel=\"15323233432\" \n" + 
                        "   j_mobile=\"15322234342\" \n" + 
                        "   j_province=\"广东省\" \n" + 
                        "   j_city=\"深圳市\"\n" + 
                        "   j_county=\"南山区\"\n" + 
                        "   j_address=\"广东省深圳市南山区西丽镇塘朗同富裕工业城7栋\" \n" + 
                        "   d_contact=\"四海\" d_tel=\"15023434543\" \n" + 
                        "   d_mobile=\"15423456545\" \n" + 
                        "   d_province=\"广东省\" \n" + 
                        "   d_city=\"深圳市\" \n" + 
                        "   d_county=\"南山区\" \n" + 
                        "   d_address=\"科技园软件产业基地\" \n" + 
                        "   express_type=\"1\" \n" + 
                        "   pay_method=\"1\" \n" + 
                        "   custid=\"7551234567\" \n" + 
                        "   parcel_quantity=\"1\" \n" + 
                        "   is_docall=\"0\" \n" + 
                        "   sendstarttime=\"\"  \n" + 
                        "   remark=\"电子产品 笔记本+显卡\"\n" + 
                        "        is_unified_waybill_no=\"1\">\n" + 
                        "</Order>\n" + 
                        "</Body> \n" + 
                        "</Request>";//接口请求对应得xml报文
            
                String myReqXML = reqXml.replaceAll("SLKJ2019", clientCode);
                String verifyCode = md5EncryptAndBase64(myReqXML + checkWord);
                
                Map map = new LinkedHashMap();
                map.put("xml", myReqXML);
                map.put("verifyCode", verifyCode);
                
                String response = HttpClientUtils.post(reqURL, map);;
            
                System.out.println(response);
            }
    

    custid,clientCode,checkWord要换成自己的,没什么意外的话,返回结果类似官方给出的:

    <Response service="OrderService">
        <Head>OK</Head>
        <Body>
           <OrderResponse filter_result="2" destcode="020" mailno="SF4448355589333" origincode="755" orderid="QIAO-20180524001"/>
        </Body>
    </Response>
    

    好了,先整杯好茶再继续……

    相关文章

      网友评论

          本文标题:顺丰丰桥接口开发-java(工具类)

          本文链接:https://www.haomeiwen.com/subject/dxdductx.html