GithubHelp home page GithubHelp logo

gematik / epa-deployment Goto Github PK

View Code? Open in Web Editor NEW
6.0 18.0 0.0 2.09 MB

Project includes docker-compose file to start all relevant services (including VAU encryption/decryption) for an ePA environment.

License: Apache License 2.0

Shell 100.00%
epa

epa-deployment's Introduction

ePA-deployment

Motivation

The project is intended to provide a simple way to run the ePA backend services in a local docker environment and includes docker-compose and other relevant files. This should help to get a better understanding of the ePA services and should help to develop & test ePA 3.0.x for PS applications.

Important

This project uses mock implementations based on the ePA specification and focuses on some selected backend services. The mock implementations try to realize many aspects of the specification, but are not 1:1 equivalent to a productive environment. The specification is always leading and should be used as a reference.

In particular, the following uses cases are covered:

  • Perform VAU handshake and send and receive encrypted data
  • Create a user session with the ePA authorization service and IDP (RU)
  • Create an entitlement (not included yet)
  • Get the medication list (eML) for a patient as XHTML and PDF/A document

Setup

Prerequisites

You the following tools to run the services:

You need the following system resources to run the services:

  • at least 4 GB of RAM
  • the following ports should be available:
    • for the ePA backend services 443 (https)
    • port range to directly access the mock services via the exposed ports (8081-8090)
    • for the testsuite 8123-8124 (http)

Running the services with docker-compose

Start the mock services with the following command

docker-compose -f dc-mocks.yml up

Stop these services with the following command

docker-compose -f dc-mocks.yml down

Importing default data to the Medication Service

To import medications related data to the medication-service execute the following script from the medication folder:

cd medication
./import.sh

After successful import the data can be accessed via the following curl commands (placeholder have to be replaced with the actual host IP or name):

curl --location http://<docker-host>:8084/fhir/Organization/1
curl --location http://<docker-host>:8084/fhir/Practitioner/2
curl --location http://<docker-host>:8084/fhir/PractitionerRole/3
curl --location http://<docker-host>:8084/fhir/Patient/4
curl --location http://<docker-host>:8084/fhir/Medication/5
curl --location http://<docker-host>:8084/fhir/MedicationRequest/8
curl --location http://<docker-host>:8084/fhir/MedicationDispense/13

Searching by including references in the result:

  • Query PractitionerRole with the related Organization
curl --location http://<docker-host>:8084/fhir/PractitionerRole?_include=PractitionerRole:organization
  • Query MedicationRequest with requester (PractitionerRole) and the Organization related to it
curl --location http://<docker-host>:8084/fhir/MedicationRequest?_include=MedicationRequest:requester&_include:iterate=PractitionerRole:organization

Traffic in Tiger WebUI

The Tiger WebUI is a simple web interface to visualize the traffic between the client and the backend services. The WebUI is accessible via the following URL: http://<docker-host>:8086/webui.

VAU Handshake & user data decrypted traffic

VAU Handshake

The mock application vau-proxy-server sets specific HTTP headers VAU-DEBUG-S_K1_s2c and VAU-DEBUG-S_K1_c2s in the responses (M2 /M4) to indicate the encrypted data. The tiger-proxy decrypts the data and shows the decrypted data in the request & response body.

Important

This not specification compliant and is only supported by this mock implementation (vau-proxy-server in combination with the tiger-proxy).

User data

The ePA client has to set a specific HTTP header VAU-nonPU-Tracing in the request to indicate the encrypted data within nonPU environments (A_24477). Thus, the tiger-proxy decrypts and shows the decrypted data in the request & response body.

Information traffic

Record Status traffic example

The offline page ./doc/html/InformationRecordStatus.mhtml shows an example traffic of retrieving the status of a patient health record with information service (mock).

Consent Decisions traffic example

The offline page ./doc/html/InformationConsentDecisions.mhtml shows an example traffic of retrieving the consent decisions of a patient with information service (mock).

VAU and Authorization traffic example

The offline page ./doc/html/VauHandshakeAndUserSession.mhtml shows a decrypted example traffic of the VAU handshake between the client and the VAU Proxy Server as well as the user session creation with authorization service (mock) & IDP (RU).

Entitlement decrypted traffic

New entitlement traffic example

The offline page ./doc/html/SetEntitlement.mhtml shows a decrypted example traffic of adding a new entitlement with entitlement service (mock).

Medication decrypted traffic

Electronic Medication List (eML) as PDF/A traffic example

The offline page ./doc/html/MedicationPDF.mhtml shows a decrypted example traffic of retrieving the entire medication list as PDF/A document with medication render service (mock).

Electronic Medication List (eML) as XHTML traffic example

The offline page ./doc/html/MedicationXHTML.mhtml shows a decrypted example traffic of retrieving the entire medication list as XHTML document with medication render service (mock).

Electronic Medication List (eML) as FHIR Resource traffic example

The offline page ./doc/html/MedicationFHIR.mhtml shows a decrypted example traffic of retrieving the entire medication list as FHIR resource with medication service (mock).

PS-Testsuite

The PS-Testsuite is a test suite to verify specific functionality of a PS application.

Proxy configuration for PS-Testsuite

As the testsuite container obtains Maven artefacts during execution, the internet must be accessible for the container. If the internet is only accessible via a proxy server, the settings in the ./ps-testsuite/settins.xml must be adjusted for the execution of the PS-Testsuite container. Please note that the parameter <active>true</active> must be set to activate the settings and the docker volume ps-testsuite-maven must be deleted to apply the changes.

To do this, the following entries must be adjusted:

  <proxy>
    <id>optional</id>
    <active>true</active>
    <protocol>https</protocol>
    <host>proxy.example.com</host>
    <port>8080</port>
    <username>user</username>
    <password>password</password>
    <nonProxyHosts>localhost|127.0.0.1</nonProxyHosts>
  </proxy>

Running the PS-Testsuite Container in Docker

Start the testsuite container with the following command

docker-compose -f dc-testsuite.yml up

When the container log shows the following message, the testsuite is ready to be used and a webbrowser should call the URL http://<docker-host>:8123 to go on. Otherwise, the timeout will stop the testsuite and the container stops automatically. In this case you have to rerun the testsuite with the command above.

