2017-02-20 9 views
1

私はterser.set()メソッドで少し内容を操作しているHL7メッセージを持っています。私がそれをしたら、私はデバッガに、私が望むように変更されていることがわかりますが、メッセージ全体を元に戻すことはできません。私は、(例えば)試した:terser後のHAPI v2:変更されたメッセージ全体を取得

HapiContext context = new DefaultHapiContext(); 
Parser  parser = context.getGenericParser(); 
Message  message = parser.parse(MESSAGE); 
Terser  terser = new Terser(message); 

terser.set("/PID-2", "XXX XX XXXX"); 

String fixedMessage = message.encode(); 

...私は近く、しかし、それぞれの分野で無い値を持つだけで垂直バー(パイプ)に終わったライン(セグメントライン)が戻ってくるトリミング取得します(垂直バーは単に落とされる)。私はメッセージを私が入れたものと同じにしておきたいと思います。

+0

私がここに書いているのは、実際のHL7メッセージの操作です。ユーザーは、自分に合った目的を変更したり修正したりしたいと考えています。このテストの例では、変更はSSNを削除することです。日付形式、住所修正などを変更するなどの理由が考えられます。 –

答えて

0

私はParserConfigurationでaddForcedEncodeを使う必要があると思います。

@Test 
    public void testSetManualRepetitions() { 
    try { 
     String m = "MSH|^~\\&|hl7Integration|hl7Integration|||||ADT^A01|||2.3|\r" + 
       "EVN|A01|20130617154644\r" + 
       "PID|1|465 306 5961||407623|Wood^Patrick^^^MR||19700101|1||||||||||\r" + 
       "PV1|1||Location||||||||||||||||261938_6_201306171546|||||||||||||||||||||||||20130617134644|||||||||"; 

     HapiContext hc = new DefaultHapiContext(); 
     ExecutorService es = hc.getExecutorService(); // to avoid npe when closing context should be fixed https://sourceforge.net/p/hl7api/bugs/223/ 
     ParserConfiguration pc = hc.getParserConfiguration(); 
     PipeParser pipeParser = hc.getPipeParser(); 
     Message message = pipeParser.parse(m); 
     Terser terser = new Terser(message); 
     //Add first Address 
     terser.set("/.PID-11(0)-1", "13 Oxford Road"); 
     terser.set("/.PID-11(0)-3", "Oxford"); 
     //Add second Address 
     terser.set("/.PID-11(1)-1", "16 London Road"); 
     terser.set("/.PID-11(1)-3", "London"); 

     pc.addForcedEncode("PID-26-1"); // make sure PID has 26 fields 
     System.out.println(message.encode().replaceAll("\r", "\r\n")); 
     hc.close(); 
    } catch (HL7Exception e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

利回り同様

:メッセージを変更しない

/Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home/bin/java -ea -Didea.launcher.port=7540 "-Didea.launcher.bin.path=/Applications/IntelliJ IDEA CE.app/Contents/bin" -Dfile.encoding=UTF-8 -classpath "/Applications/IntelliJ IDEA CE.app/Contents/lib/idea_rt.jar:/Applications/IntelliJ IDEA CE.app/Contents/plugins/junit/lib/junit-rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home/jre/lib/deploy.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home/jre/lib/ext/cldrdata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home/jre/lib/ext/dnsns.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home/jre/lib/ext/jfxrt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home/jre/lib/ext/localedata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home/jre/lib/ext/nashorn.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home/jre/lib/ext/sunec.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home/jre/lib/ext/zipfs.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home/jre/lib/javaws.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home/jre/lib/jfxswt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home/jre/lib/management-agent.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home/jre/lib/plugin.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home/lib/ant-javafx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home/lib/dt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home/lib/javafx-mx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home/lib/jconsole.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home/lib/sa-jdi.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home/lib/tools.jar:/Users/thomas/git/Hapi-HL7-Terser/target/test-classes:/Users/thomas/.m2/repository/junit/junit/4.4/junit-4.4.jar:/Users/thomas/.m2/repository/ca/uhn/hapi/hapi-base/2.2/hapi-base-2.2.jar:/Users/thomas/.m2/repository/ca/uhn/hapi/hapi-structures-v21/2.2/hapi-structures-v21-2.2.jar:/Users/thomas/.m2/repository/ca/uhn/hapi/hapi-structures-v23/2.2/hapi-structures-v23-2.2.jar:/Users/thomas/.m2/repository/ca/uhn/hapi/hapi-structures-v24/2.2/hapi-structures-v24-2.2.jar:/Users/thomas/.m2/repository/ca/uhn/hapi/hapi-structures-v25/2.2/hapi-structures-v25-2.2.jar:/Users/thomas/.m2/repository/org/slf4j/slf4j-simple/1.6.0/slf4j-simple-1.6.0.jar:/Users/thomas/.m2/repository/org/slf4j/slf4j-api/1.6.0/slf4j-api-1.6.0.jar:/Users/thomas/.m2/repository/org/slf4j/log4j-over-slf4j/1.6.2/log4j-over-slf4j-1.6.2.jar" com.intellij.rt.execution.application.AppMain com.intellij.rt.execution.junit.JUnitStarter -ideVersion5 com.hl7integration.hapi.tests.SetRepetitionsTerserTest,testSetManualRepetitions 
68 [main] INFO ca.uhn.hl7v2.util.Home - hapi.home is set to /Users/thomas/git/Hapi-HL7-Terser/. 
170 [main] INFO ca.uhn.hl7v2.VersionLogger - HAPI version is: 2.2 
197 [main] INFO ca.uhn.hl7v2.VersionLogger - Default Structure libraries found for HL7 versions 2.1, 2.3, 2.4, 2.5, 
MSH|^~\&|hl7Integration|hl7Integration|||||ADT^A01|||2.3 
EVN|A01|20130617154644 
PID|1|465 306 5961||407623|Wood^Patrick^^^MR||19700101|1|||13 Oxford Road^^Oxford~16 London Road^^London||||||||||||||| 
PV1|1||Location||||||||||||||||261938_6_201306171546|||||||||||||||||||||||||20130617134644 

技術的にあなたがしている、あなたはJavaオブジェクトにそれを解析して文字列に戻ってそれを符号化します。あなたの出力メッセージはあなたの入力メッセージのように見えます。後で微妙な違いが残る場合があります(たとえば、入力メッセージが動的な場合など)。ドキュメントから


http://hl7api.sourceforge.net/configuring_hapi.html):

強制エンコーディングデフォルト

、任意のセグメントまたは全く含有量を有​​していないため、何の意味論的な意味でを持たないフィールドを符号化しないであろうメッセージHAPIをコードする場合メッセージ。

これは、メッセージのどこに「ヒント」を得るために空のコンテンツが存在することが予想されるシステムにメッセージを送信する必要がある場合に、問題を引き起こす可能性があります。

addForcedEncode方法は、符号化されるように強制されるべきであるTerserパスを追加するために使用することができる:。

parser.getParserConfiguration()addForcedEncode( "PATIENT_RESULT/ORDER_OBSERVATION/ORC-4")。 ORCに内容がなくても、ORC-4はまだ存在しますが、空です。 String encoded = parser.encode(message); 例については、JavaDocを参照してください。

+0

ありがとうございました。 addForcedEncode()メソッドは何の違いもありません。私の入力メッセージは '\ r'で区切られた行を含む文字列です。私が言うように、message.encode()は、変更されたセグメントライン(変更したものと変更しなかったものを含む)以外のパイプ(|、||または|||||||)は空のパイプだけを残しているように、機構がそれらをトリムすることを決めたかのように、空のパイプを残さなくなりました。私の心の中で、私はすべてのセグメントを読む必要はありません、空のカウント|後でそれらを追加します。 –

+1

空欄を数えて返す必要はないと私は同意します。しかし、HL7標準によれば、空のフィールドは省略することができ、これはHAPIがどのように動作するかを正確に示しています。 AddForcedEncodeは(文書化されているように)動作します。私はプロダクションコードでそれを使用します。私は完全な例を答えの更新版に入れます。私はまた、 "ちょっとしたメッセージを変えたい"と思います。 – ThomasW

関連する問題