java smooks_smooks数据转换:java to edi

3 importorg.apache.commons.io.IOUtils;4 importorg.milyn.Smooks;5 importorg.milyn.smooks.edi.unedifact.UNEdifactReaderConfigurator;6 importorg.milyn.smooks.edi.unedifact.model.UNEdifactInterchange;7 importorg.milyn.smooks.edi.unedifact.model.UNEdifactInterchangeFactory;8 import org.milyn.smooks.edi.unedifact.model.r41.*;9 importorg.milyn.smooks.edi.unedifact.model.r41.types.DateTime;10 importorg.milyn.smooks.edi.unedifact.model.r41.types.MessageIdentifier;11 importorg.milyn.smooks.edi.unedifact.model.r41.types.Party;12 importorg.milyn.smooks.edi.unedifact.model.r41.types.SyntaxIdentifier;13

14 importjavax.xml.transform.stream.StreamResult;15 importjavax.xml.transform.stream.StreamSource;16 import java.io.*;17 importjava.text.SimpleDateFormat;18 importjava.util.ArrayList;19 importjava.util.Date;20 importjava.util.List;21

22 public classUNEdifactUtil {23

24 private static String dateformat = new SimpleDateFormat("yyyyMMddHHmm").format(newDate());25

26 /**

27 * 组装Interchange Header 报文交换头部28 *@paramsenderId29 *@paramrecipientId30 *@paramyymmddStr31 *@paramhhmmStr32 *@paramagreementNumber33 *@return

34 */

35 public staticUNB41 assembleUNB(String senderId, String recipientId, String yymmddStr, String hhmmStr, String agreementNumber){36 UNB41 interchangeHeader = newUNB41();37 SyntaxIdentifier syntaxIdentifier = newSyntaxIdentifier();38 syntaxIdentifier.setId("UNOA");39 syntaxIdentifier.setVersionNum("2");40 interchangeHeader.setSyntaxIdentifier(syntaxIdentifier);41

42 Party sender = newParty();43 sender.setId(senderId);44 sender.setCodeQualifier("ZZZ");45 interchangeHeader.setSender(sender);46

47 Party recipient = newParty();48 recipient.setId(recipientId);49 recipient.setCodeQualifier("ZZZ");50 interchangeHeader.setRecipient(recipient);51

52 DateTime dateTime = newDateTime();53 dateTime.setDate(yymmddStr);54 dateTime.setTime(hhmmStr);55 interchangeHeader.setDate(dateTime);56

57 interchangeHeader.setControlRef(agreementNumber);58 returninterchangeHeader;59 }60

61 /**

62 * 组装 Interchange Trailer 报文交换尾部63 *@paramagreementNumber64 *@return

65 */

66 public staticUNZ41 assembleUNZ(String agreementNumber){67 UNZ41 interchangeTrailer = newUNZ41();68 interchangeTrailer.setControlCount(1);69 interchangeTrailer.setControlRef(agreementNumber);70 returninterchangeTrailer;71 }72

73 /**

74 * 组装Message Header 报文头部75 *@paramagreementNumber76 *@return

77 */

78 public staticUNH41 assembleUNH(String agreementNumber){79 UNH41 messageHeader = newUNH41();80 messageHeader.setMessageRefNum(agreementNumber);81 MessageIdentifier messageIdentifier = newMessageIdentifier();82 messageIdentifier.setId("IFTMIN");83 messageIdentifier.setControllingAgencyCode("UN");84 messageIdentifier.setVersionNum("D");85 messageIdentifier.setReleaseNum("99B");86 messageHeader.setMessageIdentifier(messageIdentifier);87 returnmessageHeader;88 }89

90 /**

91 * 组装Message Trailer 报文尾部92 *@paramsegmentCount93 *@paramagreementNumber94 *@return

95 */

96 public static UNT41 assembleUNT(intsegmentCount, String agreementNumber){97 UNT41 messageTrailer = newUNT41();98 messageTrailer.setSegmentCount(segmentCount);99 messageTrailer.setMessageRefNum(agreementNumber);100 returnmessageTrailer;101 }102

103 /**

104 * java(message)转EDI报文105 *106 *@paramfactory 工厂类型107 *@parammessage 报文内容108 *@return

109 *@throwsException110 */

111 public static String toUNEdidact(String senderIdentification, String receiverIdentification, UNEdifactInterchangeFactory factory, Object message) throwsIOException{112 Date date = newDate();113 String yymmddStr = new SimpleDateFormat("yyMMdd").format(date);114 String hhmmStr = new SimpleDateFormat("HHmm").format(date);115 int randomNumber =(int)(Math.random() * 10000);116 //文件交换号

117 String agreementNumber = yymmddStr + hhmmStr +randomNumber;118 UNB41 interchangeHeader =assembleUNB(senderIdentification, receiverIdentification, yymmddStr, hhmmStr, agreementNumber);119 UNZ41 interchangeTrailer =assembleUNZ(agreementNumber);120 Integer line = 1;121 UNH41 messageHeader =assembleUNH(agreementNumber);122 UNT41 beforeMessageTrailer =assembleUNT(line, agreementNumber);123 String beforeMessage = javaToUNEdifact(factory, message,null, null, messageHeader, beforeMessageTrailer);124 line =StringUtil.messageLine(beforeMessage);125 UNT41 afterMessageTrailer =assembleUNT(line, agreementNumber);126 returnjavaToUNEdifact(factory,message,interchangeHeader,interchangeTrailer,messageHeader,afterMessageTrailer);127 }128

129

130 /**

131 *132 *@paramfactory 工厂类型133 *@parammessage 报文内容134 *@paraminterchangeHeader 报文头135 *@paraminterchangeTrailer 报文尾136 *@parammessageHeader 消息头137 *@parammessageTrailer 消息尾138 *@return国际标准EDI报文139 *@throwsIOException140 */

141 public staticString javaToUNEdifact(UNEdifactInterchangeFactory factory, Object message,142 UNB41 interchangeHeader, UNZ41 interchangeTrailer,143 UNH41 messageHeader, UNT41 messageTrailer) throwsIOException {144 StringWriter ediOutStream = newStringWriter();145

146 UNEdifactInterchange41 interchange = newUNEdifactInterchange41();147 interchange.setInterchangeHeader(interchangeHeader);148 interchange.setInterchangeTrailer(interchangeTrailer);149

150 UNEdifactMessage41 unEdifactMessage41 = newUNEdifactMessage41();151 unEdifactMessage41.setMessage(message);152 unEdifactMessage41.setInterchangeHeader(interchangeHeader);153 unEdifactMessage41.setMessageHeader(messageHeader);154 unEdifactMessage41.setMessageTrailer(messageTrailer);155 List unEdifactMessage41List = new ArrayList<>();156 unEdifactMessage41List.add(unEdifactMessage41);157 interchange.setMessages(unEdifactMessage41List);158

159 factory.toUNEdifact(interchange, ediOutStream);160 returnediOutStream.toString();161 }162

163 /**

164 * 国际标准的UN/EDIFact 转 xml165 *166 *@parammappingType 报文标准类型 例如:d99b-mapping167 *@paramfilePath 报文文件路径168 *@return

169 */

170 public staticString ediToXml(String mappingType, String filePath){171 Smooks smooks = newSmooks();172 StringWriter writer = newStringWriter();173 try{174 smooks.setReaderConfig(new UNEdifactReaderConfigurator("urn:org.milyn.edi.unedifact:"+mappingType+":*"));175 smooks.filterSource(new StreamSource(new FileInputStream(filePath)), newStreamResult(writer));176 returnwriter.toString();177 }catch(Exception e){178 e.printStackTrace();179 return null;180 }finally{181 smooks.close();182 IOUtils.closeQuietly(writer);183 }184 }185

186

187 /**

188 * 国际标准的UN/EDIFact 转 Object189 *190 *@paramfactory 工厂类型 例如:D93AInterchangeFactory191 *@paramfilePath 报文路径192 *@return

193 *@throwsIOException194 */

195 public static UNEdifactMessage41 edifactToObject(UNEdifactInterchangeFactory factory, String filePath) throwsIOException {196 InputStream stream = newFileInputStream(filePath);197 UNEdifactInterchange interchange =factory.fromUNEdifact(stream);198 if (interchange instanceofUNEdifactInterchange41) {199 UNEdifactInterchange41 interchange41 =(UNEdifactInterchange41) interchange;200 List message41List =interchange41.getMessages();201 if(message41List.size()>0){202 return message41List.get(0);203 }204 }205 return null;206 }207 }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值