========================================================================================================================
  ____ _____  _    ____ _____ ___ _   _  ____  __        _____  ____  _  _______ _     _____        __  _   _ ___         
 / ___|_   _|/ \  |  _ \_   _|_ _| \ | |/ ___| \ \      / / _ \|  _ \| |/ /  ___| |   / _ \ \      / / | | | |_ _|        
 \___ \ | | / _ \ | |_) || |  | ||  \| | |  _   \ \ /\ / / | | | |_) | ' /| |_  | |  | | | \ \ /\ / /  | | | || |         
  ___) || |/ ___ \|  _ < | |  | || |\  | |_| |   \ V  V /| |_| |  _ <| . \|  _| | |__| |_| |\ V  V /   | |_| || |   _ _ _ 
 |____/ |_/_/   \_\_| \_\|_| |___|_| \_|\____|    \_/\_/  \___/|_| \_\_|\_\_|   |_____\___/  \_/\_/     \___/|___| (_|_|_)
                                                                                                                          
========================================================================================================================
09:21:12.065 [main ] INFO  d.g.t.t.l.TigerDirector - Waiting for workflow Ui to fetch status...
09:21:12.065 [main ] INFO  d.g.t.t.l.TigerDirector - Workflow UI http://localhost:8123

Stop the testsuite container with the following command

docker-compose -f dc-testsuite.yml down

Execute the testcases

After calling the URL http://<docker-host>:8123 in a webbrowser, the workflowUI will be shown. As depicted in Waiting WorkflowUI the testcase for VAU handshake is automatically selected. Now, the testsuite will trace any traffic flow between the client and the mock services on https://<docker-host>:443. On the bottom of the page you can see the request to trigger a specific functionality within your PS application. Do so and after the finished execution click on the "Continue" button on the bottom of the page.

Now, the traffic will be analyzed and the results will be shown in the workflowUI. If everything is fine, the testcase will be marked as successful as depicted in Successful WorkflowUI.

If the testcase failed, the testcase will be marked as failed as depicted in Failed WorkflowUI and you can analyze the reason for the failure e.g. within message flow traced during the execution. Click in the upper right corner button to open the "Rbel Log Details" to have a closer look on the messages itself.

Choose a testcase

By default, the execution of the VAU handshake test case is selected. To select a different test case, you must configure it via the .env file, in which you must adjust the value for ‘PS_TESTSUITE_TESTS’ accordingly.

Testcases

Record Status

The testcase verifies the message with the information service (mock) necessary to retrieve the status of a patient health record. The testcase will be successful if the record status is successfully retrieved with the GET message.

Consent Decisions

The testcase verifies the message with the information service (mock) necessary to retrieve the consent decisions of a patient. The testcase will be successful if the consent decisions are successfully retrieved with the GET message.

VAU Handshake

The testcase verifies the VAU handshake between the client and the VAU Proxy Server (mock). The testcase will be successful if the VAU handshake is successfully completed with messages M1 to M4.

User Session (login)

The testcase verifies the message with the authorization service (mock) necessary to create a user session, but NOT the messages with the IDP (RU). The testcase will be successful if the user session is successfully created with messages getNonce, send_authorization_request_sc and send_authcode_sc.

Entitlement

The testcase verifies the message with the entitlement service (mock) necessary to create an entitlement. The testcase will be successful if the entitlement is successfully created with the POST message.

Medication List (eML) as PDF/A

The testcase verifies the message with the medication render service (mock) necessary to retrieve the entire medication list as PDF/A document. The testcase will be successful if the medication list is successfully retrieved with the GET message.

Medication List (eML) as XHTML

The testcase verifies the message with the medication render service (mock) necessary to retrieve the entire medication list as XHTML document. The testcase will be successful if the medication list is successfully retrieved with the GET message.

Medication List (eML) as FHIR Resource

The testcase verifies the message with the medication service (mock) necessary to retrieve the entire medication list as FHIR resource. The testcase will be successful if the medication list is successfully retrieved with the GET message.

Overview of the backend mock services

Using the services

The services can be accessed directly by using the exposed ports. The following table shows the services and the related ports and protocols. This should also give an overview of the ports to be opened in your setup.

Service Port Protocol
ePA health record system (tiger-proxy) 443 https
vau-proxy-server 8081 http
information-service 8082 http
authorization-service 8083 http
medication-service 8084 http
medication-render-service 8085 http
tiger-proxy (admin) 8086 http
entitlement-service 8087 http

Note

Please feel free to modify the exposed ports in the '.env' file in order to meet your own requirements. The docker container internal ports are not affected by this change as well as the docker network communication.

epa-deployment.png

Important

Please use the already existing TI services through the connector e.g. to access the IDP (RU) using the following URL: https://idp-ref.zentral.idp.splitdns.ti-dienste.de

Tiger Proxy (tiger-proxy)

The tiger proxy is a reverse proxy which is used to route the incoming requests to the correct service. It is accessible via port 443 as it is using TLS/SSL. The proxy is also doing the SSL termination for the services. The configuration of the proxy is done in the /tiger-proxy/application.yaml file.

Limitations:

  • server certificate is generated on-the-fly using the /tiger-proxy/ca.p12 as authority chain
  • OCSP stabling is currently not supported

VAU Proxy Server (vau-proxy-server)

By specification some services inside the ePA has to be encrypted/decrypted by the VAU. The VAU Proxy Client handles the VAU handshake for a given PS instance. This handshake enables the VAU Proxy Client to encrypt messages which can be decrypted by the VAU Proxy Server before the messages are passed onto ePA services.

Limitations:

  • interface operation/path to request the status of user authentication is not fully supported (A_25143) > /VAU-Status as HTTP-GET
    • "User-Authentication" is always "None"
    • "Connnection-Start" is the timestamp when M3 message of VAU handshake was successfully validated & completed on backend side (typo in gemSpec_Krypt <= 2.32.0)
  • interface operation/path to request AUT-VAU certificate + certificate chain via /CertData as HTTP-GET is not fully supported (A_24957) *

Information Service (information-service)

This service provides information about the health record of a patient. The capabilities of the service are described detailed in following openAPI specification: InformationService.

Limitations:

  • for consent decisions it will always send "permit" for "medication" as well as "erp-submission"
  • for record status it will always send HTTP code 200 (OK)
  • false case for both operations:
    • to get HTTP code 404 use "X000000404" as header parameter 'x-insurantid'
    • to get HTTP code 409 use "X000000409" as header parameter 'x-insurantid'
  • for user experience it is checked that the header x-useragent is set, otherwise HTTP code 409 is given

