OpenMRS 모듈 용 HAPI 2.0 라이브러리를 사용하여 ORU_R01 유형의 HL7 메시지를 인코딩하려고합니다. 나는 HAPI 문서에있는 튜토리얼을 따라 갔고, 그에 따라 ORU_R01 메시지의 필수 필드를 채웠다. 지금, 나는 다음과 같은 링크를 사용하여이 메시지를 게시 할 : 나는 테스트를 위해 다음과 같은 메시지를 사용하고다음 HL7 인코딩의 오류는 무엇입니까?
http://localhost:8080/openmrs/remotecommunication/postHl7.form
:
MSH|^~\&|||||20140713154042||ORU^R01|20140713154042|P|2.5|1
PID|||1
OBR|1||1234^SensorReading|88304
OBX|0|NM|1||45
OBX|1|NM|2||34
OBX|2|NM|3||23
내가 제대로 모든 매개 변수가 올바른지 보장했다. HL7 메시지를 게시하면 스케줄러에서 HL7 작업을 시작합니다. 그런 다음 관리자 페이지로 이동하여 "HL7 오류 관리"를 클릭하여 메시지가 도착했는지 확인합니다.
ca.uhn.hl7v2.HL7Exception: HL7 encoding not supported
...
Caused by: ca.uhn.hl7v2.parser.EncodingNotSupportedException: Can't parse message beginning MSH|^~\
at ca.uhn.hl7v2.parser.Parser.parse(Parser.java:140)
전체 스택 추적이 여기에 있습니다 : : http://pastebin.com/ZnbFqfWC 나는 다음과 같은 스택 추적을 얻을. 나는 HL7 메시지합니다 (HAPI 라이브러리를 사용) 인코딩하려면 다음 코드를 작성했습니다 : 모든 가능성에
public String createHL7Message(int p_id, int concept_id[], String val[])
throws HL7Exception {
ORU_R01 message = new ORU_R01();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss",
Locale.ENGLISH);
MSH msh = message.getMSH();
msh.getFieldSeparator().setValue("|");
msh.getEncodingCharacters().setValue("^~\\&");
msh.getProcessingID().getProcessingID().setValue("P");
msh.getSequenceNumber().setValue("1");
msh.getMessageType().getTriggerEvent().setValue("R01");
msh.getMessageType().getMessageCode().setValue("ORU");
msh.getVersionID().getVersionID().setValue("2.5");
msh.getMessageControlID().setValue(
sdf.format(Calendar.getInstance().getTime()));
msh.getDateTimeOfMessage().getTime()
.setValue(sdf.format(Calendar.getInstance().getTime()));
ORU_R01_ORDER_OBSERVATION orderObservation = message
.getPATIENT_RESULT().getORDER_OBSERVATION();
ca.uhn.hl7v2.model.v25.segment.PID pid = message.getPATIENT_RESULT()
.getPATIENT().getPID();
Patient patient = (Patient) Context.getPatientService()
.getPatient(p_id);
System.out.println(String.valueOf(p_id) + " " + patient.getGivenName()
+ " " + patient.getFamilyName());
pid.getPatientName(0).getFamilyName().getSurname()
.setValue(patient.getFamilyName());
pid.getPatientName(0).getGivenName().setValue(patient.getGivenName());
pid.getPatientIdentifierList(0).getIDNumber()
.setValue(String.valueOf(p_id));
System.out.println();
// Parser parser = new PipeParser();
// String encodedMessage = null;
// encodedMessage = parser.encode(message);
// System.out.println(encodedMessage);
// Populate the OBR
OBR obr = orderObservation.getOBR();
obr.getSetIDOBR().setValue("1");
obr.getFillerOrderNumber().getEntityIdentifier().setValue("1234");
obr.getFillerOrderNumber().getNamespaceID().setValue("SensorReading");
obr.getUniversalServiceIdentifier().getIdentifier().setValue("88304");
Varies value = null;
// Varies value[] = new Varies[4];
for (int i = 0; i < concept_id.length; i++) {
ORU_R01_OBSERVATION observation = orderObservation
.getOBSERVATION(i);
OBX obx2 = observation.getOBX();
obx2.getSetIDOBX().setValue(String.valueOf(i));
obx2.getObservationIdentifier().getIdentifier()
.setValue(String.valueOf(concept_id[i]));
obx2.getValueType().setValue("NM");
NM nm = new NM(message);
nm.setValue(val[i]);
value = obx2.getObservationValue(0);
value.setData(nm);
}
Parser parser = new PipeParser();
String encodedMessage = null;
encodedMessage = parser.encode(message);
return encodedMessage;
}
을, 뭔가 메시지의 MSH 세그먼트에 문제가 있습니다,하지만 난 그게 무엇을 알아낼 수 없습니다 입니다. 이 오류를 해결하려면 어떻게해야합니까?
msh.getEncodingCharacters(). setValue ("^ ~ \ &");"을 쓰면 "잘못된 이스케이프 시퀀스"오류가 발생합니다. 인코딩 문자를 설정하면 기본 인코딩 문자 만 사용하는 경우에도 인코딩 문자가 설정되지 않았 음을 알리는 HL7 예외가 발생합니다 – Octavarium
@Octavarium 추가 정보로 내 대답을 업데이트했습니다. 도움이 되었기를 바랍니다. – Lars