顺丰--Java丰桥接口整体封装(下单、查询、打印)
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                顺丰--Java丰桥接口整体封装(下单、查询、打印)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                1、豐橋接口調用返回的都是xml格式內容,要去封裝一個對象映射返回結果。下面類就是映射對象:
import java.io.Serializable; import java.util.List;import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlValue;@XmlAccessorType(XmlAccessType.FIELD) @XmlRootElement(name = "Response") public class SfExpressResponse implements Serializable{private static final long serialVersionUID = 1L;//響應狀態@XmlElement(name = "Head")private String Head;//響應失敗原因@XmlElement(name = "ERROR")private ERROR ERROR;//響應結果@XmlElement(name = "Body")private Body Body;@XmlAccessorType(XmlAccessType.NONE)public static class ERROR implements Serializable{private static final long serialVersionUID = 1L;@XmlAttribute(name = "code")private String code;@XmlValueprivate String text;public String getCode() {return code;}public void setCode(String code) {this.code = code;}public String getText() {return text;}public void setText(String text) {this.text = text;}@Overridepublic String toString() {return "ERROR [code=" + code + ", text=" + text + "]";}}@XmlAccessorType(XmlAccessType.NONE)public static class Body implements Serializable{private static final long serialVersionUID = 1L;@XmlElement(name = "OrderResponse")private OrderResponse OrderResponse;@XmlElement(name = "RouteResponse")private RouteResponse RouteResponse;public SfExpressResponse.OrderResponse getOrderResponse() {return OrderResponse;}public void setOrderResponse(SfExpressResponse.OrderResponse orderResponse) {OrderResponse = orderResponse;}public SfExpressResponse.RouteResponse getRouteResponse() {return RouteResponse;}public void setRouteResponse(SfExpressResponse.RouteResponse routeResponse) {RouteResponse = routeResponse;}@Overridepublic String toString() {return "Body [OrderResponse=" + OrderResponse + ", RouteResponse="+ RouteResponse + "]";}}@XmlRootElement(name="rls_info")@XmlAccessorType(XmlAccessType.NONE)public static class Rls_info implements Serializable{private static final long serialVersionUID = 1L;@XmlAttribute(name = "invoke_result")private String invoke_result;@XmlElement(name = "rls_detail")private Rls_detail rls_detail;public String getInvoke_result() {return invoke_result;}public void setInvoke_result(String invoke_result) {this.invoke_result = invoke_result;}public Rls_detail getRls_detail() {return rls_detail;}public void setRls_detail(Rls_detail rls_detail) {this.rls_detail = rls_detail;}}@XmlRootElement(name="rls_detail") @XmlAccessorType(XmlAccessType.NONE)public static class Rls_detail implements Serializable{private static final long serialVersionUID = 1L;@XmlAttribute(name = "sourceTransferCode")private String sourceTransferCode;@XmlAttribute(name = "sourceCityCode")private String sourceCityCode;@XmlAttribute(name = "sourceDeptCode")private String sourceDeptCode;@XmlAttribute(name = "sourceTeamCode")private String sourceTeamCode;@XmlAttribute(name = "destCityCode")private String destCityCode;@XmlAttribute(name = "destDeptCode")private String destDeptCode;@XmlAttribute(name = "destDeptCodeMapping")private String destDeptCodeMapping;@XmlAttribute(name = "destTeamCode")private String destTeamCode;@XmlAttribute(name = "destTransferCode")private String destTransferCode;@XmlAttribute(name = "destRouteLabel")private String destRouteLabel;@XmlAttribute(name = "cargoTypeCode")private String cargoTypeCode;@XmlAttribute(name = "limitTypeCode")private String limitTypeCode;@XmlAttribute(name = "expressTypeCode")private String expressTypeCode;@XmlAttribute(name = "twoDimensionCode")private String twoDimensionCode;@XmlAttribute(name = "proCode")private String proCode;@XmlAttribute(name = "printIcon")private String printIcon;@XmlAttribute(name = "codingMapping")private String codingMapping;public String getCodingMapping() {return codingMapping;}public void setCodingMapping(String codingMapping) {this.codingMapping = codingMapping;}public String getPrintIcon() {return printIcon;}public void setPrintIcon(String printIcon) {this.printIcon = printIcon;}public String getDestDeptCodeMapping() {return destDeptCodeMapping;}public void setDestDeptCodeMapping(String destDeptCodeMapping) {this.destDeptCodeMapping = destDeptCodeMapping;}public String getDestTeamCode() {return destTeamCode;}public void setDestTeamCode(String destTeamCode) {this.destTeamCode = destTeamCode;}public String getDestTransferCode() {return destTransferCode;}public void setDestTransferCode(String destTransferCode) {this.destTransferCode = destTransferCode;}public String getSourceTransferCode() {return sourceTransferCode;}public void setSourceTransferCode(String sourceTransferCode) {this.sourceTransferCode = sourceTransferCode;}public String getSourceCityCode() {return sourceCityCode;}public void setSourceCityCode(String sourceCityCode) {this.sourceCityCode = sourceCityCode;}public String getSourceDeptCode() {return sourceDeptCode;}public void setSourceDeptCode(String sourceDeptCode) {this.sourceDeptCode = sourceDeptCode;}public String getSourceTeamCode() {return sourceTeamCode;}public void setSourceTeamCode(String sourceTeamCode) {this.sourceTeamCode = sourceTeamCode;}public String getDestCityCode() {return destCityCode;}public void setDestCityCode(String destCityCode) {this.destCityCode = destCityCode;}public String getDestDeptCode() {return destDeptCode;}public void setDestDeptCode(String destDeptCode) {this.destDeptCode = destDeptCode;}public String getDestRouteLabel() {return destRouteLabel;}public void setDestRouteLabel(String destRouteLabel) {this.destRouteLabel = destRouteLabel;}public String getCargoTypeCode() {return cargoTypeCode;}public void setCargoTypeCode(String cargoTypeCode) {this.cargoTypeCode = cargoTypeCode;}public String getLimitTypeCode() {return limitTypeCode;}public void setLimitTypeCode(String limitTypeCode) {this.limitTypeCode = limitTypeCode;}public String getExpressTypeCode() {return expressTypeCode;}public void setExpressTypeCode(String expressTypeCode) {this.expressTypeCode = expressTypeCode;}public String getTwoDimensionCode() {return twoDimensionCode;}public void setTwoDimensionCode(String twoDimensionCode) {this.twoDimensionCode = twoDimensionCode;}public String getProCode() {return proCode;}public void setProCode(String proCode) {this.proCode = proCode;}}@XmlRootElement(name="OrderResponse")@XmlAccessorType(XmlAccessType.NONE)public static class OrderResponse implements Serializable{private static final long serialVersionUID = 1L;//訂單號@XmlAttribute(name = "orderid")private String orderId;//運單號@XmlAttribute(name = "mailno")private String mailNo;//原寄地區域代碼(可用于順豐電子運單標簽打印)@XmlAttribute(name = "origincode")private String originCode;//目的地區域代碼(可用于順豐電子運單標簽打印)@XmlAttribute(name = "destcode")private String destCode;//篩單結果:1:人工確認 2:可收派 3:不可以收派@XmlAttribute(name = "filter_result")private String filterResult;@XmlElement(name = "rls_info")private Rls_info rls_info;public Rls_info getRls_info() {return rls_info;}public void setRls_info(Rls_info rls_info) {this.rls_info = rls_info;}public String getOrderId() {return orderId;}public void setOrderId(String orderId) {this.orderId = orderId;}public String getMailNo() {return mailNo;}public void setMailNo(String mailNo) {this.mailNo = mailNo;}public String getOriginCode() {return originCode;}public void setOriginCode(String originCode) {this.originCode = originCode;}public String getDestCode() {return destCode;}public void setDestCode(String destCode) {this.destCode = destCode;}public String getFilterResult() {return filterResult;}public void setFilterResult(String filterResult) {this.filterResult = filterResult;}@Overridepublic String toString() {return "OrderResponse [orderId=" + orderId + ", mailNo=" + mailNo+ ", originCode=" + originCode + ", destCode=" + destCode+ ", filterResult=" + filterResult + "]";}}@XmlRootElement(name="RouteResponse")@XmlAccessorType(XmlAccessType.NONE)public static class RouteResponse implements Serializable{private static final long serialVersionUID = 1L;//運單號@XmlAttribute(name = "mailno")private String mailNo;//路由@XmlElement(name = "Route")private List<Route> Route ;public String getMailNo() {return mailNo;}public void setMailNo(String mailNo) {this.mailNo = mailNo;}public List<SfExpressResponse.Route> getRoute() {return Route;}public void setRoute(List<SfExpressResponse.Route> route) {Route = route;}@Overridepublic String toString() {return "RouteResponse [mailNo=" + mailNo + ", Route=" + Route + "]";}}@XmlRootElement(name="Route")@XmlAccessorType(XmlAccessType.NONE)public static class Route implements Serializable{private static final long serialVersionUID = 1L;//路由節點發生的時間@XmlAttribute(name = "accept_time")private String acceptTime;//路由節點具體描述@XmlAttribute(name = "remark")private String remark;//路由節點操作碼@XmlAttribute(name = "opcode")private String opcode;public String getAcceptTime() {return acceptTime;}public void setAcceptTime(String acceptTime) {this.acceptTime = acceptTime;}public String getRemark() {return remark;}public void setRemark(String remark) {this.remark = remark;}public String getOpcode() {return opcode;}public void setOpcode(String opcode) {this.opcode = opcode;}}public String getHead() {return Head;}public void setHead(String head) {Head = head;}public SfExpressResponse.ERROR getERROR() {return ERROR;}public void setERROR(SfExpressResponse.ERROR ERROR) {this.ERROR = ERROR;}public SfExpressResponse.Body getBody() {return Body;}public void setBody(SfExpressResponse.Body body) {Body = body;}@Overridepublic String toString() {return "SfExpressResponse [Head=" + Head + ", ERROR=" + ERROR+ ", Body=" + Body + "]";} }有了上面的類還需要一個xml解析的工具類,為了清楚那個類是哪個包下面的,直接連import一起復制出來:
import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.StringReader; import java.io.StringWriter; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; import javax.xml.bind.Unmarshaller;public class XmlUtils {/** * 將對象直接轉換成String類型的 XML輸出 * * @param obj * @return */ public static String convertToXml(Object obj) { // 創建輸出流 StringWriter sw = new StringWriter(); try { // 利用jdk中自帶的轉換類實現 JAXBContext context = JAXBContext.newInstance(obj.getClass()); Marshaller marshaller = context.createMarshaller(); // 格式化xml輸出的格式 marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); // 將對象轉換成輸出流形式的xml marshaller.marshal(obj, sw); } catch (JAXBException e) { e.printStackTrace(); } return sw.toString(); } /** * 將對象根據路徑轉換成xml文件 * * @param obj * @param path * @return */ public static void convertToXml(Object obj, String path) { try { // 利用jdk中自帶的轉換類實現 JAXBContext context = JAXBContext.newInstance(obj.getClass()); Marshaller marshaller = context.createMarshaller(); // 格式化xml輸出的格式 marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); // 將對象轉換成輸出流形式的xml // 創建輸出流 FileWriter fw = null; try { fw = new FileWriter(path); } catch (IOException e) { e.printStackTrace(); } marshaller.marshal(obj, fw); } catch (JAXBException e) { e.printStackTrace(); } } @SuppressWarnings("unchecked") /** * 將String類型的xml轉換成對象 */ public static Object convertXmlStrToObject(Class clazz, String xmlStr) { Object xmlObject = null; try { JAXBContext context = JAXBContext.newInstance(clazz); // 進行將Xml轉成對象的核心接口 Unmarshaller unmarshaller = context.createUnmarshaller(); StringReader sr = new StringReader(xmlStr); xmlObject = unmarshaller.unmarshal(sr); } catch (JAXBException e) { e.printStackTrace(); } return xmlObject; } @SuppressWarnings("unchecked") /** * 將file類型的xml轉換成對象 */ public static Object convertXmlFileToObject(Class clazz, String xmlPath) { Object xmlObject = null; try { JAXBContext context = JAXBContext.newInstance(clazz); Unmarshaller unmarshaller = context.createUnmarshaller(); FileReader fr = null; try { fr = new FileReader(xmlPath); } catch (FileNotFoundException e) { e.printStackTrace(); } xmlObject = unmarshaller.unmarshal(fr); } catch (JAXBException e) { e.printStackTrace(); } return xmlObject; } }再加一個順豐接口實體類就完事了:
public class SfParam implements Serializable{private static final long serialVersionUID = 1L;private String orderNo; // 客戶運單號 (不能重復)private String mailNo; // 順豐運單號private String jiContact; // 寄件人private String jiCompany; // 寄件人公司private String jiTel; // 寄件人電話private String jiAdress; // 寄件人地址private String jiProvince; // 寄件人省份private String jiCity; // 寄件人城市private String jiCounty; // 寄件人區域private String shouContact; // 收件人private String shouCompany; // 收件人公司private String shouTel; // 收件人電話private String shouAdress; // 收件人地址private String shouProvince; // 收件人省份private String shouCity; // 收件人城市private String shouCounty; // 收件人區域private String orderSn; // 合同號private Double invoiceMoney; // 開票金額private String cargo; // 貨物private String cargoNum; // 貨物 (數量/重量)private String originCode; // 原寄地區域代碼,可用于順豐電子面單標簽打印。private String destCode; // 目的地區域代碼,可用于順豐電子面單標簽打印。private String destRouteLabel;private String qRCode;private Integer source; // 打印機所在地址public Integer getSource() {return source;}public void setSource(Integer source) {this.source = source;}public String getOrderSn() {return orderSn;}public void setOrderSn(String orderSn) {this.orderSn = orderSn;}public Double getInvoiceMoney() {return invoiceMoney;}public void setInvoiceMoney(Double invoiceMoney) {this.invoiceMoney = invoiceMoney;}public String getqRCode() {return qRCode;}public void setqRCode(String qRCode) {this.qRCode = qRCode;}public String getDestRouteLabel() {return destRouteLabel;}public void setDestRouteLabel(String destRouteLabel) {this.destRouteLabel = destRouteLabel;}public Long getMemberId() {return memberId;}public void setMemberId(Long memberId) {this.memberId = memberId;}public String getOriginCode() {return originCode;}public void setOriginCode(String originCode) {this.originCode = originCode;}public String getDestCode() {return destCode;}public void setDestCode(String destCode) {this.destCode = destCode;}public String getMailNo() {return mailNo;}public void setMailNo(String mailNo) {this.mailNo = mailNo;}public String getOrderNo() {return orderNo;}public void setOrderNo(String orderNo) {this.orderNo = orderNo;}public String getJiContact() {return jiContact;}public void setJiContact(String jiContact) {this.jiContact = jiContact;}public String getJiCompany() {return jiCompany;}public void setJiCompany(String jiCompany) {this.jiCompany = jiCompany;}public String getJiTel() {return jiTel;}public void setJiTel(String jiTel) {this.jiTel = jiTel;}public String getJiAdress() {return jiAdress;}public void setJiAdress(String jiAdress) {this.jiAdress = jiAdress;}public String getJiProvince() {return jiProvince;}public void setJiProvince(String jiProvince) {this.jiProvince = jiProvince;}public String getJiCity() {return jiCity;}public void setJiCity(String jiCity) {this.jiCity = jiCity;}public String getJiCounty() {return jiCounty;}public void setJiCounty(String jiCounty) {this.jiCounty = jiCounty;}public String getShouContact() {return shouContact;}public void setShouContact(String shouContact) {this.shouContact = shouContact;}public String getShouCompany() {return shouCompany;}public void setShouCompany(String shouCompany) {this.shouCompany = shouCompany;}public String getShouTel() {return shouTel;}public void setShouTel(String shouTel) {this.shouTel = shouTel;}public String getShouAdress() {return shouAdress;}public void setShouAdress(String shouAdress) {this.shouAdress = shouAdress;}public String getShouProvince() {return shouProvince;}public void setShouProvince(String shouProvince) {this.shouProvince = shouProvince;}public String getShouCity() {return shouCity;}public void setShouCity(String shouCity) {this.shouCity = shouCity;}public String getShouCounty() {return shouCounty;}public void setShouCounty(String shouCounty) {this.shouCounty = shouCounty;}public String getCargo() {return cargo;}public void setCargo(String cargo) {this.cargo = cargo;}public String getCargoNum() {return cargoNum;}public void setCargoNum(String cargoNum) {this.cargoNum = cargoNum;} }就這兩個比較重要,有了上面兩個工具類,順豐接口就方便多了,看一下自己公司所用到的:
String path;private static final Logger logger = Logger.getLogger(SFServiceIml.class); private final String reqURL="https://bsp-oisp.sf-express.com/bsp-oisp/sfexpressService";private final String clientCode="******";//此處替換為您在豐橋平臺獲取的顧客編碼private final String checkword="******";//此處替換為您在豐橋平臺獲取的校驗碼private final String url ="******"; // 打印機地址@Overridepublic SfExpressResponse sfExpressMethod(SfParam params,int type) {// 請求文String requestXml = "";// 請求方法String methodName = "";if (type < 1) {logger.warn("調用接口類型傳錯");return null;}// 1 下單 2 查詢...if (type == 1) {requestXml = getOrderServiceRequestXml(params);methodName = "orderSerivce";}if (type == 2) {requestXml = getOrderSearchServiceRequestXml(params);methodName = "OrderSearchService";}String respXml= CallExpressServiceTools.callSfExpressServiceByCSIM(reqURL, requestXml, clientCode, checkword);logger.info("順豐接口請求:" + "方法:" + methodName + " 返回報文 :" + respXml);SfExpressResponse response = (SfExpressResponse)XmlUtils.convertXmlStrToObject(SfExpressResponse.class, respXml);return response;}/*** 1 順豐下單 xml報文*/private String getOrderServiceRequestXml(SfParam params){//訂單號String orderNo = params.getOrderNo();/*****************寄件方******************/// 公司名稱String j_company = params.getJiCompany() == null ? "" : params.getJiCompany();// 聯系人String j_contact = params.getJiContact();// 手機號String j_tel = params.getJiTel();// 省份String j_province = params.getJiProvince() == null ? "" : params.getJiProvince();String j_city = params.getJiCity() == null ? "" : params.getJiCity();String j_county = params.getJiCounty() == null ? "" : params.getJiCounty();String j_address = params.getJiAdress();/****************寄件方*******************//****************收件人*******************/String d_contact = params.getShouContact();//收件人公司String d_company = params.getShouCompany() == null ? "" : params.getShouCompany();//收件人電話String d_tel = params.getShouTel();//收件人詳細地址String d_province = params.getShouProvince() == null ? "" : params.getShouProvince();String d_city = params.getShouCity() == null ? "" : params.getShouCity();String d_county = params.getShouCounty() == null ? "" : params.getShouCounty();String d_address = params.getShouAdress();/****************收件人*******************///商品名稱String cargo = params.getCargo();//商品數量String cargoNum = params.getCargoNum();StringBuilder strBuilder = new StringBuilder();strBuilder.append("<Request service='OrderService' lang='zh-CN'>");strBuilder.append("<Head>" + clientCode + "</Head>");strBuilder.append("<Body>");strBuilder.append("<Order").append(" ");strBuilder.append("orderid='" + orderNo.toString().trim() + "" + "'").append(" ");//返回順豐運單號strBuilder.append("is_gen_bill_no='1'").append(" ");//寄件方信息strBuilder.append("j_company='" + j_company + "'").append(" ");strBuilder.append("j_contact='" + j_contact + "'").append(" ");strBuilder.append("j_tel='" + j_tel + "'").append(" ");strBuilder.append("j_address='" + j_province+j_city+j_county+j_address + "'").append(" ");//收件方信息strBuilder.append("d_company='" + d_company + "'").append(" ");strBuilder.append("d_contact='" + d_contact.toString().trim() + "'").append(" ");strBuilder.append("d_tel='" + d_tel.toString().trim() + "'").append(" ");strBuilder.append("d_address='" + d_province+d_city+d_county+d_address.toString().trim() + "'").append(" ");strBuilder.append("pay_method='1'").append(" ");strBuilder.append("routelabelService = '1' ");strBuilder.append(" > ");//貨物信息strBuilder.append("<Cargo").append(" ");strBuilder.append("name='" + cargo + "'").append(" ");strBuilder.append("count='" + cargoNum.toString() + "'").append(" ");strBuilder.append(">");strBuilder.append("</Cargo>");strBuilder.append("</Order>");strBuilder.append("</Body>");strBuilder.append("</Request>");return strBuilder.toString();}/*** 2 順豐查詢報文*/private String getOrderSearchServiceRequestXml(SfParam params){String orderNo =params.getOrderNo();StringBuilder strBuilder = new StringBuilder();strBuilder.append("<Request service='OrderSearchService' lang='zh-CN'>");strBuilder.append("<Head>" + clientCode + "</Head>");strBuilder.append("<Body>");strBuilder.append("<OrderSearch").append(" ");strBuilder.append("orderid='" + orderNo.toString().trim() + "" + "'").append(" > ");strBuilder.append("</OrderSearch>");strBuilder.append("</Body>");strBuilder.append("</Request>");return strBuilder.toString();}需要用到豐橋接口的小伙伴直接可以拿去使用。
總結
以上是生活随笔為你收集整理的顺丰--Java丰桥接口整体封装(下单、查询、打印)的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 【windows系统】插入移动硬盘后,有
- 下一篇: 【格蕾读C++ Primer Plus】