Direct example request:

To retrieve the consent decisions of a patient execute the following curl command:

curl -H "x-insurantid: Z1234567890" --location --request GET http://<docker-host>:8082/information/api/v1/ehr/consentdecisions

To retrieve the health record status of a patient execute the following curl command:

curl -H "x-insurantid: Z1234567890"  --location --request GET http://<docker-host>:8082/information/api/v1/ehr

Authorization Service (authorization-service)

The authorization service is a component which is known from OAuth2. Together with the IDP server it is responsible for the authentication and authorization of the user (User of a PS). The authentication flow is described here: Authentication Flow. As IDP the reference IDP is used which is addressed by the following URL: https://idp-ref.app.ti-dienste.de. All necessary configurations like clientID are already set in the IDP.

Limitations:

  • It will not end user session after 20 Min. (A_25006)

Medication Service (medication-service)

The medication service is a HAPI FHIR server which provides the medication relevant data. The details about ePA Medication can be found in the related repository: ePA-Medication.

Limitations:

  • Currently, the HAPI FHIR does not support searching resources by logical references. Therefore, the medication service does not support searching for medication requests by the patient reference. A request like GET /MedicationRequest?subject:identifier=.... will return an error message, that it is not supported. There is already an open issue in the HAPI FHIR repository: Issue 4723.

Medication Render Service (medication-render-service)

The medication render service is responsible for rendering the medication list (eML) data in a human-readable form. The service is described in the following openAPI specification: MedicationRenderService.

Direct example request:

To retrieve the eML as XHTML execute the following curl command:

curl --location --request GET http://<docker-host>:8085/epa/medication/render/v1/eml/xhtml --header 'Accept: text/html' --header 'x-insurantid: Z1234567891'

To retrieve the same eML as PDF/A document execute the following curl command:

curl --location --request GET http://<docker-host>:8085/epa/medication/render/v1/eml/pdf --header 'Accept: application/pdf' --header 'x-insurantid: Z1234567891' --output eml.pdf

To retrieve the eML as FHIR Resource execute the following curl command:

curl --location http://localhost:8084/fhir/Medication?status=active

Entitlement Service (entitlement-service)

The entitlement Service is responsible for managing entitlements. The service is described in the following openAPI specification: EntitlementService.

The entitlement service is NOT linked with the other services, and therefore, if an entitlement is missing, no error message is returned by the other services.

Direct example request:

Adding a new entitlement:

curl --location --request POST \
  'http://<docker-host>:8087/epa/basic/api/v1/ps/entitlements' \
  -H 'accept: application/json' \
  -H 'x-insurantid: Z123456789' \
  -H 'x-useragent: CLIENTID1234567890AB/2.1.12-45' \
  -H 'Content-Type: application/json' \
  -d '{"jwt": "<your valid jwt>"}'

List all existing entitlements stored within the service (only available with the mock service)

Important

This is only available with the mock services. In production only the patient and its representative has access to this interface method.

curl --location 'http://localhost:8087/epa/basic/api/v1/entitlements' \
  -H 'x-insurantid: X110435031' \
  -H 'x-useragent: CLIENTID1234567890AB/2.1.12-45'

Limitations

  • No JWT signature verification
  • No OCSP check during the validation of the client certificate
  • HMAC validation work only with gematik test cards

Troubleshooting / FAQs

VAU-Proxy-Server

Response with Transcript Error (5)

The decryption of the incoming message was faulty. In this case, a look at the logs from the VAU proxy server can help. Additional information about the exact cause of the error should be written in the log.

If this does not help, please send us the log file in a service ticket.

docker logs vau-proxy-server > vau-proxy-server.log

IDP

IDP sends HTTP Response Code 403

Please make sure that you use HTTP/1.1 when communicating with the IDP.

Resources

epa-deployment's People

Contributors

gematik-entwicklung avatar gematik1 avatar irynakamenska avatar

Stargazers

 avatar Soner Dastan avatar  avatar  avatar Christian Geesink avatar  avatar

Watchers

Sergej Suskov avatar  avatar Stephan Pietsch avatar Soner Dastan avatar Ron avatar Michael Onken avatar Christian Lange avatar Patrick Werner avatar Andrea Essenwanger avatar Robert Hoffmann avatar Mirza Suljić avatar  avatar Christian Geesink avatar  avatar  avatar  avatar  avatar Jürgen avatar

epa-deployment's Issues

How to incorporate use of proxy server in ps-testsuite.yml

When I deploy the container for ps-testsuite I am not able to download plugin for Maven. I tried to incorporate our proxy as -MAV-OPTS as well under environment. Nothing was working. Due to that the container excited immediately.

I don't have that much experience in docker and reading documentation and searching gave me some ideas. But now I am not sure, what is the correct way. Maybe someone can help me?

---Snip
name: dc-testsuite
services:
ps-testsuite:
image: gematik1/ps-testsuite:1.0.7
container_name: ps-testsuite
restart: 'no'
environment:
- MAVEN_OPTS=-Dcucumber.filter.tags=${PS_TESTSUITE_TESTS} -Dhttp.proxyHost=192.168.106.1 -Dhttp.proxyPort=8080 -Dhttps.proxyHost=192.168.106.1 -Dhttps.proxyPort=8080
- HTTP_PROXY=192.168.106.1:8080
- HTTPS_PROXY=192.168.106.1:8080
- NO_PROXY=localhost, 127.0.0.1
---Snap

[INFO] Scanning for projects...
[INFO]
[INFO] ----------------------< de.gematik:ps-testsuite >-----------------------
[INFO] Building ps-testsuite 1.0.7-SNAPSHOT
[INFO] from pom.xml
[INFO] --------------------------------[ jar ]---------------------------------
Downloading from central: https://repo.maven.apache.org/maven2/org/jacoco/jacoco-maven-plugin/0.8.12/jacoco-maven-plugin-0.8.12.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 40.334 s
[INFO] Finished at: 2024-07-19T14:11:48Z
[INFO] ------------------------------------------------------------------------
[ERROR] Plugin org.jacoco:jacoco-maven-plugin:0.8.12 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.jacoco:jacoco-maven-plugin:jar:0.8.12: The following artifacts could not be resolved: org.jacoco:jacoco-maven-plugin:pom:0.8.12 (absent): Could not transfer artifact org.jacoco:jacoco-maven-plugin:pom:0.8.12 from/to central (https://repo.maven.apache.org/maven2): Network unreachable -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginResolutionException

Thx a ton and best regards,
Thomas

Starting "dc-testsuite" in Docker fails

``Hi,

"dc-mocks" starts fine on my W11 environment.
I tried to start "dc-testsuite" (newest files from github) but it won't start:

2024-06-11 14:41:43 ps-testsuite  | [INFO] Scanning for projects...
2024-06-11 14:41:43 ps-testsuite  | [INFO] 
2024-06-11 14:41:43 ps-testsuite  | [INFO] ----------------------< de.gematik:ps-testsuite >-----------------------
2024-06-11 14:41:43 ps-testsuite  | [INFO] Building ps-testsuite 1.0.1-SNAPSHOT
2024-06-11 14:41:43 ps-testsuite  | [INFO]   from pom.xml
2024-06-11 14:41:43 ps-testsuite  | [INFO] --------------------------------[ jar ]---------------------------------
2024-06-11 14:41:43 ps-testsuite  | Downloading from central: https://repo.maven.apache.org/maven2/org/jacoco/jacoco-maven-plugin/0.8.12/jacoco-maven-plugin-0.8.12.pom
2024-06-11 14:41:48 ps-testsuite  | [INFO] ------------------------------------------------------------------------
2024-06-11 14:41:48 ps-testsuite  | [INFO] BUILD FAILURE
2024-06-11 14:41:48 ps-testsuite  | [INFO] ------------------------------------------------------------------------
2024-06-11 14:41:48 ps-testsuite  | [INFO] Total time:  5.827 s
2024-06-11 14:41:48 ps-testsuite  | [INFO] Finished at: 2024-06-11T12:41:48Z
2024-06-11 14:41:48 ps-testsuite  | [INFO] ------------------------------------------------------------------------
2024-06-11 14:41:48 ps-testsuite  | [ERROR] Plugin org.jacoco:jacoco-maven-plugin:0.8.12 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.jacoco:jacoco-maven-plugin:jar:0.8.12: The following artifacts could not be resolved: org.jacoco:jacoco-maven-plugin:pom:0.8.12 (absent): Could not transfer artifact org.jacoco:jacoco-maven-plugin:pom:0.8.12 from/to central (https://repo.maven.apache.org/maven2): repo.maven.apache.org: Try again: Unknown host repo.maven.apache.org: Try again -> [Help 1]
2024-06-11 14:41:48 ps-testsuite  | [ERROR] 
2024-06-11 14:41:48 ps-testsuite  | [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
2024-06-11 14:41:48 ps-testsuite  | [ERROR] Re-run Maven using the -X switch to enable full debug logging.
2024-06-11 14:41:48 ps-testsuite  | [ERROR] 
2024-06-11 14:41:48 ps-testsuite  | [ERROR] For more information about the errors and possible solutions, please read the following articles:
2024-06-11 14:41:48 ps-testsuite  | [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginResolutionException
2036-01-01 00:00:00 
ps-testsuite exited with code 1

Do you have any Ideas?

Kind regards,
Jürgen

VAU: "Required request body is missing" (send_authcode_sc)

Hello

We are currently trying to establish an authenticated connection through the VAU as described here

{
  "authorizationCode" : "eyJlbmMiOiJBMjU2R0NNIiwiY3R5IjoiTkpXVCIsImV4cCI6MTcyMTIxMTUwNSwiYWxnIjoiZGlyIiwia2lkIjoiMDAwMSJ9..ytZfkuqqvywDIQw9.UuoYT40u_FxuholMPYZTvEFOj9uNr4NbS7Wq2IphE3FVaWZcUqpwxh_Sty4D-KO0ZRmB0CuncdWb7NjillX0MDxUyBLWfWdUQXRvaQQ5QZ8MbsmywcjFBd4uJpnMbz-Ef-FuY_cW3ujdDu1RUcehnPti-s-Vqz8i6WslqQ3MWFtWFjzaylaCtLnfN37fE6PmgjmNIHqDBjgrDHc08Uod_ixgVX8EXR25FETcHZyW8jfUY4Uha-Zk-Fl7--SPT3AW0s3X3fFGS_B3uw60_mFzS8eZZwjs6JOfdAXB-BlqG2wXWniRMk0oqYxROdEiNWewME4qThjsHDkQ1sfb9FSsdZMe3XIdE8kE8jmpBeZ9y2vkMpXD63dJVY_TU3xd95mZKYhoC-bHAiFEZlWnP02o6oM3K6XTFCLKs8nAEqxcxA0xG8Tx3MkXjmLOU1ske_EkTDcWeZmfEcYMMTDoAy3Hke8QetyzWiJLdOAkf2vCiQEP-yxNZ5pTjdm0rOwmq8E2moRhwmpHz3bWnyHvVAF0Sa_s1c8S7NcjTwqHBDnjcNvf1Fp37K6VEjNOjkXag9Tz0qScdoWWx-quENs4U56NXclmOtLU2T039xMeqe4CttjcUi1pX3N2ulPWtshYEt6ZUrMvllnb-S55tab38MK4JalW6PIXXNCABqJCdVzwgja5HtsGySUri5NmK5vss4AjF1ZTgQQLjwYOoh8RzqtXOHQbDowoLVvCs5Z67pvsbP6J2GGJYzhVT8_3UuAzt6HwZPaSYOx5rRE_JPRhsru3_aSTjkTNeeItVtcTeM3M7fHAOpmhFpAFjRJ9hbg2w74K5bNsfQjHUaholN5CE8JGbsT4Xc769jdUoRyR43kxp-8sCsvFsQsm2H8niwvaLi_olupKKhnzXtvtYqV_XQf7YGFe32-28OSdcwYTdqz8Zboh36aDpx9iTw4jHkjEGsRW66VRYt6-53GVNT5Z7pvAoaKzcju646_FUxeYscqS7jGddXTlxcXI01X6kyjCLD253dS59Xnx53aLNRIyB4f2ihJboGvTSJTl4cbN2JWX9TpyZjD5JxHIQeG78FQY07RwK4zasddvJ1_K7fCSK7DQXqpjVA0KL9vLWolmub_FLS9L4jCg3UuZegVVdbuw8Yf-dHyryLL1tHiBEuO1d3QqNu2eZ0iMJN77c3PdaNbTQXD4LIbNNDjuqeNW_lkJsxUeW22LFbvbzEdxud_uhUsOKo757OE-vfZJLi4VIjSazkX7ureFoSf4Km2-r3LC1rzH_Krh7RZAqOIqEG1cUf2aZnF_VF3OKvYdWnx0Uwo7ba90p5KylLt2ZCyGCD-oO60x7aGxWN6mhjrZbc6HlvJyRIq_tH2LzgA3fTGXzjGD7btLEeH5RX6V4ZIPMTo0tplIq0RgaOuLAxQrumdhEL0nfd5cVIjfiJpMvNork6exhqDDlnj4nFK59p0sDC4cvcWtNEGuP-R8peLWJpZb.v-lXeIZ-cOKCoa1-T1yxLw",
  "clientAttest" : "eyJ4NWMiOlsiTUlJRHJqQ0NBMVdnQXdJQkFnSUhBVkhtODNNQ05UQUtCZ2dxaGtqT1BRUURBakNCbWpFTE1Ba0dBMVVFQmhNQ1JFVXhIekFkQmdOVkJBb01GbWRsYldGMGFXc2dSMjFpU0NCT1QxUXRWa0ZNU1VReFNEQkdCZ05WQkFzTVAwbHVjM1JwZEhWMGFXOXVJR1JsY3lCSFpYTjFibVJvWldsMGMzZGxjMlZ1Y3kxRFFTQmtaWElnVkdWc1pXMWhkR2xyYVc1bWNtRnpkSEoxYTNSMWNqRWdNQjRHQTFVRUF3d1hSMFZOTGxOTlEwSXRRMEUxTVNCVVJWTlVMVTlPVEZrd0hoY05Nakl3T1RFeU1EQXdNREF3V2hjTk1qY3dPVEV4TWpNMU9UVTVXakNCN1RFTE1Ba0dBMVVFQmhNQ1JFVXhFVEFQQmdOVkJBY01DRVp5WldsaWRYSm5NUTR3REFZRFZRUVJEQVUzT1RFeE5ERVlNQllHQTFVRUNRd1BVM1Z1WkdkaGRXRnNiR1ZsSURVNU1UTXdNUVlEVlFRS0RDcFFjbUY0YVhNZ1VISnZaaTRnUkhJdUlFMXZjbWwwZWlCSXc3eHNiRzFoYm01T1QxUXRWa0ZNU1VReEVqQVFCZ05WQkFRTUNVakR2R3hzYldGdWJqRVBNQTBHQTFVRUtnd0dUVzl5YVhSNk1SSXdFQVlEVlFRTURBbFFjbTltTGlCRWNpNHhNekF4QmdOVkJBTU1LbEJ5WVhocGN5QlFjbTltTGlCRWNpNGdUVzl5YVhSNklFakR2R3hzYldGdWJsUkZVMVF0VDA1TVdUQmFNQlFHQnlxR1NNNDlBZ0VHQ1Nza0F3TUNDQUVCQndOQ0FBUldOMUwrRGNhVldxdnV5UDhzUHJQNzhaQ0dTekVkU1RXMXkvVVJLWktmaW90TVQzQjkwYnFXN0NFc1pUVWM0MUFDVXJSbllXcHZjekw3SVBrblgrMTNvNElCTGpDQ0FTb3dIUVlEVlIwT0JCWUVGTFdCa3FHa2JodWVpTFdmdThFcFNycTZZd1BuTURnR0NDc0dBUVVGQndFQkJDd3dLakFvQmdnckJnRUZCUWN3QVlZY2FIUjBjRG92TDJWb1kyRXVaMlZ0WVhScGF5NWtaUzl2WTNOd0x6QVRCZ05WSFNVRUREQUtCZ2dyQmdFRkJRY0RBakFmQmdOVkhTTUVHREFXZ0JRR21Pa0NWZi9KbjF5alpRN3hYZUlnOVlUN2t6QWdCZ05WSFNBRUdUQVhNQW9HQ0NxQ0ZBQk1CSUVqTUFrR0J5cUNGQUJNQkUwd0RnWURWUjBQQVFIL0JBUURBZ2VBTUF3R0ExVWRFd0VCL3dRQ01BQXdXUVlGS3lRSUF3TUVVREJPTUV3d1NqQklNRVl3Rmd3VVFtVjBjbWxsWW5OemRNT2tkSFJsSUVGeWVuUXdDUVlIS29JVUFFd0VNaE1oTVMxVFRVTXRRaTFVWlhOMGEyRnlkR1V0T0Rnek1URXdNREF3TVRReE5qZzVNQW9HQ0NxR1NNNDlCQU1DQTBjQU1FUUNJQ1Q0ZE5scWFRcDhWNWFFMDExNGx1a3ZicGxjZU83NSsxTFhEUERaa0hzUEFpQXVRMnpiaE9yeFRwcEZ0MGt4YTR2YitPQUtuOWRGcm1lMWloYm1LMTFlQWc9PSJdLCJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NiJ9.eyJub25jZSI6ImNlNTExYTRlMjFjYTk3YjQ2YTUyNWEwZDI5OWFmNmNmMzM2ZDBiYTcxMGE0YjRkZjFmOTRkMWNjNTc5Y2RmN2IiLCJpYXQiOjE3MjEyMTE0NDJ9.MEUCIA8fcM7P26fOWrsofOlJtsHtmxlAECo3RqqXjtGkyq5BAiEAjwRMJKn4iqoOzJwF_EOgpeUWFlmjYxg2bOICBjM9R54"
}

The Problem we are running into is that when the clientAttest and authorizationCode are sent to the send_authcode_sc-endpoint, the following error message is returned:

{
  "MessageType" : "Error",
  "Message" : "Transcript Error: 500 : \"{\"error\":\"invalid_request\",\"error_description\":\"AsEpa Runtime Exception: Required request body is missing: public de.gematik.idp.asforepa.data.AuthorizationResponse de.gematik.idp.asforepa.controller.AuthorizationController.sendAuthCodeSc(de.gematik.idp.asforepa.data.UserAgentHeader,de.gematik.idp.asforepa.data.AuthCodeRequest)\"}\"",
  "ErrorCode" : 5
}

It is unclear to me whether this indicates a structural issue with the request or whether the content of the two tokens is invalid.

I have attached the traffic log here:
trafficLog-240717.tgr.txt

VAU Response from medication-render-service

Hi,

I can retrieve the PDF from the medication-render-service using the curl command without any issues.

However, When I send the request via VAU, I receive a response which can be decrypted (HTTP 200 inner), but the content-length does not match the actual payload size. The payload is larger. As a result, the PDF is corrupted and cannot be opened because it's incomplete. Even after manually extracting the bytes with the actual length and writing them to a file, the PDF still can't be opened.

It seems to be an encoding problem. Is anyone else experiencing this issue?

diff_hex_header.zip
pdfs.zip

Unauthenticated request

Hi,

Müssen wir uns zusätzlich bei der Gematik registrieren?

Error response from daemon: Head "https://eu.gcr.io/v2/gematik-all-infra-prod/epa/vau-proxy-server/manifests/latest": denied: Unauthenticated request. Unauthenticated requests do not have permission "artifactregistry.repositories.downloadArtifacts" on resource "projects/gematik-all-infra-prod/locations/europe/repositories/eu.gcr.io" (or it may not exist)

x-useragent validation

Hi,

It seems there is a difference in RegExp-Validation between the sample Implementation of authorization-service and the OpenAPI

Setting User-Agent like this:
x-useragent: Zero-Go/0.0.1

Gives error:
vau-proxy-server | 13:06:07.585 VPS ERROR ServerExceptionHandler: {MessageType=Error, Message=Transcript Error: 400 : "{"error":"invalid_request","error_description":"getNonce.userAgent.userAgent: invalid user agent: doesn't match pattern \"^[a-zA-Z0-9]{20}\\/[a-zA-Z0-9\\-\\.]{1,15}$\""}", ErrorCode=5}

Although RegExp in OpenAPI says:

https://github.com/gematik/ePA-Basic/blob/cc2ae0e7e9a8855ac531aa601bd2919e5afed798/src/openapi/I_Authorization_Service.yaml#L884-L888

The symbol - seems to be allowed in first part of user agent string (before the slash). Length is between 1 and 20.

ps-testsuite 1.0.7-Snapshot fails to start: PKIX path building failed

Starting ps-testsuite 1.0.7-Snapshot fails: PKIX path building failed.
From my point of view this is different to #13
There is not VPN enabled

time="2024-07-02T08:01:08+02:00" level=warning msg="D:\\GIT\\epa-deployment\\dc-testsuite.yml: `version` is obsolete"
[+] Running 1/0
 ✔ Container ps-testsuite  Created                                                                                                         0.0s
Attaching to ps-testsuite
ps-testsuite  | [INFO] Scanning for projects...
ps-testsuite  | [INFO]
ps-testsuite  | [INFO] ----------------------< de.gematik:ps-testsuite >-----------------------
ps-testsuite  | [INFO] Building ps-testsuite 1.0.7-SNAPSHOT
ps-testsuite  | [INFO]   from pom.xml
ps-testsuite  | [INFO] --------------------------------[ jar ]---------------------------------
ps-testsuite  | Downloading from central: https://repo.maven.apache.org/maven2/org/jacoco/jacoco-maven-plugin/0.8.12/jacoco-maven-plugin-0.8.12.pom
ps-testsuite  | [INFO] ------------------------------------------------------------------------
ps-testsuite  | [INFO] BUILD FAILURE
ps-testsuite  | [INFO] ------------------------------------------------------------------------
ps-testsuite  | [INFO] Total time:  0.452 s
ps-testsuite  | [INFO] Finished at: 2024-07-02T06:01:10Z
ps-testsuite  | [INFO] ------------------------------------------------------------------------
ps-testsuite  | [ERROR] Plugin org.jacoco:jacoco-maven-plugin:0.8.12 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.jacoco:jacoco-maven-plugin:jar:0.8.12: The following artifacts could not be resolved: org.jacoco:jacoco-maven-plugin:pom:0.8.12 (absent): Could not transfer artifact org.jacoco:jacoco-maven-plugin:pom:0.8.12 from/to central (https://repo.maven.apache.org/maven2): PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target -> [Help 1]
ps-testsuite  | [ERROR]
ps-testsuite  | [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
ps-testsuite  | [ERROR] Re-run Maven using the -X switch to enable full debug logging.
ps-testsuite  | [ERROR]
ps-testsuite  | [ERROR] For more information about the errors and possible solutions, please read the following articles:
ps-testsuite  | [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginResolutionException
ps-testsuite exited with code 1

FHIR-requests: missing medicationReference in resource MedicationDispense in response in xml-representation

Hallo,

i am missing medicationReference in resource MedicationDispense (cardinality 1..1) in response in xml-representation, not mapped form json to xml?
Also missing elements meta/profile.
And is versioning planned? (Something like <profile value="https://gematik.de/fhir/epa-medication/StructureDefinition/epa-medication-dispense|1.0.2" /> analog to KBV-profiles)
And can you add an examle with substitution=yes?

Thank you!

xml should look like this:

<MedicationDispense xmlns="http://hl7.org/fhir">
  <id value="4e6e1623-778e-44a3-b208-8479f5339e43" />
  <meta>
    <versionId value="1" />
    <lastUpdated value="2025-01-22T14:43:33.244+00:00" />
    <profile value="https://gematik.de/fhir/epa-medication/StructureDefinition/epa-medication-dispense" />
  </meta>
  <extension url="https://gematik.de/fhir/epa-medication/StructureDefinition/rx-prescription-process-identifier-extension">
    <valueIdentifier>
      <system value="https://gematik.de/fhir/epa-medication/sid/rx-prescription-process-identifier" />
      <value value="160.153.303.257.459_20250122" />
    </valueIdentifier>
  </extension>
  <identifier>
    <system value="https://gematik.de/fhir/epa-medication/sid/rx-originator-process-identifier" />
    <value value="5d8fbf7c-bdb0-44c2-95fe-423ae0404ccd_160.153.303.257.459" />
  </identifier>
  <status value="completed" />
  <medicationReference>
    <reference value="Medication/2571d29b-e213-40ec-b817-a1490718a490" />
  </medicationReference>
  <subject>
    <identifier>
      <system value="http://fhir.de/sid/gkv/kvid-10" />
      <value value="X110411319" />
    </identifier>
  </subject>
  <performer>
    <actor>
      <reference value="Organization/3856402c-7636-4fbd-98bd-d278852b8e88" />
    </actor>
  </performer>
  <authorizingPrescription>
    <reference value="MedicationRequest/bb91cde8-0426-4f4b-a766-5d818d0605bd" />
  </authorizingPrescription>
  <whenHandedOver value="2025-01-22" />
  <dosageInstruction>
    <text value="1-0-0-0" />
  </dosageInstruction>
  <substitution>
    <wasSubstituted value="false" />
  </substitution>
</MedicationDispense>

source file in repo: medication-dispense-example-id-11.json

{
  "resourceType": "MedicationDispense",
  "status": "completed",
  "performer": [
    {
      "actor": {
        "reference": "Practitioner/3"
      }
    }
  ],
  "authorizingPrescription": [
    {
      "reference": "MedicationRequest/8"
    }
  ],
  "medication": {
    "reference": {
      "reference": "Medication/5"
    }
  },
...

curl -H "Accept: application/xml" --location "http://localhost:8084/fhir/MedicationDispense"

<Bundle xmlns="http://hl7.org/fhir">
   <id value="798d3fd9-af3b-401a-814e-76f9f487c160"/>
   <meta>
      <lastUpdated value="2024-06-13T14:09:50.652+00:00"/>
   </meta>
   <type value="searchset"/>
   <total value="3"/>
   <link>
      <relation value="self"/>
      <url value="http://localhost:8084/fhir/MedicationDispense"/>
   </link>
   <entry>
      <fullUrl value="http://localhost:8084/fhir/MedicationDispense/11"/>
      <resource>
         <MedicationDispense xmlns="http://hl7.org/fhir">
            <id value="11"/>
            <meta>
               <versionId value="1"/>
               <lastUpdated value="2024-06-13T13:58:30.621+00:00"/>
               <source value="#rjyslpX0PPkJgazq"/>
            </meta>
            <status value="completed"/>
            <performer>
               <actor>
                  <reference value="Practitioner/3"/>
               </actor>
            </performer>
            <authorizingPrescription>
               <reference value="MedicationRequest/8"/>
            </authorizingPrescription>
            <quantity>
               <value value="6"/>
               <system value="http://terminology.hl7.org/CodeSystem/v3-orderableDrugForm"/>
               <code value="TAB"/>
            </quantity>
            <daysSupply>
               <value value="5"/>
               <unit value="Day"/>
               <system value="http://unitsofmeasure.org"/>
               <code value="d"/>
            </daysSupply>
            <note>
               <text value="Patient soll es zum Essen einnehmen"/>
            </note>
            <dosageInstruction>
               <sequence value="1"/>
               <text value="Zwei Tabletten auf einmal"/>
               <additionalInstruction>
                  <coding>
                     <system value="http://snomed.info/sct"/>
                     <code value="311504000"/>
                     <display value="Zum Essen"/>
                  </coding>
               </additionalInstruction>
               <timing>
                  <repeat>
                     <frequency value="1"/>
                     <period value="1"/>
                     <periodUnit value="d"/>
                  </repeat>
               </timing>
               <route>
                  <coding>
                     <system value="http://snomed.info/sct"/>
                     <code value="26643006"/>
                     <display value="Oral Route"/>
                  </coding>
               </route>
               <method>
                  <coding>
                     <system value="http://snomed.info/sct"/>
                     <code value="421521009"/>
                     <display value="Swallow - dosing instruction imperative (qualifier value)"/>
                  </coding>
               </method>
               <doseAndRate>
                  <type>
                     <coding>
                        <system value="http://terminology.hl7.org/CodeSystem/dose-rate-type"/>
                        <code value="ordered"/>
                        <display value="Ordered"/>
                     </coding>
                  </type>
                  <doseQuantity>
                     <value value="2"/>
                     <unit value="TAB"/>
                     <system value="http://terminology.hl7.org/CodeSystem/v3-orderableDrugForm"/>
                     <code value="TAB"/>
                  </doseQuantity>
               </doseAndRate>
            </dosageInstruction>
            <dosageInstruction>
               <sequence value="2"/>
               <text value="Zwei Tabletten täglich für  4 Tage"/>
               <additionalInstruction>
                  <coding>
                     <system value="http://snomed.info/sct"/>
                     <code value="311504000"/>
                     <display value="Zum Essen"/>
                  </coding>
               </additionalInstruction>
               <timing>
                  <repeat>
                     <boundsDuration>
                        <value value="4"/>
                        <unit value="days"/>
                        <system value="http://unitsofmeasure.org"/>
                        <code value="d"/>
                     </boundsDuration>
                     <frequency value="1"/>
                     <period value="1"/>
                     <periodUnit value="d"/>
                  </repeat>
               </timing>
               <route>
                  <coding>
                     <system value="http://snomed.info/sct"/>
                     <code value="26643006"/>
                     <display value="Oral Route"/>
                  </coding>
               </route>
               <doseAndRate>
                  <type>
                     <coding>
                        <system value="http://terminology.hl7.org/CodeSystem/dose-rate-type"/>
                        <code value="ordered"/>
                        <display value="Ordered"/>
                     </coding>
                  </type>
                  <doseQuantity>
                     <value value="1"/>
                     <unit value="TAB"/>
                     <system value="http://terminology.hl7.org/CodeSystem/v3-orderableDrugForm"/>
                     <code value="TAB"/>
                  </doseQuantity>
               </doseAndRate>
            </dosageInstruction>
         </MedicationDispense>
      </resource>
      <search>
         <mode value="match"/>
      </search>
   </entry>
   <entry>
      <fullUrl value="http://localhost:8084/fhir/MedicationDispense/12"/>
      <resource>
         <MedicationDispense xmlns="http://hl7.org/fhir">
            <id value="12"/>
            <meta>
               <versionId value="1"/>
               <lastUpdated value="2024-06-13T13:58:30.743+00:00"/>
               <source value="#IumFTZGxT7uMjajR"/>
            </meta>
            <status value="completed"/>
            <performer>
               <actor>
                  <reference value="Practitioner/3"/>
               </actor>
            </performer>
            <authorizingPrescription>
               <reference value="MedicationRequest/9"/>
            </authorizingPrescription>
            <quantity>
               <value value="6"/>
               <system value="http://terminology.hl7.org/CodeSystem/v3-orderableDrugForm"/>
               <code value="TAB"/>
            </quantity>
            <daysSupply>
               <value value="5"/>
               <unit value="Day"/>
               <system value="http://unitsofmeasure.org"/>
               <code value="d"/>
            </daysSupply>
            <whenHandedOver value="2024-01-14T07:13:00+05:00"/>
            <note>
               <text value="Patient soll es zum Essen einnehmen"/>
            </note>
            <dosageInstruction>
               <sequence value="1"/>
               <text value="Zwei Tabletten auf einmal"/>
               <additionalInstruction>
                  <coding>
                     <system value="http://snomed.info/sct"/>
                     <code value="311504000"/>
                     <display value="Zum Essen"/>
                  </coding>
               </additionalInstruction>
               <timing>
                  <repeat>
                     <frequency value="1"/>
                     <period value="1"/>
                     <periodUnit value="d"/>
                  </repeat>
               </timing>
               <route>
                  <coding>
                     <system value="http://snomed.info/sct"/>
                     <code value="26643006"/>
                     <display value="Oral Route"/>
                  </coding>
               </route>
               <method>
                  <coding>
                     <system value="http://snomed.info/sct"/>
                     <code value="421521009"/>
                     <display value="Swallow - dosing instruction imperative (qualifier value)"/>
                  </coding>
               </method>
               <doseAndRate>
                  <type>
                     <coding>
                        <system value="http://terminology.hl7.org/CodeSystem/dose-rate-type"/>
                        <code value="ordered"/>
                        <display value="Ordered"/>
                     </coding>
                  </type>
                  <doseQuantity>
                     <value value="2"/>
                     <unit value="TAB"/>
                     <system value="http://terminology.hl7.org/CodeSystem/v3-orderableDrugForm"/>
                     <code value="TAB"/>
                  </doseQuantity>
               </doseAndRate>
            </dosageInstruction>
         </MedicationDispense>
      </resource>
      <search>
         <mode value="match"/>
      </search>
   </entry>
   <entry>
      <fullUrl value="http://localhost:8084/fhir/MedicationDispense/13"/>
      <resource>
         <MedicationDispense xmlns="http://hl7.org/fhir">
            <id value="13"/>
            <meta>
               <versionId value="1"/>
               <lastUpdated value="2024-06-13T13:58:30.853+00:00"/>
               <source value="#liIS5M4CRh0NhkqH"/>
            </meta>
            <status value="completed"/>
            <performer>
               <actor>
                  <reference value="Practitioner/3"/>
               </actor>
            </performer>
            <authorizingPrescription>
               <reference value="MedicationRequest/10"/>
            </authorizingPrescription>
            <quantity>
               <value value="6"/>
               <system value="http://terminology.hl7.org/CodeSystem/v3-orderableDrugForm"/>
               <code value="TAB"/>
            </quantity>
            <daysSupply>
               <value value="5"/>
               <unit value="Day"/>
               <system value="http://unitsofmeasure.org"/>
               <code value="d"/>
            </daysSupply>
            <whenHandedOver value="2024-01-03T07:13:00+05:00"/>
            <note>
               <text value="Patient soll es zum Essen einnehmen"/>
            </note>
            <dosageInstruction>
               <sequence value="1"/>
               <text value="Zwei Tabletten auf einmal"/>
               <additionalInstruction>
                  <coding>
                     <system value="http://snomed.info/sct"/>
                     <code value="311504000"/>
                     <display value="Zum Essen"/>
                  </coding>
               </additionalInstruction>
               <timing>
                  <repeat>
                     <frequency value="1"/>
                     <period value="1"/>
                     <periodUnit value="d"/>
                  </repeat>
               </timing>
               <route>
                  <coding>
                     <system value="http://snomed.info/sct"/>
                     <code value="26643006"/>
                     <display value="Oral Route"/>
                  </coding>
               </route>
               <method>
                  <coding>
                     <system value="http://snomed.info/sct"/>
                     <code value="421521009"/>
                     <display value="Swallow - dosing instruction imperative (qualifier value)"/>
                  </coding>
               </method>
               <doseAndRate>
                  <type>
                     <coding>
                        <system value="http://terminology.hl7.org/CodeSystem/dose-rate-type"/>
                        <code value="ordered"/>
                        <display value="Ordered"/>
                     </coding>
                  </type>
                  <doseQuantity>
                     <value value="2"/>
                     <unit value="TAB"/>
                     <system value="http://terminology.hl7.org/CodeSystem/v3-orderableDrugForm"/>
                     <code value="TAB"/>
                  </doseQuantity>
               </doseAndRate>
            </dosageInstruction>
         </MedicationDispense>
      </resource>
      <search>
         <mode value="match"/>
      </search>
   </entry>
</Bundle>

cURL Malformed Request InformationService

Hi,

I'm encountering a "malformedRequest" error when accessing the InformationService. Is this a known issue?

best regards

consent decisions

*   Trying 127.0.0.1:8082...
* Connected to localhost (127.0.0.1) port 8082 (#0)
> GET /information/api/v1/ehr/Z1234567891/consentdecisions HTTP/1.1
> Host: localhost:8082
> User-Agent: curl/7.88.1
> Accept: */*
>
< HTTP/1.1 400
< Content-Type: application/json;charset=utf-8
< Content-Length: 33
< Date: Sun, 07 Jul 2024 20:12:16 GMT
< Connection: close
<
* Closing connection 0
{"errorCode": "malformedRequest"}

record status

*   Trying 127.0.0.1:8082...
* Connected to localhost (127.0.0.1) port 8082 (#0)
> GET /information/api/v1/ehr/Z1234567891 HTTP/1.1
> Host: localhost:8082
> User-Agent: curl/7.88.1
> Accept: */*
>
< HTTP/1.1 400
< Content-Type: application/json;charset=utf-8
< Content-Length: 33
< Date: Sun, 07 Jul 2024 20:17:36 GMT
< Connection: close
<
* Closing connection 0
{"errorCode": "malformedRequest"}

VAU Entitlement-Service PS

Hi,

the following error appears in the log using vau
Response: 400 Bad Request ERROR d.g.e.e.common.LoggingFilter - Error serializing response body to JSON: Java 8 optional type java.util.Optional<java.lang.String> not supported by default: add Module "com.fasterxml.jackson.datatype:jackson-datatype-jdk8" to enable handling (through reference chain: io.micronaut.http.hateoas.JsonError["logref"])

Could this be a dependency error, or is this an issue with my request? curl works just fine
innerRequest.txt

best regards

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.