1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.openehealth.ipf.platform.camel.ihe.hpd;
17
18 import lombok.extern.slf4j.Slf4j;
19 import org.apache.camel.Exchange;
20 import org.openehealth.ipf.commons.ihe.hpd.HpdException;
21 import org.openehealth.ipf.commons.ihe.hpd.stub.dsmlv2.BatchRequest;
22 import org.openehealth.ipf.commons.ihe.hpd.stub.dsmlv2.BatchResponse;
23 import org.openehealth.ipf.commons.ihe.hpd.stub.dsmlv2.ErrorResponse;
24 import org.openehealth.ipf.commons.ihe.hpd.stub.dsmlv2.ObjectFactory;
25 import org.openehealth.ipf.platform.camel.core.util.Exchanges;
26 import org.openehealth.ipf.platform.camel.ihe.ws.AbstractWebService;
27 import org.openehealth.ipf.commons.ihe.hpd.stub.dsmlv2.ErrorResponse.ErrorType;
28
29 @Slf4j
30 abstract public class HpdService extends AbstractWebService {
31
32 public BatchResponse doProcess(BatchRequest request) {
33 Exchange result = process(request);
34 Exception exception = Exchanges.extractException(result);
35 if (exception != null) {
36 log.debug(getClass().getSimpleName() + " service failed", exception);
37 return errorMessage(request, exception);
38 }
39 return Exchanges.resultMessage(result).getBody(BatchResponse.class);
40 }
41
42 private BatchResponse errorMessage(BatchRequest request, Exception exception) {
43 ObjectFactory factory = new ObjectFactory();
44
45 ErrorResponse error = factory.createErrorResponse();
46 error.setMessage(exception.getMessage());
47 error.setRequestID(request.getRequestID());
48 ErrorType errorType = (exception instanceof HpdException) ? ((HpdException) exception).getType() : ErrorType.OTHER;
49 error.setType(errorType);
50
51 BatchResponse response = factory.createBatchResponse();
52 response.setRequestID(request.getRequestID());
53 response.getBatchResponses().add(factory.createBatchResponseErrorResponse(error));
54
55 return response;
56 }
57 }