-
Notifications
You must be signed in to change notification settings - Fork 22
ShanoirUploader FAQ
This page summarizes known issues/questions and solutions while installing and using ShanoirUploader within the hospital environment.
The error is PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
Solution Import the server certificate into the local cacerts keystore of Java; cert download of https://shanoir.irisa.fr pem file or https://shanoir-ofsep.irisa.fr pem file on using Firefox. Once the cert is imported, ShUp can connect to the server. USE the CHAIN cert (from Firefox)!
The same has to be done for qualif as well, so twice import-cert. Example below with Java 17, adapt for Java 8 etc.
C:\ProgramFiles\Java\jdk-17\bin>keytool -importcert -file c:\temp\shanoir(-ofsep)-irisa-fr.pem
Replace javaw.exe with java.exe in .bat/.sh file, when you start ShUp. All logs will come to the console.
ERROR [org.shanoir.dicom.importer.UploadJobManager] [82] javax.xml.bind.UnmarshalException
- with linked exception: [org.xml.sax.SAXParseException; systemId: file:/XXXX/.su_v7.0.1/workFolder/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_2023_xx_xx_xx_xx_xx_xxx/upload-job.xml; lineNumber: 1; columnNumber: 1; Fin pr\E9matur\E9e du fichier.] 2023-07-25 14:48:00 ERROR [org.shanoir.uploader.action.init.StartupStateContext] [44] java.lang.NullPointerException at org.shanoir.uploader.nominativeData.CurrentNominativeDataController.processFolder(CurrentNominativeDataController.java:211) at org.shanoir.uploader.nominativeData.CurrentNominativeDataController.processWorkFolder(CurrentNominativeDataController.java:192) at org.shanoir.uploader.nominativeData.CurrentNominativeDataController.(CurrentNominativeDataController.java:50) at org.shanoir.uploader.action.init.ReadyState.load(ReadyState.java:45) at org.shanoir.uploader.action.init.StartupStateContext.nextState(StartupStateContext.java:42) at org.shanoir.uploader.action.init.PacsConfigurationState.load(PacsConfigurationState.java:36)
Solution: Close and stop ShUp. Go in the file explorer (e.g. Windows explorer) into the workFolder, see above /XXXX/.su_v7.0.1/workFolder, and delete the folder with the error (xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_2023_xx_xx_xx_xx_xx_xxx). Or clean the entire workFolder to free more space.
ERROR [org.shanoir.uploader.action.FindDicomActionListener] [392] Not able to sort tree java.lang.NullPointerException at org.shanoir.uploader.action.FindDicomActionListener.sortTree(FindDicomActionListener.java:332) at org.shanoir.uploader.action.FindDicomActionListener.actionPerformed(FindDicomActionListener.java:222)
Solution: Some PACS, e.g. Telemis, do not support Patient Root Query, so the Study Root Query has to be used. This means: only query with studyDate (examDate) and/or studyDescription to solve the problem.
In the su.log we find the following: "handshake_failure" during login.
Solution: Maybe ShUp has been started under Windows with double-click on the .jar file. ALWAYS use the start-shup-windows-java.bat file!
In the su.log we find the following: 0 DICOM files could be downloaded; error with download from PACS
Solution: Contact PACS admin and ask for enabling c-move for AET shanoir-uploader.
After step 1) (selection of exam, completion of patient information and click on downloadOrCopy) nothing happens, the step 2) (the import overview table) remains empty, no entry appears. In su.log we find no error message and the log stops after having logged a successful downloadOrCopy of a number of files.
Version: an older version from 2021 is used.
Running ShUp from the command line shows the following error:
Exception in thread "Thread-20" java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException at org.shanoir.uploader.action.DownloadOrCopyRunnable.run(DownloadOrCopyRunnable.java:82) at java.base/java.lang.Thread.run(Thread.java:834) Caused by: java.lang.ClassNotFoundException: javax.xml.bind.JAXBException at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) ... 2 more
Solution:
Verify the Java version with java -version
. If it is Java 11, install Java 8 to make it work.
Java 9 and 10: add the flag "--add-modules java.xml.bind" just behind the java.exe command in
start-shup-windows-java.bat. This error only occurs using an older version of ShUp with a newer
JDK. The latest version on GitHub includes JAXB itself and does therefore not produce the above error.
It might happen with some GE Healthcare PACS, that the DICOM server echo does NOT work, even when all the config values are correct. In that case, please try a query and everything is completely operational, just the echo is causing a problem.
Solution: Edit the file "dicom_server.properties" manually and directly query without using the echo.
Feedback from one installation site: 2 different users on their own sessions in one VM, with their own AET and ports (but same PACS called) except the web port (8080 for both):
- Query/retrieve different exams from different patients
- Send it to the shanoir server at the same time for both steps and it works perfectly.
It might happen, that we double-click on the start-shup-windows.bat and nothing happens really. We only see very shortly the command line window, that closes directly afterwards and nothing can be found in the log files.
Solution: Install Java 11 as now required for ShUp and set the JAVA_HOME to Java 11. An older version of Java installed will lead to the strange behaviour above.
In the su.log the following can be found:
2021-09-08 11:35:37 ERROR [org.shanoir.uploader.action.ImportDialogOpenerNG] [75]
java.lang.NullPointerException
at org.shanoir.uploader.action.ImportDialogOpenerNG.getStudiesWithStudyCards(ImportDialogOpenerNG.java:119)
at org.shanoir.uploader.action.ImportDialogOpenerNG.openImportDialog(ImportDialogOpenerNG.java:59)
at org.shanoir.uploader.nominativeData.CurrentNominativeDataController$1.mouseClicked(CurrentNominativeDataController.java:112)
Solution: Create a study card to make the import work.
In the su.log the following can be found:
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
In some hospital networks, HTTPS streams are redirected to a server for analysis. This means that the certificate verification chain goes through the hospital CA and java needs to be able to go and check the root certificate in the Windows TrustedRoot store.
Solution: Open the startup file of your environment: start-shup-windows-java.bat or start-shup-linux-mac-java.sh and add the following property:
javaw -Djavax.net.ssl.trustStoreType=WINDOWS-ROOT
In start-shup-windows-java.bat or start-shup-linux-mac-java.sh:
@ECHO OFF IF EXIST "%JAVA_HOME%\bin\javaw.exe" ( ECHO Starting ShanoirUploader application "%JAVA_HOME%\bin\javaw.exe" -Djavax.net.ssl.trustStoreType=WINDOWS-ROOT -jar shanoir-uploader-7.0.0-jar-with-dependencies.jar -Xms128m -Xmx512m -Xnoclassgc org.shanoir.uploader.ShanoirUploader ) ELSE ( java.exe -version >nul 2>&1 IF %ERRORLEVEL% NEQ 0 ( echo ERROR : Java is not properly installed or configured on your machine pause ) ELSE ( javaw -Djavax.net.ssl.trustStoreType=WINDOWS-ROOT -jar shanoir-uploader-7.0.0-jar-with-dependencies.jar -Xms128m -Xmx512m -Xnoclassgc org.shanoir.uploader.ShanoirUploader ) )
This tells Java to use the local trust store, where the certificate root of the hospital can be found.
The PACS Telemis does not support, see its DICOM conformance statement the Patient Root Query Level. Therefore PACS queries have to be done on the Study Root Query Level. For ShUp this means, that in the GUI to query Telemis only Study Description and Study Date should be used and both together in the best way. The ShUp user will have to look up the study description and the study date in the PACS and enter it into ShUp, to have the most precise query.
Solution: Use studyDate and studyDescription only to send StudyRoot queries only.
In case that this error happens, ShUp terminates during startup. This error can occur if the IP address of the machine has changed, where ShUp is installed. To solve the problem the following steps have to be done (in that case on a Windows machine):
- Open the command prompt (cmd)
- Type the command ipconfig
- Check Ethernet (normaly) IPv4 address and copy the IP address
- Open {user_home}/.su/dicom_server.properties
- Copy the new IP address as value for local.dicom.server.host and save
- Call the PACS admin to change the IP address for the AET (defined in local.dicom.server.aet.calling)
- Ouvrir invite de commande (cmd)
- Entre la commande ipconfig
- Analyser Ethernet (normalement) IPv4 address et copier l'address IP
- Ouvrir {user_home}/.su/dicom_server.properties
- Copier la nouvelle address IP comme valeur pour local.dicom.server.host et enregistre
- Appeler l'administrateur du PACS pour changer l'address IP pour l'AET (definé dans local.dicom.server.aet.calling)
Therefore the local PACS admin will have to be contacted to do this change. If the IP address is changed only dicom_server.properties, but not in the PACS C-FIND will work, but not C-MOVE: the following error will appear in the logs:
2019-01-16 15:15:22 ERROR [org.dcm4che2.tool.dcmqr.DcmQR] [1249] At least one object couldn't be transfered
java.io.IOException: At least one object couldn't be transfered
at org.dcm4che2.tool.dcmqr.DcmQR.query(DcmQR.java:1228)
at org.shanoir.uploader.dicom.query.DcmQR.query(DcmQR.java:26)
at org.shanoir.uploader.dicom.DicomServerClient.getFilesFromServer(DicomServerClient.java:181)
at org.shanoir.uploader.dicom.DicomServerClient.retrieveDicomFiles(DicomServerClient.java:109)
at org.shanoir.uploader.action.ProcessDicomActionListener$3.run(ProcessDicomActionListener.java:243)
at java.lang.Thread.run(Unknown Source)
2019-01-16 15:15:22 ERROR [org.shanoir.uploader.dicom.DicomServerClient] [184] 2019-01-16 15:15:22 ERROR [org.shanoir.uploader.dicom.DicomServerClient] [135] Download of 0 DICOM files for serie 1.3.12.2.1107.5.2.36.40296.2017111013000447788260208.0.0.0 has failed.
--- Error:
2019-01-18 09:12:04 ERROR [org.shanoir.util.runtime.exec.ShanoirExec] [699] exec : java.io.IOException: Cannot run program "/Users/xxx/.su/pseudonymus/MacOSX/PseudonymusShanoir": error=13, Permission denied Caused by: java.io.IOException: error=13, Permission denied at java.lang.UNIXProcess.forkAndExec(Native Method) at java.lang.UNIXProcess.(UNIXProcess.java:248) at java.lang.ProcessImpl.start(ProcessImpl.java:134) at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029) ... 44 more
Solution: /{user.home}/.su_v6.0.4/pseudonymus/MacOSX/chmod 755 PseudonymusShanoir
I am wondering how this can work in an environment with dynamic IP address, so I think host names should be used. E.g. when the AET in the PACS is configured for wifi-laptop-nantes.chu-xxx.fr and the same host name is in the dicom_server.properties it could work as well. This could be possible depending on each PACS or maybe all of them..
In the su.log the following can be found:
2019-11-06 15:43:11 INFO [org.shanoir.uploader.action.init.InitialStartupState] [88] DicomServer properties successfully initialized. 2019-11-06 15:43:11 INFO [org.shanoir.uploader.action.init.InitialStartupState] [90] ShanoirServer properties successfully initialized. 2019-11-06 15:43:11 INFO [org.shanoir.uploader.action.init.InitialStartupState] [92] Auto Import properties successfully initialized. 2019-11-06 15:43:11 INFO [org.shanoir.uploader.action.init.InitialStartupState] [94] Shanoir Uploader properties successfully initialized. 2019-11-06 15:43:11 INFO [org.shanoir.uploader.action.init.InitialStartupState] [96] Shanoir Uploader proxy properties successfully initialized. 2019-11-06 15:43:11 INFO [org.shanoir.uploader.action.init.InitialStartupState] [103] Language properties successfully initialized.
Solution: ShUp has maybe been started with Webstart, what is not supported anymore.
In the su.log the following can be found:
-- Error: URL ShanoirUploaderService is not correct (exception)
Solution: shanoir.server.upload.service.qname.local.part=UploadFileService (remove "2" at the end)