/* * XMLParserTest.java * * Created on March 15, 2002, 12:53 PM */ package ca.uhn.hl7v2.parser; import java.io.IOException; import java.io.InputStream; import junit.framework.Assert; import junit.framework.TestCase; import ca.uhn.hl7v2.HL7Exception; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.w3c.dom.Document; import ca.uhn.hl7v2.model.Composite; import ca.uhn.hl7v2.model.Message; import ca.uhn.hl7v2.model.Segment; import ca.uhn.hl7v2.model.Type; import ca.uhn.hl7v2.model.v25.datatype.ED; import ca.uhn.hl7v2.model.v25.datatype.ST; import ca.uhn.hl7v2.model.v25.message.OMD_O03; import ca.uhn.hl7v2.model.v25.message.ORU_R01; /** * JUnit test harness for XMLParser * @author Bryan Tripp */ public class XMLParserTest extends TestCase { XMLParser parser; private static final Log ourLog = LogFactory.getLog(XMLParserTest.class); /** Creates a new instance of XMLParserTest */ public XMLParserTest(String arg) { super(arg); } public void setUp() throws Exception { parser = new DummyXMLParser(); } public void tearDown() throws Exception { } /** * Tests a fix to bug 2164291 * * XML parsing of segments which appear twice in a message structure definition (e.g. the * duplicate PID segments in a swap patient message) should be handled correctly. */ public void testParseDuplicateSegment() throws IOException, EncodingNotSupportedException, HL7Exception { InputStream stream = XMLParserTest.class.getClassLoader().getResourceAsStream("ca/uhn/hl7v2/parser/adt_a17.xml"); byte[] bytes = new byte[10000]; StringBuffer buffer = new StringBuffer(); int count; while ((count = stream.read(bytes)) > 0) { buffer.append(new String(bytes), 0, count); } String xmlMessage = buffer.toString(); Message message = new DefaultXMLParser().parse(xmlMessage); String er7Message = new PipeParser().encode(message).replaceAll("\\r", "\r\n"); System.out.println("Re-encoded:\r\n" + er7Message); // We should have only two reps of PID int firstIndex = er7Message.indexOf("PID"); int secondIndex = er7Message.indexOf("PID", firstIndex + 1); int thirdIndex = er7Message.indexOf("PID", secondIndex + 1); assertTrue(firstIndex > 0); assertTrue(secondIndex > firstIndex); assertTrue("Found third PID " + firstIndex + " " + secondIndex + " " + thirdIndex + ":\r\n" + er7Message, thirdIndex == -1); } public void testGetAckID() throws HL7Exception { assertEquals(parser.getAckID("12"), "12"); assertEquals(parser.getAckID(" help >>> *** x"); assertEquals(null, ackID); ackID = parser.getAckID("x"); assertEquals(null, ackID); ackID = parser.getAckID(" 12 \r"); assertEquals("12", ackID); ackID = parser.getAckID("|^~/&MPIISOHealthLinkISOUHN VistaISOUHNISO200204292049RSPK22RSP_K22200204292049100799P2.4Q22AA876OKQ22"); assertEquals("876", ackID); } public void testGetEncoding() throws Exception { String test1 = "\r|\r^~\\&\r"; String test2 = "\r|\r^~\\&\r"; //bad: no assertEquals("XML", parser.getEncoding(test1)); assertEquals(null, parser.getEncoding(test2)); } /*public void testParse() throws Exception { String test1 = "\r|\r^~\\&\r"; Message m = parser.parse(test1); assertEquals(null, m); }*/ public void testGetVersion() throws Exception { String message = " | ^~/& UHN Vista ISO UHN ISO MPI ISO HealthLink ISO 20020429132718.734-0400 QBP Q22 QBP_Q21 855 P 2.4 Q22 Q22 Find Candidates HL7nnnn @PID.3.19583518684@PID.3.4.1CANON@PID.5.1.1ECG-Acharya@PID.5.2Nf@PID.5.7L@PID.7197104010000@PID.8M 100 TTH 13831ULTIuser2234564R&H Med I 100RD R "; String ver = parser.getVersion(message); assertEquals("2.4", ver); } public void testRemoveWhitespace() throws Exception { assertEquals("hello", parser.removeWhitespace("\t\r\nhello ")); assertEquals("hello there", parser.removeWhitespace(" hello \t \rthere\r\n")); } /** * - * @throws HL7Exception - */ public void testGetCriticalResponseData() throws HL7Exception { String message = "\r\n" + " \r\n" + " |\r\n" + " ^~\\&\r\n" + " LABMI1\r\n" + " DMCRES\r\n" + " \r\n" + " 19951010134000\r\n" + " \r\n" + " \r\n" + " ORU\r\n" + " R01\r\n" + " \r\n" + " LABMI1199510101340007\r\n" + " D\r\n" + " 2.2\r\n" + " AL\r\n" + " "; Segment data = parser.getCriticalResponseData(message); Type actual = data.getField(2, 0); String expected = "^~\\&"; assertEquals(expected, actual.toString()); // Encoding } public class DummyXMLParser extends XMLParser { public DummyXMLParser() throws HL7Exception { super(); } public Message parseDocument(Document XMLMessage, String version) throws HL7Exception { return null; } public Document encodeDocument(Message source) throws HL7Exception { return null; } } public void testEdIssue() throws EncodingNotSupportedException, HL7Exception { String messageText = "\r\n" + " \r\n" + " |\r\n" + " ^~\\&\r\n" + " \r\n" + " APPNAME\r\n" + " \r\n" + " \r\n" + " VENDOR NAME\r\n" + " \r\n" + " \r\n" + " CLINIC APPLICATION\r\n" + " \r\n" + " \r\n" + " CLINIC ID\r\n" + " \r\n" + " \r\n" + " 20100723170708\r\n" + " \r\n" + " \r\n" + " ORU\r\n" + " R01\r\n" + " \r\n" + " 12345\r\n" + " \r\n" + " P\r\n" + " \r\n" + " \r\n" + " 2.5\r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " MODEL:xxx/SERIAL:xxx\r\n" + " \r\n" + " STJ\r\n" + " \r\n" + " U\r\n" + " \r\n" + " \r\n" + " \r\n" + " Doe\r\n" + " \r\n" + " John\r\n" + " Adams\r\n" + " \r\n" + " \r\n" + " 197903110920\r\n" + " \r\n" + " M\r\n" + " \r\n" + " \r\n" + " Street\r\n" + " \r\n" + " City\r\n" + " 06531\r\n" + " Country\r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " 1\r\n" + " R\r\n" + " \r\n" + " DoctorID\r\n" + " \r\n" + " \r\n" + " 123456\r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " 1\r\n" + " \r\n" + " 123456\r\n" + " \r\n" + " \r\n" + " Remote Follow-up\r\n" + " \r\n" + " \r\n" + " 20040328134623\r\n" + " \r\n" + " \r\n" + " 20040328134623\r\n" + " \r\n" + " \r\n" + " 20040328134623\r\n" + " \r\n" + " F\r\n" + " \r\n" + " \r\n" + " 1\r\n" + " L\r\n" + " Comment\r\n" + " \r\n" + " \r\n" + " \r\n" + " 1\r\n" + " ST\r\n" + " \r\n" + " 257\r\n" + " MDC-IDC_SYSTEM_STATUS\r\n" + " MDC_IDC\r\n" + " \r\n" + " 1\r\n" + " \r\n" + " m\r\n" + " \r\n" + " L\r\n" + " F\r\n" + " \r\n" + " 20070422170125\r\n" + " \r\n" + " \r\n" + " LastFU\r\n" + " Since Last Follow-up Aggregate\r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " 2\r\n" + " ED\r\n" + " \r\n" + " 18750-0\r\n" + " Cardiac Electrophysiology Report\r\n" + " LN\r\n" + " \r\n" + " \r\n" + " Application\r\n" + " PDF\r\n" + " Base64\r\n" + "\r\n" + "\r\n" + "JVBERi0xLjMKJeLjz9MKCjEgMCBvYmoKPDwgL1R5cGUgL0NhdGFsb2cKL091dGxpbmVzID\r\n" + "IgMCBS\r\n" + "\r\n" + "Ci9QYWdlcyAzIDAgUgovT3BlbkFjdGlvbiA4IDAgUiA+PgplbmRvYmoKMiAwIG9iago8PCAvVHlw\r\n" + "\r\n" + "ZSAvT3V0bGluZXMgL0NvdW50IDAgPj4KZW5kb2JqCjMgMCBvYmoKPDwgL1R5cGUgL1BhZ2VzCi9L\r\n" + "\r\n" + "aWRzIFs2IDAgUgpdCi9Db3VudCAxCi9SZXNvdXJjZXMgPDwKL1Byb2NTZXQgNCAwIFIKL0ZvbnQg\r\n" + "\r\n" + "PDwgCi9GMSAxMSAwIFIKL0YyIDEyIDAgUgovRjMgMTcgMCBSID4+Ci9YT2JqZWN0IDw8IAovSTEg\r\n" + "\r\n" + "OSAwIFIgPj4KPj4KL01lZGlhQm94IFswLjAwMCAwLjAwMCA1OTUuMjgwIDg0MS44OTBdCiA+Pgpl\r\n" + "\r\n" + "bmRvYmoKNCAwIG9iagpbL1BERiAvVGV4dCAvSW1hZ2VDIF0KZW5kb2JqCjUgMCBvYmoKPDwKL0Ny\r\n" + "\r\n" + "ZWF0b3IgKERPTVBERiBDb252ZXJ0ZXIpCi9DcmVhdGlvbkRhdGUgKDIwMTAtMDItMTUpCj4+CmVu\r\n" + "\r\n" + "ZG9iago2IDAgb2JqCjw8IC9UeXBlIC9QYWdlCi9QYXJlbnQgMyAwIFIKL0Fubm90cyBbIDEzIDAg\r\n" + "\r\n" + "UiAxNSAwIFIgXQovQ29udGVudHMgNyAwIFIKPj4KZW5kb2JqCjcgMCBvYmoKPDwgL0ZpbHRlciAv\r\n" + "\r\n" + "RmxhdGVEZWNvZGUKL0xlbmd0aCA5MTcgPj4Kc3RyZWFtCnicnVbZbttGFH3XV9y3xoA8nn1IFQgg\r\n" + "\r\n" + "23HSBC1cS4Uf6jyMpZE5KReXS4wG+Zi+9i97SYuLRSl2AgMUfMR77pm7nNGEEUopDJ/53YTBA3B4\r\n" + "\r\n" + "DxQ+wZ/wET/XE8abb2UgiA4ZKMMIDygIqQkLQ8gdbCZ/T0LdvFX/iYDImvQxzoSMyJDCKpmc/MLg\r\n" + "\r\n" + "PJv8PqGP7w6emPt02YUYQxgPYLmGkwvWoLDcALy6rG5jX0RuDVkKR7D8BG+WdVwgiaFBE8cZfYzj\r\n" + "\r\n" + "g7hfbVHYVVQVriwLmMdfIucTl/9UwLkvnC0cXDn8zFcRnLm0dPmAWwQBCbg8LApuXrWvD0/EBucS\r\n" + "\r\n" + "WB2m9GGOqCzvZycniV3nK5LcRSSy+Webr4lbV4fJr94iqLBlFFvWtkuECstf51LESAYJKCWJYLRD\r\n" + "\r\n" + "Ylgc7IBSgij9jRbcHD132LaJIiShoi1D2BK8yxLXU+yqZzhcqg4OSIiSExCaGCU64FvaRT2C4mBi\r\n" + "\r\n" + "eF13fpPlVQI2XcPiev7bDJaRg8scu5+WDXpRlRWOdLaBxcoj6Dd+BdfuFs6yJKlSX3pX9PI1ryX0\r\n" + "\r\n" + "z0MrJLYl4UToEJQOmxXaiq8XaO+ZxiB2vCuvaLiwvbiYNVuLxIjwLcK3yI6AGDBlR8RGROy7iHYF\r\n" + "\r\n" + "vIxpjAw1tUw7IvcI2Keon0IdojUg3AyDAC7bafiuURjYQcurKbqaGfM+PzUDEgyTXLUkOz63sqVH\r\n" + "\r\n" + "mzu3pZv9OwzGEwvFm2gh5XhFOaVmnEyhL+hW8fD1s9jmf8GyOfIHn2ZF5EuLA3zTEN0ckadrUzzY\r\n" + "\r\n" + "dAYl1up+UKtNV6uiL8ADFmDVF4DsqaMyuJ+KjVWd5t5t4NRnPsXcybOOodCwtJY4MvV9I2QH1I6B\r\n" + "\r\n" + "+UJc0EAezvczBDNgWhwzvN+GOhUJ0LmVwn7TPcV+erW8danLbQzvsuIeqxhP4dqmdzBPbqvYlln+\r\n" + "\r\n" + "D5xZLNPjJQOLypcODGfnU8wDl9iHxKawKHPnyimcZkWZpdNh1TjHSxjNXeGCGLXHnp/KoZwxOYU/\r\n" + "\r\n" + "FvMn88OIxvlRDC2e8THH0sXuPspSNwPNzLHh+liEgYGvcGFXhU98PPhGMsogy7v/jWHBMBlOnanr\r\n" + "\r\n" + "TrF+Wo2T/QfvbVpZrAybAqdo8fM4hit/F6H++lbOP+N1/6OOK+u21z9aXui47W8dnKE6rHeyFul9\r\n" + "\r\n" + "q6XuHKgHeiOTQbhLtEVeSrQr4GVMY2SgqWPaEblHwB5F/wMtHGbMCmVuZHN0cmVhbQplbmRvYmoK\r\n" + "\r\n" + "CjggMCBvYmoKWzYgMCBSIC9GaXRdCmVuZG9iagoKOSAwIG9iago8PAovVHlwZSAvWE9iamVjdAov\r\n" + "\r\n" + "U3VidHlwZSAvSW1hZ2UKL1dpZHRoIDIwMAovSGVpZ2h0IDgwCi9GaWx0ZXIgL0ZsYXRlRGVjb2Rl\r\n" + "\r\n" + "Ci9EZWNvZGVQYXJtcyA8PCAvUHJlZGljdG9yIDE1IC9Db2xvcnMgMSAvQ29sdW1ucyAyMDAgL0Jp\r\n" + "\r\n" + "dHNQZXJDb21wb25lbnQgOD4+Ci9Db2xvclNwYWNlICBbIC9JbmRleGVkIC9EZXZpY2VSR0IgMzIg\r\n" + "\r\n" + "MTAgMCBSIF0KL0JpdHNQZXJDb21wb25lbnQgOAovTGVuZ3RoIDIwMzEgPj4Kc3RyZWFtCmje7Zlp\r\n" + "\r\n" + "l6soEIZNOp2OccGoGBNc+P+/cqhiK1zSduaeM33u6Ic0IhT1SBXg25H8S65oB9lBdpAdZAf5/SB1\r\n" + "\r\n" + "fXflZ133r1rW7xh9v48DqaPo0xSvUXQxxbsvSnk5RFF0OD/xwUmVo49M+j7e8/snPIw+YbBLFLkB\r\n" + "\r\n" + "anIrT9FpYrSO3FVLX1YeBDehI0sg0U2/6oP3/qw62BafxtShRkB9WfijL8rMjZp9C0KNbgWhfZZB\r\n" + "\r\n" + "Dr0ewYE8jTemwbmXz8vhhG3Ayu1kpwF9N2/opgxl2PJ7kMCournW+uohNmv1GuHPc3JD+yyDRGfr\r\n" + "\r\n" + "kwG5RMdzdLRl3bYHf22Lu/PqfMTeODkHXX3Pvg2twGhNw5MOGd4EfZZzBAz1B/ir3VTl7G6tq/4+\r\n" + "\r\n" + "wUggmc7Pq5nQzM1hOP4ayJ1a2Qhyf7FqgZVTdOw/lT8WJAPfTsZnSIvzrXf5crx6c2fllKK+6vJh\r\n" + "\r\n" + "4oyOlusSSGDUh1b/CiToswyi0vwEKW9BjtEXvuEnyeFPfN39B5SPX0+bSjcgOJLViIxPUniW7NRo\r\n" + "\r\n" + "TRuugwR9lkFgEYX3b0BqjeCC//l1BAvazwzXjsPNpJLGyX4MQo1uBQkdWQSB1ah3ICrSLur6MMGP\r\n" + "\r\n" + "Jq7KxNXc3MzirILqBA0PaHoeWi/3EWJ0Y47MHVkAueNeokGe4S5krv5I3oSO+yx456+TPXOZerAT\r\n" + "\r\n" + "7Yz+BGTiyAxE1tKBqFd7wuuIkdN/6Xn5gP7ZzW4ZNcTeUTfUvh3s8vu8zEGekfH/hryB0Y0gQZ9V\r\n" + "\r\n" + "EOlA3NoFjzKMuutT9nh+gbVaodwx6m40pp/BhniegcB2+wVmDhiw1Gi4Ia6DBH02gFx8agB777L2\r\n" + "\r\n" + "qLbdD3tzpcFu2F2owcxMQeAA5B4GRsMjyipI2Od7kP7oYzjTUXFGH85629Pr7w2X9czvJwivD436\r\n" + "\r\n" + "VDcFkf3ZnyhDo9tAJo68d4y/k8N5D+ee987m4Rn/vv3E/6LP/oW4g+wgO8gO8mtABs6HV/f2ann7\r\n" + "\r\n" + "J1zgXJifPw0i4li8urcXi9nWYco4HteexTE3P/8VSMWqrcOwuJAvQRhr/zuQH1wsbl+D/MEcGThj\r\n" + "\r\n" + "rBqs4yox9NXifVeyQtOMjWomXI7AT4PvU7gmsi1YiZ4LzmVXVjLHyIIWDQkxaNZpEJ0jQ8WYyUdn\r\n" + "\r\n" + "QgpVyXQ3P/bMlgPpYn21BkSYe5UHqtgk5pl8YClubI6onxwqqtZ2lx1WYDDxOO4S1QxvKqxO7OyO\r\n" + "\r\n" + "TPfwOfKIrW1iotGVSac4E1s7FljKh4UZSXPOVU4mI52RHFwDJsZV1wRtsYcoMNgMSJxUFYyQYndl\r\n" + "\r\n" + "KY/TVnD9olV1nFYSAAdVI1qWkgUg5VUae5A0LsSjjIfAxBAXnDN4oapH/hBV0sI7SZSthKw2HgSn\r\n" + "\r\n" + "qTWOC5cdHH8LPbBQP+lIJgNBOuwH9dikxRrFoN4JN5NnjI12HIlcTJXH3IPE8UM3oCZ0B2V5UGNV\r\n" + "\r\n" + "+vmgrdLkJSAPzpsODLrnKipK3x7/JNovFQSUxmYsNin0CjVCmZNMVqOnjY+FRjsrOzojSYV11IQc\r\n" + "\r\n" + "WpWorX6LcfnQfRO0kXvrPkcSkxMeRIVRIScgsbvEGghzTTiAeNcxi1hn90F4F+E+gj6kDxmYaP2A\r\n" + "\r\n" + "MHsqprCvy+ApSBInrdBhaRxX3fJxDsLMajasg6SmifDe6jlplCfJ4EBG89rdhji2kMQPakJNmEqM\r\n" + "\r\n" + "R6l9eJSKtcKJtmvqBETo+JQexHEEIDkGG9nZ5yBVnPrjRwCiZ5m7ERvThO7sIxgkJgyvTwe19kFk\r\n" + "\r\n" + "Dyv7iNArZ+NBSlzxpiCtaQeMKyAqFzCz0i4EETlYSV1Yq/WqGcfGr1pj2mJaM2rCBCeuk4zrhQD6\r\n" + "\r\n" + "ggND3s5XLZVoJaxyFqQJ9hEHgosmSxFnBQSGSmBzKUOQwvQc/LtD+w6kMf1aagKWiIrDIg1RFjOG\r\n" + "\r\n" + "diGboJiP82QHiFQ4EL4CIrnNyFUQ+UhNUgYgo+9pSKBZQXKkdf2ICSwxXLUELgLlaN3VxdlZaxDd\r\n" + "\r\n" + "tmNN933DQYgtPTsxrPbzRdJqFGKcF/cvxB1kB9lBdpC/DORfizu/BeRtPeH9N/DLQN5XVP4+ECvc\r\n" + "\r\n" + "hEoL0V9otZeOUE8dK2YbF63xR9VNNbe2sLIO0X2gv9WaBo7fbUM4GvFsC4gVbgKlxesvQTWRjvCL\r\n" + "\r\n" + "LMczrhGKQFFQX3Go55T0gKgVnlSrCk4YolqTsN+0wWjOs80gKNwESovXX0IBxktHMLj6lGFIp79o\r\n" + "\r\n" + "OgABpSc28oKeW3UaL6BTg9JFKRS+6e+0Jjibpwy+6ulozrPNIPjpGSgtTn+ZCDBeOkJHSq0Q4Rdl\r\n" + "\r\n" + "22JopfpbjtOPXhTvKvyIwzlOplqTy5FgNCopbQPhM6XF6S8TAcZLRzAYM2Pzac7SqtQHR2dmqoKq\r\n" + "\r\n" + "8KttyQm+aQWgIIOUE6XF6S9hNZGO7Md+qHQvgJCy8JrSCkgwGp8rDd+AuJkhSovRX8JqIh05ACvD\r\n" + "\r\n" + "rINUBKQ0xtZB/GgzJWYbyFxpAf0lqKbSkZ8Ju7CMyyAFpjY+HmPyT4ZFkMCJN0ECpcXrL7SaSkce\r\n" + "\r\n" + "RBkoBrXw5OMiiGqXC7V/wIqglaaxLBdACjmOoRPvghClhegvgQBDpCOSG7kJ68ciiPmnAkYYpF7O\r\n" + "\r\n" + "EsQJQXKzj9DR3gWhSgvRX2g1kY5okqPck4vl0DK6TooL6Vg6GTgEwWWkC0f7IQi9VkQXUl6RjoQY\r\n" + "\r\n" + "tupIa03dGBO5Z/+w2kF2kB1kB9lBdpD/E8g/QZSt+wplbmRzdHJlYW0KZW5kb2JqCgoxMCAwIG9i\r\n" + "\r\n" + "ago8PCAvRmlsdGVyIC9GbGF0ZURlY29kZQovTGVuZ3RoIDExMCA+PgpzdHJlYW0KeJwBYwCc/2MG\r\n" + "\r\n" + "EW0WIHclL4A1PopETZRUXJ5ka6hzerGCiJaWlrqSlp2dnaOjo8ShpaqqqrCwsLe3t86xtL6+vsTE\r\n" + "\r\n" + "xNjBw8rKytHR0eLQ0tfX197e3uvg4eXl5evr6/Xv8PLy8vj4+P///6g8Qs0KZW5kc3RyZWFtCmVu\r\n" + "\r\n" + "ZG9iagoKMTEgMCBvYmoKPDwgL1R5cGUgL0ZvbnQKL1N1YnR5cGUgL1R5cGUxCi9OYW1lIC9GMQov\r\n" + "\r\n" + "QmFzZUZvbnQgL0hlbHZldGljYQovRW5jb2RpbmcgL1dpbkFuc2lFbmNvZGluZwo+PgplbmRvYmoK\r\n" + "\r\n" + "MTIgMCBvYmoKPDwgL1R5cGUgL0ZvbnQKL1N1YnR5cGUgL1R5cGUxCi9OYW1lIC9GMgovQmFzZUZv\r\n" + "\r\n" + "bnQgL0hlbHZldGljYS1Cb2xkT2JsaXF1ZQovRW5jb2RpbmcgL1dpbkFuc2lFbmNvZGluZwo+Pgpl\r\n" + "\r\n" + "bmRvYmoKMTMgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9BIDE0IDAgUgov\r\n" + "\r\n" + "Qm9yZGVyIFswIDAgMF0KL0ggL0kKL1JlY3QgWyAzOTYuMTU2MCA3NzcuMTI4NCA1NTMuNTYwMCA3\r\n" + "\r\n" + "OTEuMDAwNCBdCj4+CmVuZG9iagoxNCAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9VUkkKL1VS\r\n" + "\r\n" + "SSAoaHR0cDovL21hZHJjLm1naC5oYXJ2YXJkLmVkdSkKPj4KZW5kb2JqCjE1IDAgb2JqCjw8IC9U\r\n" + "\r\n" + "eXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovQSAxNiAwIFIKL0JvcmRlciBbMCAwIDBdCi9IIC9J\r\n" + "\r\n" + "Ci9SZWN0IFsgMTIuMDAwMCA3MzkuOTUwMCAzNi4wMDMwIDc1MC4zNTQwIF0KPj4KZW5kb2JqCjE2\r\n" + "\r\n" + "IDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL1VSSQovVVJJIChodHRwOi8vbWFkcmMubWdoLmhh\r\n" + "\r\n" + "cnZhcmQuZWR1LykKPj4KZW5kb2JqCjE3IDAgb2JqCjw8IC9UeXBlIC9Gb250Ci9TdWJ0eXBlIC9U\r\n" + "\r\n" + "eXBlMQovTmFtZSAvRjMKL0Jhc2VGb250IC9IZWx2ZXRpY2EtQm9sZAovRW5jb2RpbmcgL1dpbkFu\r\n" + "\r\n" + "c2lFbmNvZGluZwo+PgplbmRvYmoKeHJlZgowIDE4CjAwMDAwMDAwMDAgNjU1MzUgZiAKMDAwMDAw\r\n" + "\r\n" + "MDAxNSAwMDAwMCBuIAowMDAwMDAwMDk4IDAwMDAwIG4gCjAwMDAwMDAxNDQgMDAwMDAgbiAKMDAw\r\n" + "\r\n" + "MDAwMDM0NyAwMDAwMCBuIAowMDAwMDAwMzg0IDAwMDAwIG4gCjAwMDAwMDA0NjAgMDAwMDAgbiAK\r\n" + "\r\n" + "MDAwMDAwMDU0OSAwMDAwMCBuIAowMDAwMDAxNTM5IDAwMDAwIG4gCjAwMDAwMDE1NjggMDAwMDAg\r\n" + "\r\n" + "biAKMDAwMDAwMzg2OCAwMDAwMCBuIAowMDAwMDA0MDUyIDAwMDAwIG4gCjAwMDAwMDQxNjAgMDAw\r\n" + "\r\n" + "MDAgbiAKMDAwMDAwNDI4MCAwMDAwMCBuIAowMDAwMDA0NDA4IDAwMDAwIG4gCjAwMDAwMDQ0ODgg\r\n" + "\r\n" + "MDAwMDAgbiAKMDAwMDAwNDYxNCAwMDAwMCBuIAowMDAwMDA0Njk1IDAwMDAwIG4gCnRyYWlsZXIK\r\n" + "\r\n" + "PDwKL1NpemUgMTgKL1Jvb3QgMSAwIFIKL0luZm8gNSAwIFIKPj4Kc3RhcnR4cmVmCjQ4MDgKJSVF\r\n" + "T0YK\r\n" + " \r\n" + " F\r\n" + " \r\n" + " 20070422170125\r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " 3\r\n" + " CE\r\n" + " \r\n" + " 257\r\n" + " MDC-IDC_SYSTEM_STATUS\r\n" + " MDC_IDC\r\n" + " \r\n" + " 1\r\n" + " \r\n" + " T57000\r\n" + " GALLBLADDER\r\n" + " SNM\r\n" + " \r\n" + " \r\n" + " m\r\n" + " \r\n" + " L\r\n" + " F\r\n" + " \r\n" + " 20070422170125\r\n" + " \r\n" + " \r\n" + " LastFU\r\n" + " Since Last Follow-up Aggregate\r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + ""; ORU_R01 message = (ORU_R01) new DefaultXMLParser().parse(messageText); ED obx5 = (ED) message.getPATIENT_RESULT().getORDER_OBSERVATION().getOBSERVATION(1).getOBX().getObx5_ObservationValue(0).getData(); assertTrue(obx5.getData().getValue().startsWith("JVBERi0xLjMKJeLjz9MKCjEgMCBvYmoKPDwgL1R5cG")); } /** * Test for issue reported here: https://sourceforge.net/tracker/?func=detail&aid=3115671&group_id=38899&atid=423835 */ public void testEncodeOmdO03() throws EncodingNotSupportedException, HL7Exception { String texto = "MSH|^~\\&|DIETOOLS|1^DOMINION|JARA||20101027181706||OMD^O03^OMD_O03|20101027181706|P|2.5|||ER|AL\r"+ "PID|1||CIPNUM^^^CAEX^CIP^^^^EX&&ES-EX||DUMAS^VICTOR HUGO|ZAPATA|19740325|1\r"+ "PV1|1|I|^^51C302-1^^^^^^^0005&51UHP31&UH TERCERA 1 HSPA&TIPOUOENF||||||||||||||||100002739^005^^^^^^^^0005&APARATO DIGESTIVO&5DIG&TIPOUOSERV|\r"+ "ORC|XO||||||||20101117|1^^HERNAME\r"+ "TQ1|1||CE||||20101117\r"+ "ODS|D||PAN4^PEDIATRICA 1|\r"+ "ODS|P||EVENTO^LACT|\r"+ "ODS|P||CARACTERISTICA^SIN SAL|\r"+ "ODS|P||CARACTERISTICA^DIABETICO|\r"; String textoXML = new String(); //parseamos para conseguir un string de un xml con formato hl7 XMLParser xmlParser = new DefaultXMLParser(); PipeParser pipeParser = new PipeParser(); OMD_O03 msg = (OMD_O03) pipeParser.parse(texto); textoXML = xmlParser.encode(msg); System.out.println("Objeto transformado0: " + textoXML); Assert.assertTrue(textoXML.contains("OMD_O03.DIET")); } /** * See https://sourceforge.net/tracker/?func=detail&atid=423835&aid=3308845&group_id=38899 */ public void testEncodeLongValuesDoesntWrap() throws HL7Exception, IOException { // OBX-5 is a really really long string String obx5Value = "AAAABBBB CCCCDDDD "; obx5Value = obx5Value + obx5Value + obx5Value + obx5Value + obx5Value; obx5Value = obx5Value + obx5Value + obx5Value + obx5Value + obx5Value; obx5Value = obx5Value.trim(); ORU_R01 msg = new ORU_R01(); msg.initQuickstart("ORU", "R01", "T"); msg.getPATIENT_RESULT().getORDER_OBSERVATION().getOBSERVATION().getOBX().getObx2_ValueType().parse("ST"); msg.getPATIENT_RESULT().getORDER_OBSERVATION().getOBSERVATION().getOBX().getObx5_ObservationValue(0).parse(obx5Value); DefaultXMLParser p = new DefaultXMLParser(); String encoded = p.encode(msg); ourLog.info("Encoded: " + encoded); msg = (ORU_R01) p.parse(encoded); ST st = (ST) msg.getPATIENT_RESULT().getORDER_OBSERVATION().getOBSERVATION().getOBX().getObx5_ObservationValue(0).getData(); String actual = st.getValue(); Assert.assertEquals(obx5Value, actual); } }