Java读写edi,从java Object准备edi数据

我是edi数据的新手.我使用smooks api来读取edi数据并能够将其解析为

java对象.我想将

java对象转换为edi数据,因为我没有获得太多信息.这是我试图从edi文件中读取并创建java对象的示例 –

customOrder.edi - COR*130*PINGPONG02*You got it to work*1230

---------------

POJO -

------

public class CustomOrder implements Serializable{

private int number;

private String sender;

private String message;

private int price;

// setter and getter

}

custom-order-mapping.xml -

-------------------------

smooks-config.xml -

------------------

xmlns="http://www.milyn.org/xsd/smooks-1.1.xsd"

xmlns:edi="http://www.milyn.org/xsd/smooks/edi-1.1.xsd"

xmlns:jb="http://www.milyn.org/xsd/smooks/javabean-1.2.xsd"

xmlns:core="http://www.milyn.org/xsd/smooks/smooks-core-1.4.xsd">

Main method -

--------------

Main smooksMain = new Main();

ExecutionContext executionContext = smooksMain.smooks.createExecutionContext();

org.milyn.payload.JavaResult result = smooksMain.runSmooksTransform(executionContext);

CustomOrder custOrder = (CustomOrder) result.getBean("customer");

// Need to get to edi data from java object custOrder

// Please help me - this part of code

我想从java对象准备edi数据.如果除了Smooks之外的任何其他api /框架也会这样做,那对我来说没问题.请告诉我,谢谢.

最佳答案 我搜索了它并从smooks论坛了解到要从java对象准备edi数据,我们必须使用Edifact Java Compiler(EJC).

上面的例子是从edi数据准备java对象.

Pojo类必须实现EDIWritable并覆盖write方法.这是改变的Pojo类 –

public class CustomOrder implements Serializable, EDIWritable{

private int number;

private IntegerDecoder numberDecoder;

private String sender;

private String message;

private int price;

private IntegerDecoder priceDecoder;

public CustomOrder() {

numberDecoder = new IntegerDecoder();

priceDecoder = new IntegerDecoder();

}

public int getNumber() {

return number;

}

public void setNumber(int number) {

this.number = number;

}

public void setSender(String sender) {

this.sender = sender;

}

public String getSender() {

return sender;

}

public String getMessage() {

return message;

}

public void setMessage(String message) {

this.message = message;

}

public int getPrice() {

return price;

}

public void setPrice(int price) {

this.price = price;

}

public void write(Writer writer, Delimiters delimiters) throws IOException {

// TODO Auto-generated method stub

Writer nodeWriter = writer;

if(number != 0) {

nodeWriter.write(delimiters.escape(numberDecoder.encode(number)));

}

nodeWriter.write(delimiters.getField());

if(sender != null) {

nodeWriter.write(delimiters.escape(sender.toString()));

}

nodeWriter.write(delimiters.getField());

if(message != null) {

nodeWriter.write(delimiters.escape(message.toString()));

}

nodeWriter.write(delimiters.getField());

if(price != 0) {

nodeWriter.write(delimiters.escape(priceDecoder.encode(price)));

}

//nodeWriter.write(delimiters.getField());

writer.write(delimiters.getSegmentDelimiter());

writer.flush();

}

}

接下来,我们必须准备pojo类的工厂 –

CustomOrderFactory

public class CustomOrderFactory {

private Smooks smooks;

private Delimiters delimiters;

public static CustomOrderFactory getInstance() throws IOException, SAXException {

return new CustomOrderFactory();

}

public void addConfigurations(InputStream resourceConfigStream) throws SAXException, IOException {

smooks.addConfigurations(resourceConfigStream);

}

public void toEDI(CustomOrder instance, Writer writer) throws IOException {

instance.write(writer, delimiters);

}

private CustomOrderFactory() throws IOException, SAXException {

smooks = new Smooks(CustomOrderFactory.class.getResourceAsStream("smooks-config.xml"));

System.out.println("smooks is prepared");

try {

Edimap edimap = EDIConfigDigester.digestConfig(CustomOrderFactory.class.getResourceAsStream("custom-order-mapping.xml"));

System.out.println("ediMap is prepared");

delimiters = edimap.getDelimiters();

System.out.println("delimeter is prepared");

} catch(EDIConfigurationException e) {

IOException ioException = new IOException("Exception reading EDI Mapping model.");

ioException.initCause(e);

throw ioException;

}

}

}

一旦CustomOrder对象准备就绪,如上面Main类中所示.我们必须使用此对象转换为edi数据格式.这是完整的主类 –

Main class

----------

Main smooksMain = new Main();

ExecutionContext executionContext = smooksMain.smooks.createExecutionContext();

org.milyn.payload.JavaResult result = smooksMain.runSmooksTransform(executionContext);

CustomOrder custOrder = (CustomOrder) result.getBean("customer");

// Prepare edi data from java object custOrder

CustomOrderFactory customOrderFactory = CustomOrderFactory.getInstance();

OutputStream os = new FileOutputStream("createdEDIFile.edi");

customOrderFactory.toEDI(custOrder, new OutputStreamWriter(os));

System.out.println("Edi file is created from java object");

而已.希望它会有所帮助.谢谢.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java是一种广泛应用于软件开发的编程语言,具备强大的跨平台性和易于学习的特点。在对接PLC读写复杂数据S7方面,Java也提供了丰富的支持和解决方案。 首先,Java提供了一些成熟的库和框架,如S7comm和S7J API,可以帮助开发人员直接与PLC通信。这些库和框架提供了丰富的函数和方法,可以实现与PLC的数据通信、读取和写入等操作。开发人员可以根据具体的需求和PLC的通信协议选择适合的库和框架。 其次,Java提供了强大的网络编程支持,可以通过TCP/IP协议与PLC建立连接并进行通信。通过建立Socket连接,开发人员可以使用Java提供的输入输出流读取和写入PLC数据。可以根据PLC的通信规范和数据结构,将Java中的数据类型与PLC中的数据类型进行映射,实现复杂数据的读取和写入。 此外,Java还提供了一些处理二进制数据的辅助类和方法,如ByteBuffer等,可以方便地进行数据类型转换和字节序列操作。通过这些工具和方法,开发人员可以处理PLC中的复杂数据类型,如数组、结构体和定点数等。 最后,Java还支持多线程编程,可以通过多线程实现对PLC的并发读写操作。这对于需要高效处理大量数据或实时控制的应用特别有用。 综上所述,Java对接PLC读写复杂数据S7提供了丰富的支持和解决方案。开发人员可以利用Java提供的库、框架和网络编程支持,实现与PLC的数据通信、读写等操作。同时,通过处理二进制数据和多线程编程,可以方便地实现对PLC中复杂数据的处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值