Java版WMS系统奇门云⽹关(奇门仓储)接⼝实现基于spring框架 实现的奇门云⽹关 WMS端 通⽤API⽅法:
puri;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.io.StringWriter;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.mingsoft.util.StringUtil;
import net.sf.json.JSONObject;
import net.l.XMLSerializer;
@Controller
@RequestMapping("api/open/qiMenApi")
public class QiMenTest {
@ResponseBody
@RequestMapping(value="/apiRealization",produces="text/xml;charset=UTF-8")
public byte[] apiRealization(HttpServletRequest request, HttpServletResponse response) {
// AppKey
String appKeyVal = Parameter("app_key");
// API接⼝名称
String methodVal = Parameter("method");
// 时间戳,格式:yyyy-MM-dd HH:mm:ss
String timestampVal = Parameter("timestamp");
// 请求签名
String signVal = Parameter("sign");
byte[] result = null;
Map<String, Object> resultMap = new HashMap<>();
InputStream inputStream;
StringBuffer sb = new StringBuffer();
try {
// 解析xml参数
inputStream = InputStream();
String s;
BufferedReader in = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
while ((s = in.readLine()) != null) {
sb.append(s);
}
in.close();
inputStream.close();
if(sb.length() > 0) {
// json格式的报⽂参数
JSONObject xmlToJson = JSONObject.fromObject(String()));
if(!StringUtil.isBlank(methodVal)) {
if(!StringUtil.isBlank(methodVal)) {
switch (methodVal) {
case "ate":
// 发货单创建接⼝
//resultMap = ;
break;
case "ate":
// ⼊库单创建接⼝
//resultMap = ;
break;
case "ate":
// 出库单创建接⼝
//resultMap = ;
break;
case "order.cancel":
// 单据取消接⼝
//resultMap = ;
break;
case "singleitem.synchronize":
// 商品同步接⼝
//resultMap = ;
break;
default:
resultMap.put("message", "接⼝名称method填写有误!");
resultMap.put("flag", "failure");
resultMap.put("code", "500");
break;
}
}else {
resultMap.put("message", "接⼝名称method不能为空!");
resultMap.put("flag", "failure");
resultMap.put("code", "500");
}
result = multilayerMapToXml(resultMap, false).getBytes("UTF-8");
}else {
result = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>".getBytes("UTF-8");            }
} catch (Exception e) {
resultMap.put("flag", "failure");
resultMap.put("code", "500");
resultMap.put("message", "操作失败,参数有误!");
try {
result = multilayerMapToXml(resultMap, false).getBytes("UTF-8");
} catch (UnsupportedEncodingException e1) {
return null;
}
}
return result;
}
/**
* xml字符串转json字符串
* @param xml
* @return
*/
private Object xmlForJson(String xml) {
XMLSerializer xmlSerializer = new XMLSerializer();
String resutStr = ad(xml).toString();
return resutStr;
}
/**
* (多层)map转换为xml格式字符串
*
* @param map 需要转换为xml的map
* @param isCDATA 是否加⼊CDATA标识符 true:加⼊ false:不加⼊
* @return xml字符串
* @throws UnsupportedEncodingException
*/
public static String multilayerMapToXml(Map<String, Object> map, boolean isCDATA) throws UnsupportedEncodingException{        String parentName = "response";
Document doc = ateDocument();
doc.addElement(parentName);
String xml = RootElement(), parentName, map, isCDATA);
return formatXML(xml);
}
/**
* multilayerMapToXml核⼼⽅法,递归调⽤
*
* @param element 节点元素
* @param parentName 根元素属性名
* @param map 需要转换为xml的map
* @param isCDATA 是否加⼊CDATA标识符 true:加⼊ false:不加⼊
* @return xml字符串
*/
@SuppressWarnings("unchecked")
private static String recursionMapToXml(Element element, String parentName, Map<String, Object> map, boolean isCDATA) {        Element xmlElement = element.addElement(parentName);
map.keySet().forEach(key -> {
Object obj = (key);
if (obj instanceof Map) {
recursionMapToXml(xmlElement, key, (Map<String, Object>)obj, isCDATA);
} else {
String value = obj == null ? "" : String();
if (isCDATA) {
xmlElement.addElement(key).addCDATA(value);
} else {
xmlElement.addElement(key).addText(value);
}
}
});
return xmlElement.asXML();
}
/
**
* 格式化xml,显⽰为容易看的XML格式
*
* @param xml 需要格式化的xml字符串
* @return
*/
public static String formatXML(String xml) {
String requestXML = null;
try {
// 拿取解析器
SAXReader reader = new SAXReader();
Document document = ad(new StringReader(xml));
if (null != document) {
StringWriter stringWriter = new StringWriter();
// 格式化,每⼀级前的空格
OutputFormat format = new OutputFormat(" ", true);
// xml声明与内容是否添加空⾏
format.setNewLineAfterDeclaration(false);
// 是否设置xml声明头部
format.setSuppressDeclaration(false);
// 是否分⾏
format.setNewlines(true);
XMLWriter writer = new XMLWriter(stringWriter, format);
writer.write(document);
dom4j读取xmlwriter.flush();
writer.close();
requestXML = Buffer().toString();
}
return requestXML;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
编码思路:
1.接收ERP端xml类型的参数(InputStream()),为⽅便取值转换为Json格式(String()))
2.判断ERP端请求的奇门接⼝名称(Parameter("method"))⾛不同的业务实现⽅法(switch case注释部分),各接⼝返回数据均有差异,请参照淘宝奇门接⼝API⽂档
3.各实现⽅法返回Map格式数据,转换为xml格式返回,为防⽌乱码情况,我们转为byte数组返回(multilayerMapToXml(resultMap, false).getBytes("UTF-8"))

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。