簡體   English   中英

使用java套接字和HAPI的HL7消息解析錯誤

[英]HL7 message parsing error using java socket and HAPI

我正在使用自動血液學分析儀生成HL7消息並通過TCP / IP發送到連接的PC。 我正在使用java socket來接收HL7消息/數據。 但是當我嘗試解析HL7消息(字符串)時,它顯示一條錯誤消息:

ca.uhn.hl7v2.parser.EncodingNotSupportedException:確定消息的編碼。

以下是該消息的前50個字符供參考,盡管這可能不是問題所在:

.MSH|^~\&|DH3x|Dymind|||20190421171520||ORU^R01|20`

我正在嘗試使用HAPI解析消息

public static void main(String[] args) {

    try {
        //When using file
        //String messageString = readHL7MessageFromFileAsString(filePath);

        String messageString = ".MSH|^~\\&|DH3x|Dymind|||20190421171520||ORU^R01|20190421_140443_220|P|2.3.1||||||UNICODE\r\n" + 
                "PID|1\r\n" + 
                "PV1|1\r\n" + 
                "OBR|1||275|01001^Automated Count^99MRC||20190421140443|20190421140443|||||||20190421140443||||||||||HM||||||||admin\r\n" + 
                "OBX|1|IS|02001^Take Mode^99MRC||O||||||F\r\n" + 
                "OBX|2|IS|02002^Blood Mode^99MRC||W||||||F\r\n" + 
                "OBX|3|IS|02003^Test Mode^99MRC||||||||F\r\n" + 
                "OBX|4|NM|30525-0^Age^LN||||||||F\r\n" + 
                "OBX|5|IS|09001^Remark^99MRC||||||||F\r\n" + 
                "OBX|6|IS|03001^Ref Group^99MRC||||||||F\r\n" + 
                "OBX|7|NM|6690-2^WBC^LN||7.94|10*3/uL|4.00-10.00|~N|||F\r\n" + 
                "OBX|8|NM|736-9^LYM%^LN||34.4|%|20.0-40.0|~N|||F\r\n" + 
                "OBX|9|NM|20482-6^GRAN%^LN||52.5|%|50.0-70.0|~N|||F\r\n" + 
                "OBX|10|NM|32155-4^MID%^LN||13.1|%|3.0-9.0|H~A|||F\r\n" + 
                "OBX|11|NM|731-0^LYM#^LN||2.73|10*3/uL|0.80-4.00|~N|||F\r\n" + 
                "OBX|12|NM|19023-1^GRAN#^LN||4.17|10*3/uL|2.00-7.00|~N|||F\r\n" + 
                "OBX|13|NM|32154-7^MID#^LN||1.04|10*3/uL|0.10-0.90|H~A|||F\r\n" + 
                "OBX|14|NM|789-8^RBC^LN||4.71|10*6/uL|3.50-5.50|~N|||F\r\n" + 
                "OBX|15|NM|718-7^HGB^LN||13.7|g/dL|11.0-16.0|~N|||F\r\n" + 
                "OBX|16|NM|4544-3^HCT^LN||40.7|%|37.0-50.0|~N|||F\r\n" + 
                "OBX|17|NM|787-2^MCV^LN||86.4|fL|82.0-95.0|~N|||F\r\n" + 
                "OBX|18|NM|785-6^MCH^LN||29.2|pg|27.0-31.0|~N|||F\r\n" + 
                "OBX|19|NM|786-4^MCHC^LN||33.8|g/dL|32.0-36.0|~N|||F\r\n" + 
                "OBX|20|NM|788-0^RDW-CV^LN||13.5|%|11.5-14.5|~N|||F\r\n" + 
                "OBX|21|NM|21000-5^RDW-SD^LN||47.1|fL|35.0-56.0|~N|||F\r\n" + 
                "OBX|22|NM|777-3^PLT^LN||255|10*3/uL|100-300|~N|||F\r\n" + 
                "OBX|23|NM|32623-1^MPV^LN||9.9|fL|7.0-11.0|~N|||F\r\n" + 
                "OBX|24|NM|32207-3^PDW^LN||16.1||15.0-17.0|~N|||F\r\n" + 
                "OBX|25|NM|11003^PCT^99MRC||0.251|%|0.108-0.282|~N|||F\r\n" + 
                "OBX|26|NM|12001^WBC Histogram. Left Line^99MRC||15||||||F\r\n" + 
                "OBX|27|NM|12004^WBC Histogram. Middle Line^99MRC||43||||||F\r\n" + 
                "OBX|28|NM|12002^WBC Histogram. Right Line^99MRC||66||||||F\r\n" + 
                "OBX|29|ED|12003^WBC Histogram. BMP^99MRC||^Image^PNG^Base64^iVBORw0KGgoAAAANSUhEUgAAAJwAAABvCAIAAACW3D6tAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAsTAAALEwEAmpwYAAAGr0lEQVR4nO2db2gTZxzHf3F5cYy+eF70xQUsa8QJEWE9KG5hE2nEgS2+MKJCSycjCJPgQFOFrezNVjcY7cCaDnSt0hf1hZKUCYlgyfnCcREyLi8qyaCSK2RwQoULo+jBArcX59qapMk196RJnvw+L8r9+fX7PLnv/Z7nd8+FFgBBEARBEARBEARBEARBEARhnYV7C77jPnM7dDWUyWY2TklJyXfcp+ZVNa/mlJycloMXg+YpjuPC02E1r2prmpyShX6hCV1HtmP8u/GJHyfMbTklyynZ+4kXAPi9vJpXhT4ht5IjhBBCPIc8al41/Us8ToSnwxzHAYD/lF/TNNJNmvgpOhxnyb74RJz6aQoASDcBJ8zdmRsaHEo+S/oGfLGlmBlTKBTMn5lsxuVyQT8c9Bw89vkx82x0Mcp1cZyT28VPgVTHCdqaBk4YHh2e/HnSvd8tp2QAmL0z6z/jF/oETdPC0+HwdDgSjcTiMXBC4EIgcj/S7H4jm+wpPVAEKSV5+71DJ4bij+LKC4V0E0KI74hPXBIBQNd1KSVJKUl6Knk8nsHjg5iUbUDocih0NZRTcubYPHt7NngxKCUlADDn1I3IwJeBWDzm/cS79SAAjH8z7v3Mu7u9RjYpy1SA+FI88EUgu5yFIgBA/FE8+HXQTNN3cIL3iFdZVZLPkoX1QuhyyDws9Atj18Ze/v2ysR1Hdoq2pm0+rnRxxr+GWQMLfYJhGJqmaWuapmmxhzGzyuX38lJSyik5OSWreXXw5GAze49QhBDC7+Wb3QsEQRAEQZAGYRhGs7uA2KXCc2o5W52u7rqlOwJvmwZjydQSMJtbnHpMRVocNJVBLJnqcDgsylmKsyqG1AlmKoPsuPqtEUktCKmfnWUq1r1tQZ3DL7rbyuCcyiBY/TIIZiqDYPXLIJipDIKmMgiayiBY/TIIZiqD1F/9Vj5oSc5KEFI/mKkMgqYyyA5MxUX8dgGrXwbB4ZdBcO2XQTBTGQRNZRA0lUFsVb/lcy1Wv60AZiqDYPXLIJipDIKmMgiayiC49ssgmKkMYrf6LTmF1W8rYDVT8WVqG4HDL4OgqQyC1S+DYKYyCIW133f+HpolOStBSP1gpjIImsogaCqD0Kl+N6ZVO9WvYRg1lzisxCCl/xasWWxYZcUzM8b6g1an0RLffKgv+TBlt4PanFp90b9BwyaOxhUpHcEMwygf1nZw4RwOqBXsAIcBm61QcQWH4q1YmlMdDgf1hKAruFUNDaadqS1DJ1uLz6kMQvktDViIdOzKa5p2HF1owXKmdqyvLJsKneor46Z2JsxWvyV0VDGMmcogtU2tmLvb0jLVbwkMDDbW6aBM7RxfO8hU6BhfO8tU6Axfa1S/bF8CVkvijsvUrbD6OraaqZvfPGr/6rcK7Pm67ftU9j5qFeq5fVuYVvniWYtQciu3qccMrgi2O82/k3Z6E2A83fiKdHT1yypoKoIgSDMZPDkoJSU5JfvP+CnIOSEhJkg32U7cTnPBS0E5LWeWMxPfTzRIP7Ocqa5G+XL9z8K9BW1NC14KJsSEXS2e53NKjnQTQkhuJefuddtRc/e6E2LCMAye5yuK22nON+DLLGe4Lo7jOOmpNDw6TFdf6Bcy2QzXxZFuoqoqz/N09avAcdybN2/ACUKfkFvJ2ZF6DwDOj54v/FOIPojqut7T09Oztyf5LFm34syvM/N3549+evTWb7fW19fLxQ98eKDu5rgu7nHi8eqL1WKx6PF4uPe5fR/so6ivv9ajv0dfvXylv9aDXwWji9GhE0MU9aswf2de+Eg4/PFhMSGeO3vuxs0bdUvtAQBXj0vNq+a+klfcblu33sjwSHQxurFbLm6nuezzbPKPJADwPD8yOhJdjNLVLxQKygvFf8ovp2TxiZj9K0tXvwrBK8HCeuH02dP2pd4+0uhF/e2BIv2lw3Jxm825e93iEzF0LZR9nm2EfjqdHvt2zDfg8w34GqFfEV3XAUBf12tG1sQJANqa5nK5zH1zLrGvu0G5uL6u22lO6BciDyJjV8bM8YCuvjlbK6uKsqrM3J7xn/ErKwrd/u8SnkOezHLG3JaSktAv2NdU86pZKJWL22nO3etW8+rWX6GrH7gQiD2MmduR+5HQ5RBd/SpwXZymaQAUCiUnAGSfZ+OP4nJahiKIT8X0n2kqvTSpKF53c6ErIZ7nxSXR3J38ZfL6D9cp6s/dnfOf9EtJiXNyiqJM3ZyCYgW1xl0uE/d+t2kwAIhLYv0TLSGEEEKtX7XE6TZHV590k42H7EboI8iO+Q8yNxQKhhMVAwAAAABJRU5ErkJggg==||||||F\r\n" + 
                "OBX|30|NM|12051^RBC Histogram. Left Line^99MRC||28||||||F\r\n" + 
                "OBX|31|NM|12052^RBC Histogram. Right Line^99MRC||230||||||F\r\n" + 
                "OBX|32|ED|12053^RBC Histogram. BMP^99MRC||^Image^PNG^Base64^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||||||F\r\n" + 
                "OBX|33|NM|12101^PLT Histogram. Left Line^99MRC||5||||||F\r\n" + 
                "OBX|34|NM|12102^PLT Histogram. Right Line^99MRC||56||||||F\r\n" + 
                "OBX|35|ED|12103^PLT Histogram. BMP^99MRC||^Image^PNG^Base64^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||||||F\r\n" + 
                ".\r\n" + 
                ".MSH|^~\\&|DH3x|Dymind|||20190421171520||ACK^R01|20190421_140443_220|P|2.3.1||||||UNICODE\r\n" + 
                "MSA|AA|20190421_140443_220\r\n" + 
                ".\r\n" + 
                "";

        // instantiate a PipeParser, which handles the "traditional or default encoding"
        PipeParser ourPipeParser = new PipeParser();

        // parse the message string into a Java message object
        Message orderResultsHl7Message = ourPipeParser.parse(messageString);

        // create a terser object instance by wrapping it around the message object
        Terser terser = new Terser(orderResultsHl7Message);

        // now, let us do various operations on the message
        TerserHelper teFrserDemonstrator = new TerserHelper(terser);

        String terserExpression = "/.OBSERVATION(1)/OBX-3";
        String dataRetrieved = teFrserDemonstrator.getData(terserExpression);
        System.out.printf("Observation group's 2nd OBX segment's second field using expression '%s' was: '%s' \n\n",
                terserExpression, dataRetrieved);

        terserExpression = "/.OBSERVATION(1)/NTE(1)-3";
        dataRetrieved = teFrserDemonstrator.getData(terserExpression);
        System.out.printf("Observation group's 2nd NTE segment's second field using expression '%s' was: '%s' \n\n",
                terserExpression, dataRetrieved);

        terserExpression = "/.RESPONSE/ORDER_OBSERVATION/OBSERVATION(0)/OBX(0)-16-2";
        dataRetrieved = teFrserDemonstrator.getData(terserExpression);
        System.out.printf(
                "Observation group's First OBX segment's 16th Field and its Second component using expression '%s' was: '%s' \n\n",
                terserExpression, dataRetrieved);

        // let us now try a set operation using the terser
        terserExpression = "/.OBSERVATION(1)/NTE-3";
        teFrserDemonstrator.setData(terserExpression, "This is our override value using the setter");
        System.out.printf("Setting the data for second repetition of the NTE segment and its third field\n",
                terserExpression, dataRetrieved);

        System.out.println("\nWill display our modified message below \n");
        System.out.println(ourPipeParser.encode(orderResultsHl7Message));

    } catch (Exception e) {
        e.printStackTrace();
    }

}

public static String readHL7MessageFromFileAsString(String fileName) throws Exception {
    return new String(Files.readAllBytes(Paths.get(fileName)));
}

我期待Message對象。 但輸出給我一個錯誤信息:

ca.uhn.hl7v2.parser.EncodingNotSupportedException:確定消息的編碼。

以下是該消息的前50個字符供參考,盡管這可能不是問題所在:

.MSH|^~\&|DH3x|Dymind|||20190421171520||ORU^R01|20

我認為這是因為消息字符串中的前導和尾隨點。 你也有一個ORU ^ R01,它在同一個消息字符串中的響應。 這與點結合可能會導致解析錯誤。

您可能希望顯式調用msh.getEncodingCharacters()並檢查它的返回值(或檢查異常stacktrace)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM