diff --git a/src/main/java/io/xlate/edi/internal/stream/StaEDIXMLStreamReader.java b/src/main/java/io/xlate/edi/internal/stream/StaEDIXMLStreamReader.java index 287a44fa..c0ed8eac 100644 --- a/src/main/java/io/xlate/edi/internal/stream/StaEDIXMLStreamReader.java +++ b/src/main/java/io/xlate/edi/internal/stream/StaEDIXMLStreamReader.java @@ -202,6 +202,16 @@ public void write(int b) throws IOException { ediReader.getText(), ediReader.getErrorType())); + case ELEMENT_OCCURRENCE_ERROR: + throw new XMLStreamException(String.format("Element %s has error %s", + ediReader.getText(), + ediReader.getErrorType())); + + case ELEMENT_DATA_ERROR: + throw new XMLStreamException(String.format("Element %s has error %s", + ediReader.getText(), + ediReader.getErrorType())); + default: throw new IllegalStateException("Unknown state: " + ediEvent); } diff --git a/src/main/java/io/xlate/edi/internal/stream/StaEDIXMLStreamWriter.java b/src/main/java/io/xlate/edi/internal/stream/StaEDIXMLStreamWriter.java index 337be607..5eaad59d 100644 --- a/src/main/java/io/xlate/edi/internal/stream/StaEDIXMLStreamWriter.java +++ b/src/main/java/io/xlate/edi/internal/stream/StaEDIXMLStreamWriter.java @@ -16,7 +16,7 @@ import io.xlate.edi.stream.EDIStreamException; import io.xlate.edi.stream.EDIStreamWriter; -final class StaEDIXMLStreamWriter implements XMLStreamWriter { +public final class StaEDIXMLStreamWriter implements XMLStreamWriter { private static final QName INTERCHANGE = new QName(Namespaces.LOOPS, "INTERCHANGE"); diff --git a/src/test/java/io/xlate/edi/internal/bind/AcknowledgementBindTest.java b/src/test/java/io/xlate/edi/internal/bind/AcknowledgementBindTest.java new file mode 100644 index 00000000..72852ac5 --- /dev/null +++ b/src/test/java/io/xlate/edi/internal/bind/AcknowledgementBindTest.java @@ -0,0 +1,153 @@ +package io.xlate.edi.internal.bind; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; + +import javax.xml.bind.JAXBContext; +import javax.xml.bind.Marshaller; +import javax.xml.bind.Unmarshaller; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; +import javax.xml.stream.XMLStreamReader; +import javax.xml.stream.XMLStreamWriter; + +import org.junit.jupiter.api.Test; + +import io.xlate.edi.internal.stream.StaEDIXMLStreamReader; +import io.xlate.edi.internal.stream.StaEDIXMLStreamWriter; +import io.xlate.edi.stream.EDIInputFactory; +import io.xlate.edi.stream.EDIOutputFactory; +import io.xlate.edi.stream.EDIStreamConstants.Namespaces; +import io.xlate.edi.stream.EDIStreamEvent; +import io.xlate.edi.stream.EDIStreamReader; +import io.xlate.edi.stream.EDIStreamWriter; + +public class AcknowledgementBindTest { + + @Test + public void testEDIBinding() throws Exception { + JAXBContext context = JAXBContext.newInstance(Interchange.class); + Marshaller m = context.createMarshaller(); + EDIOutputFactory oFactory = EDIOutputFactory.newFactory(); + oFactory.setProperty(EDIOutputFactory.PRETTY_PRINT, Boolean.TRUE); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + EDIStreamWriter writer = oFactory.createEDIStreamWriter(out); + XMLStreamWriter xmlWriter = new StaEDIXMLStreamWriter(writer); + + ISA header = new ISA(); + //ISA*00* *00* *ZZ*Receiver *ZZ*Sender *200301*1430*^*00501*000000001*0*P*:~ + header.ISA01 = "00"; + header.ISA02 = " "; + header.ISA03 = "00"; + header.ISA04 = " "; + header.ISA05 = "ZZ"; + header.ISA06 = "Receiver "; + header.ISA07 = "ZZ"; + header.ISA08 = "Sender "; + header.ISA09 = "200301"; + header.ISA10 = "1430"; + header.ISA11 = "^"; + header.ISA12 = "00501"; + header.ISA13 = "000000001"; + header.ISA14 = "0"; + header.ISA15 = "P"; + header.ISA16 = ":"; + + IEA trailer = new IEA(); + trailer.IEA01 = "1"; + trailer.IEA02 = "000000001"; + + Interchange interchange = new Interchange(); + interchange.header = header; + interchange.trailer = trailer; + + m.marshal(interchange, xmlWriter); + + EDIInputFactory iFactory = EDIInputFactory.newFactory(); + Interchange interchange2; + try (EDIStreamReader reader = iFactory.createEDIStreamReader(new ByteArrayInputStream(out.toByteArray()))) { + assertEquals(EDIStreamEvent.START_INTERCHANGE, reader.next()); + XMLStreamReader xmlReader = new StaEDIXMLStreamReader(reader); + Unmarshaller u = context.createUnmarshaller(); + interchange2 = (Interchange) u.unmarshal(xmlReader); + } + + assertEquals(interchange.header.ISA01, interchange2.header.ISA01); + assertEquals(interchange.header.ISA02, interchange2.header.ISA02); + assertEquals(interchange.header.ISA03, interchange2.header.ISA03); + assertEquals(interchange.header.ISA04, interchange2.header.ISA04); + assertEquals(interchange.header.ISA05, interchange2.header.ISA05); + assertEquals(interchange.header.ISA06, interchange2.header.ISA06); + assertEquals(interchange.header.ISA07, interchange2.header.ISA07); + assertEquals(interchange.header.ISA08, interchange2.header.ISA08); + assertEquals(interchange.header.ISA09, interchange2.header.ISA09); + assertEquals(interchange.header.ISA10, interchange2.header.ISA10); + assertEquals(interchange.header.ISA11, interchange2.header.ISA11); + assertEquals(interchange.header.ISA12, interchange2.header.ISA12); + assertEquals(interchange.header.ISA13, interchange2.header.ISA13); + assertEquals(interchange.header.ISA14, interchange2.header.ISA14); + assertEquals(interchange.header.ISA15, interchange2.header.ISA15); + assertEquals(interchange.header.ISA16, interchange2.header.ISA16); + + assertEquals(interchange.trailer.IEA01, interchange2.trailer.IEA01); + assertEquals(interchange.trailer.IEA02, interchange2.trailer.IEA02); + + } + + @XmlType + @XmlRootElement(name = "INTERCHANGE", namespace = Namespaces.LOOPS) + static class Interchange { + @XmlElement(name = "ISA", namespace = Namespaces.SEGMENTS) + ISA header; + + @XmlElement(name = "IEA", namespace = Namespaces.SEGMENTS) + IEA trailer; + } + + @XmlType(namespace = Namespaces.SEGMENTS, propOrder = {}) + static class ISA { + @XmlElement(namespace = Namespaces.ELEMENTS) + String ISA01; + @XmlElement(namespace = Namespaces.ELEMENTS) + String ISA02; + @XmlElement(namespace = Namespaces.ELEMENTS) + String ISA03; + @XmlElement(namespace = Namespaces.ELEMENTS) + String ISA04; + @XmlElement(namespace = Namespaces.ELEMENTS) + String ISA05; + @XmlElement(namespace = Namespaces.ELEMENTS) + String ISA06; + @XmlElement(namespace = Namespaces.ELEMENTS) + String ISA07; + @XmlElement(namespace = Namespaces.ELEMENTS) + String ISA08; + @XmlElement(namespace = Namespaces.ELEMENTS) + String ISA09; + @XmlElement(namespace = Namespaces.ELEMENTS) + String ISA10; + @XmlElement(namespace = Namespaces.ELEMENTS) + String ISA11; + @XmlElement(namespace = Namespaces.ELEMENTS) + String ISA12; + @XmlElement(namespace = Namespaces.ELEMENTS) + String ISA13; + @XmlElement(namespace = Namespaces.ELEMENTS) + String ISA14; + @XmlElement(namespace = Namespaces.ELEMENTS) + String ISA15; + @XmlElement(namespace = Namespaces.ELEMENTS) + String ISA16; + } + + @XmlType(namespace = Namespaces.SEGMENTS, propOrder = {}) + static class IEA { + @XmlElement(namespace = Namespaces.ELEMENTS) + String IEA01; + @XmlElement(namespace = Namespaces.ELEMENTS) + String IEA02; + } +} diff --git a/src/test/java/io/xlate/edi/internal/wiki/WriteInterchangeAcknowledgementTest.java b/src/test/java/io/xlate/edi/internal/wiki/WriteInterchangeAcknowledgementTest.java index d38d0d2a..255bc25f 100644 --- a/src/test/java/io/xlate/edi/internal/wiki/WriteInterchangeAcknowledgementTest.java +++ b/src/test/java/io/xlate/edi/internal/wiki/WriteInterchangeAcknowledgementTest.java @@ -35,7 +35,7 @@ public void testAcknowledgementWrite() throws Exception { .writeElement("Receiver ") .writeElement("ZZ") .writeElement("Sender ") - .writeElement("203001") + .writeElement("200301") .writeElement("1430") .writeElement("^") .writeElement("00501") diff --git a/src/test/resources/wiki/x12_interchange_ack.txt b/src/test/resources/wiki/x12_interchange_ack.txt index 993cd2ed..c3b4f411 100644 --- a/src/test/resources/wiki/x12_interchange_ack.txt +++ b/src/test/resources/wiki/x12_interchange_ack.txt @@ -1,3 +1,3 @@ -ISA*00* *00* *ZZ*Receiver *ZZ*Sender *203001*1430*^*00501*000000001*0*P*:~ +ISA*00* *00* *ZZ*Receiver *ZZ*Sender *200301*1430*^*00501*000000001*0*P*:~ TA1*000000050*200229*1200*A*000~ IEA*1*000000001~ \ No newline at end of file diff --git a/staedi_events.png b/staedi_events.png index bdb2c6fd..f20c09a8 100644 Binary files a/staedi_events.png and b/staedi_events.png differ