1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.openehealth.ipf.platform.camel.ihe.ws;
17
18 import lombok.extern.slf4j.Slf4j;
19 import org.apache.camel.Exchange;
20 import org.apache.camel.ExchangePattern;
21 import org.apache.camel.Message;
22 import org.apache.cxf.binding.soap.SoapFault;
23 import org.apache.cxf.jaxws.context.WebServiceContextImpl;
24 import org.openehealth.ipf.platform.camel.core.util.Exchanges;
25
26 import javax.xml.ws.handler.MessageContext;
27 import java.util.Map;
28
29 import static java.util.Objects.requireNonNull;
30 import static org.openehealth.ipf.platform.camel.ihe.ws.HeaderUtils.processIncomingHeaders;
31 import static org.openehealth.ipf.platform.camel.ihe.ws.HeaderUtils.processUserDefinedOutgoingHeaders;
32
33
34
35
36
37
38 @Slf4j
39 abstract public class AbstractWebService {
40 private DefaultWsConsumer consumer;
41
42
43
44
45
46
47
48
49
50
51
52
53 protected Exchange process(
54 Object body,
55 Map<String, Object> additionalHeaders,
56 ExchangePattern exchangePattern) {
57 requireNonNull(consumer);
58 MessageContext messageContext = new WebServiceContextImpl().getMessageContext();
59 Exchange exchange = consumer.getEndpoint().createExchange(exchangePattern);
60
61
62 Message inputMessage = exchange.getIn();
63 inputMessage.setBody(body);
64 processIncomingHeaders(messageContext, inputMessage);
65 if (additionalHeaders != null) {
66 inputMessage.getHeaders().putAll(additionalHeaders);
67 }
68
69
70 exchange.setProperty(Exchange.CHARSET_NAME,
71 messageContext.get(org.apache.cxf.message.Message.ENCODING));
72
73
74 consumer.process(exchange);
75
76 Exception exception = Exchanges.extractException(exchange, false);
77 if (exception instanceof SoapFault) {
78 log.debug("Rethrowing SOAP fault occurred in the route", exception);
79 throw (SoapFault) exception;
80 }
81
82
83 Message resultMessage = Exchanges.resultMessage(exchange);
84 processUserDefinedOutgoingHeaders(messageContext, resultMessage, false);
85
86
87 String responseEncoding = exchange.getProperty(Exchange.CHARSET_NAME, String.class);
88 if (responseEncoding != null) {
89 messageContext.put(org.apache.cxf.message.Message.ENCODING, responseEncoding);
90 }
91 return exchange;
92 }
93
94
95
96
97
98
99
100
101
102 protected Exchange process(Object body) {
103 return process(body, null, ExchangePattern.InOut);
104 }
105
106
107
108
109
110
111 public void setConsumer(DefaultWsConsumer consumer) {
112 this.consumer = requireNonNull(consumer, "consumer");
113 }
114
115
116
117
118 protected DefaultWsConsumer getConsumer() {
119 return consumer;
120 }
121
122 }