java对接dhl_DHL接口—数据交互

本文展示了如何使用Java和Freemarker模板引擎与DHL接口进行数据交互,创建订单请求XML,并通过HTTP POST发送到DHL服务器获取响应。主要涉及配置Freemarker,设置请求参数,以及处理返回的响应内容。
摘要由CSDN通过智能技术生成

简单描述:按照DHL请求格式组装字符串,发送到服务器,返回特定格式的内容。

主要有两点:1、模版引擎freemarker(一般以ftl结尾;2、连接及发送请求到服务器并返回内容。

主要代码如下(这里主要列出下单模块的代码pickup_book):

pickup_book.ftl

xsi:schemaLocation="http://www.dhl.com book-pickup-req.xsd">

${MessageTime}

${MessageReference}

${SiteID}

${Password}

${AccountType1}

${AccountNumber1}

${PersonName}

${Phone1}

${PhoneExtension}

${LocationType}

${CompanyName}

${Address1}

${Address2}

${PackageLocation}

${City}

${StateCode}

${DivisionName}

${CountryCode}

${PostalCode}

${PickupDate}

${ReadyByTime}

${CloseTime}

${Pieces}

${Weight1}

${WeightUnit1}

${PersonName}

${Phone2}

${PhoneExtension}

${AccountType2}

${AccountNumber2}

${BillToAccountNumber}

${AWBNumber}

${NumberOfPieces}

${Weight2}

${WeightUnit2}

${GlobalProductCode}

${DoorTo}

${DimensionUnit}

${InsuredAmount}

${InsuredCurrencyCode}

${Weight3}

${Width}

${Height}

${Depth}

${SpecialService1}

${SpecialService2}

D

851624480

100000000

7520067111

1

1.0

K

D

DD

C

999999.99

USD

1.0

2

2

2

S

I

DHLClient.java

package com.hmnet.common;

import java.io.BufferedReader;

import java.io.File;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.io.StringWriter;

import java.net.HttpURLConnection;

import java.net.URL;

import java.util.HashMap;

import java.util.Map;

import org.apache.struts2.ServletActionContext;

import freemarker.template.Configuration;

import freemarker.template.DefaultObjectWrapper;

import freemarker.template.Template;

import freemarker.template.TemplateException;

public class DHLClient {

public static String getResXmlString (String clientRequestXML, String httpURL) throws IOException{

try {

String query = "isUTF8Support=true";

URL servletURL = new URL(httpURL + "?" + query);

HttpURLConnection servletConnection = null;

servletConnection = (HttpURLConnection)servletURL.openConnection();

servletConnection.setDoOutput(true); // to allow us to write to the URL

servletConnection.setDoInput(true);

servletConnection.setUseCaches(false);

servletConnection.setRequestMethod("POST");

servletConnection.setRequestProperty("Content-Type","application/x-www-form-urlencoded");

servletConnection.setRequestProperty("Accept-Charset", "UTF-8");

String len = Integer.toString(clientRequestXML.getBytes().length);

servletConnection.setRequestProperty("Content-Length", len);

servletConnection.connect();

OutputStreamWriter wr = null;

wr = new OutputStreamWriter(servletConnection.getOutputStream(), "UTF8");

wr.write(clientRequestXML);

wr.flush();

wr.close();

/*Code for getting and processing response from DHL's servlet*/

InputStreamReader isr = null;

isr = new InputStreamReader(servletConnection.getInputStream(),"UTF8");

BufferedReader rd = new BufferedReader(isr);

StringBuilder result = new StringBuilder();

String line = "";

while ((line = rd.readLine()) != null) {

result.append(line).append("\n");

}

return result.toString();

} catch (Exception e) {

e.printStackTrace();

return null;

}

}

private static String ftlUrl = "D:\\apache-tomcat-7.0.30\\webapps\\eTrade\\resource\\template\\";

public static String getPickUpBookRequestXmlString(){

try {

Configuration cfg = new Configuration();

cfg.setDirectoryForTemplateLoading(new File(ftlUrl));

cfg.setObjectWrapper(new DefaultObjectWrapper());

/* 获取模板文件 */

Template template = cfg.getTemplate("pickup_book.ftl");

Map context = new HashMap();

StringWriter writer = new StringWriter();

context.put("MessageTime", "2001-12-17T09:30:47-05:00");

context.put("MessageReference", "Esteemed Courier Service of DHL");

context.put("SiteID", "DHL商务中心提供");

context.put("Password", "DHL商务中心提供");

context.put("AccountType1", "D");

context.put("AccountNumber1", "550000055");

context.put("PersonName", "Rikhil");

context.put("Phone1", "23162");

context.put("PhoneExtension", "5053");

context.put("LocationType", "B");

context.put("CompanyName", "String");

context.put("Address1", "String");

context.put("Address2", "norfolk st");

context.put("PackageLocation", "Infosys");

context.put("City", "Kuala Lumpur");

context.put("StateCode", "MH");

context.put("DivisionName", "California");

context.put("CountryCode", "MY");

context.put("PostalCode", "2516251");

context.put("PickupDate", "2015-01-15");//填写时间

context.put("ReadyByTime", "11:20");//一个小时之后(相对于现在时间)

context.put("CloseTime", "13:55");//两个小时之后(相对于ReadyByTime)

context.put("Pieces", "2");

context.put("Weight1", "2.0");

context.put("WeightUnit1", "K");

context.put("PersonName", "Subhayu");

context.put("Phone2", "4801313131");

context.put("PhoneExtension", "5768");

context.put("AccountType2", "D");

context.put("AccountNumber2", "851624480");

context.put("BillToAccountNumber", "100000000");

context.put("AWBNumber", "7520067111");

context.put("NumberOfPieces", "1");

context.put("Weight2", "1.0");

context.put("WeightUnit2", "K");

context.put("GlobalProductCode", "D");

context.put("DoorTo", "DD");

context.put("DimensionUnit", "C");

context.put("InsuredAmount", "999999.99");

context.put("InsuredCurrencyCode", "USD");

context.put("Weight3", "1.0");

context.put("Width", "2");

context.put("Height", "2");

context.put("Depth", "2");

context.put("SpecialService1", "S");

context.put("SpecialService2", "I");

try {

template.process(context, writer);

return writer.toString();

} catch (TemplateException e) {

e.printStackTrace();

}

} catch (IOException e) {

e.printStackTrace();

}

return "";

}

public static void main(String[] args) throws IOException{

String xmlString = DHLInterfaceUtils.getPickUpBookRequestXmlString();

String httpUrl = "https://xmlpitest-ea.dhl.com/XMLShippingServlet";

String resXmlString = getResXmlString(xmlString,httpUrl);

System.out.println(resXmlString);

}

}

打印返回结果:

2015-01-15T03:43:48+01:00

Esteemed Courier Service of DHL

prasanta

Success

101746

2015-01-15

0.000000

KUL

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值