12:21 PM mayuravaani
HL7 Sender Java Code
package hl7senderwithTls;
import ca.uhn.hl7v2.DefaultHapiContext;
import ca.uhn.hl7v2.HL7Exception;
import ca.uhn.hl7v2.HapiContext;
import ca.uhn.hl7v2.app.Connection;
import ca.uhn.hl7v2.app.Initiator;
import ca.uhn.hl7v2.hoh.sockets.CustomCertificateTlsSocketFactory;
import ca.uhn.hl7v2.hoh.util.HapiSocketTlsFactoryWrapper;
import ca.uhn.hl7v2.hoh.util.KeystoreUtils;
import ca.uhn.hl7v2.llp.LLPException;
import ca.uhn.hl7v2.model.Message;
import ca.uhn.hl7v2.parser.Parser;
import java.io.IOException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
public class hl7senderwithTls {
public static void main(String[] args) throws HL7Exception,
LLPException, IOException {
final int PORT_NUMBER = 9014;
final String tlsKeystoreFilepath = "src/main/resources/keystore.jks";
final String tlsKeystorePassphrase = "changeit";
final String tlsKeystoreType = "JKS";
// InHAPI almost all things revolve around a context object
HapiContext context = new DefaultHapiContext();
String adtMessage = "MSH|^~\\&|NES|NINTENDO|TESTSYSTEM|TESTFACILITY" +
"|20010101000000||ADT^A01|Q123456789T123456789X123456|P|2.3\r" +
"EVN|A01|20010101000000|||^KOOPA^BOWSER\r";
try {
//To validate the keystore
KeyStore keyStore = KeystoreUtils.loadKeystore(tlsKeystoreFilepath,
tlsKeystorePassphrase);
KeyStore.getInstance(tlsKeystoreType);
KeystoreUtils.validateKeystoreForTlsSending(keyStore);
CustomCertificateTlsSocketFactory tlsFac = new
CustomCertificateTlsSocketFactory(tlsKeystoreType,
tlsKeystoreFilepath, tlsKeystorePassphrase);
context.setSocketFactory(new HapiSocketTlsFactoryWrapper(tlsFac));
} catch (IOException e) {
e.printStackTrace();
} catch (CertificateException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (KeyStoreException e) {
e.printStackTrace();
}
// create a new MLLP client over the specified port
Connection connection = context.newClient("localhost", PORT_NUMBER, true);
// The initiator which will be used to transmit our message
Initiator initiator = connection.getInitiator();
// send the created HL7 message over the connection established
Parser parser = context.getPipeParser();
System.out.println("Sending message:" + "\n" + adtMessage);
Message response = initiator.sendAndReceive(parser.parse(adtMessage));
// display the message response received from the remote party
String responseString = parser.encode(response);
System.out.println("Received response:\n" + responseString.replaceAll("\r", "\n"));
}
} |
HL7 Receiver Java Code
This main class is used to
package hl7receiverwithTls;
import ca.uhn.hl7v2.DefaultHapiContext;
import ca.uhn.hl7v2.HapiContext;
import ca.uhn.hl7v2.app.HL7Service;
import ca.uhn.hl7v2.hoh.sockets.CustomCertificateTlsSocketFactory;
import ca.uhn.hl7v2.hoh.util.HapiSocketTlsFactoryWrapper;
import ca.uhn.hl7v2.hoh.util.KeystoreUtils;
import ca.uhn.hl7v2.parser.Parser;
import ca.uhn.hl7v2.parser.PipeParser;
import java.io.IOException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
public class hl7receiverwithTls {
public static void main(String[] args) throws InterruptedException {
final int PORT_NUMBER = 9014;
final String tlsKeystoreFilepath = "src/main/resources/keystore.jks";
final String tlsKeystorePassphrase = "changeit";
final String tlsKeystoreType = "JKS";
// In HAPI, almost all things revolve around a context object
HapiContext context = new DefaultHapiContext();
try {
//To validate the keystore
KeyStore keyStore = KeystoreUtils.loadKeystore(tlsKeystoreFilepath, tlsKeystorePassphrase);
KeyStore.getInstance(tlsKeystoreType);
KeystoreUtils.validateKeystoreForTlsSending(keyStore);
CustomCertificateTlsSocketFactory tlsFac = new CustomCertificateTlsSocketFactory(tlsKeystoreType,
tlsKeystoreFilepath, tlsKeystorePassphrase);
context.setSocketFactory(new HapiSocketTlsFactoryWrapper(tlsFac));
} catch (IOException e) {
e.printStackTrace();
} catch (CertificateException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (KeyStoreException e) {
e.printStackTrace();
}
Parser parser = new PipeParser();
HL7Service ourHl7Server = context.newServer(PORT_NUMBER, true);
// You can set up routing rules for your HL7 listener by extending the AppRoutingData class
ourHl7Server.registerApplication(new RegisterEventRouter(), new ourSimpleApplication());
ourHl7Server.setShutdownTimeout(10000);
ourHl7Server.startAndWait();
}
} |
Simple Application class that is used to receive the message and create and send the acknowledgement
package hl7receiverwithTls;
import ca.uhn.hl7v2.HL7Exception;
import ca.uhn.hl7v2.model.Message;
import ca.uhn.hl7v2.parser.PipeParser;
import ca.uhn.hl7v2.protocol.ReceivingApplication;
import ca.uhn.hl7v2.protocol.ReceivingApplicationException;
import java.io.IOException;
import java.util.Map;
public class ourSimpleApplication implements ReceivingApplication {
PipeParser pipeParser = new PipeParser();
public Message processMessage(Message message, Map map) throws ReceivingApplicationException, HL7Exception {
System.out.println("Received Message\n" + pipeParser.encode(message));
Message response = null;
try {
response = message.generateACK();
System.out.println("Sent Response\n" + pipeParser.encode(response));
} catch (IOException e) {
e.printStackTrace();
}
return response;
}
public boolean canProcess(Message message) {
return true;
}
} |
Event Router class that is used to rout the message to the appropriate versions and types.
package hl7receiverwithTls;
import ca.uhn.hl7v2.protocol.ApplicationRouter;
public class RegisterEventRouter implements ApplicationRouter.AppRoutingData {
public String getMessageType() {
return "*";
}
public String getTriggerEvent() {
return "*";
}
public String getProcessingId() {
return "*";
}
public String getVersion() {
return "*";
}
}
|