/
SoapFaultUtil.java
101 lines (76 loc) · 2.89 KB
/
SoapFaultUtil.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
package dk.nsi.stamdata.cpr;
import static com.trifork.stamdata.Preconditions.checkNotNull;
import java.util.Calendar;
import java.util.TimeZone;
import java.util.UUID;
import javax.xml.soap.SOAPConstants;
import javax.xml.soap.SOAPFactory;
import javax.xml.soap.SOAPFault;
import javax.xml.ws.Holder;
import javax.xml.ws.soap.SOAPFaultException;
import dk.nsi.stamdata.cpr.medcom.DetGodeCPROpslagFaultMessages;
import dk.nsi.stamdata.cpr.ws.DGWSFault;
import dk.nsi.stamdata.cpr.ws.Header;
import dk.nsi.stamdata.cpr.ws.Linking;
import dk.nsi.stamdata.cpr.ws.Security;
import dk.nsi.stamdata.cpr.ws.Timestamp;
import dk.sosi.seal.model.constants.FlowStatusValues;
public final class SoapFaultUtil
{
private SoapFaultUtil()
{
}
public static DGWSFault newDGWSFault(Holder<Security> securityHeaderHolder, Holder<Header> medcomHeaderHolder, String status, String errorMsg) throws DGWSFault
{
checkNotNull(securityHeaderHolder, "securityHeaderHolder");
checkNotNull(medcomHeaderHolder, "medcomHeaderHolder");
checkNotNull(status, "status");
checkNotNull(errorMsg, "errorMsg");
// The DGWS Specification says that this exact string must be returned.
final String DGWS_ERROR_MSG = "DGWS error";
final String DGWS_TIMEZONE = "UTC";
Security securityHeader = new Security();
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone(DGWS_TIMEZONE));
cal.set(Calendar.MILLISECOND, 0);
Timestamp timestamp = new Timestamp();
timestamp.setCreated(cal);
securityHeader.setTimestamp(timestamp);
securityHeaderHolder.value = securityHeader;
Header medcom = new Header();
medcom.setFlowStatus(FlowStatusValues.FLOW_FINALIZED_SUCCESFULLY);
Linking linking = new Linking();
linking.setFlowID(medcomHeaderHolder.value.getLinking().getFlowID());
linking.setInResponseToMessageID(medcomHeaderHolder.value.getLinking().getMessageID());
linking.setMessageID(UUID.randomUUID().toString());
medcom.setLinking(linking);
medcomHeaderHolder.value = medcom;
medcomHeaderHolder.value.setFlowStatus(status);
return new DGWSFault(errorMsg, DGWS_ERROR_MSG);
}
public static SOAPFaultException newSOAPSenderFault(String message)
{
checkNotNull(message, "message");
SOAPFault fault;
try
{
// We have to make sure to use the same protocol version
// as defined in the WSDL.
SOAPFactory factory = SOAPFactory.newInstance(SOAPConstants.SOAP_1_1_PROTOCOL);
fault = factory.createFault();
fault.setFaultCode(SOAPConstants.SOAP_SENDER_FAULT);
// TODO: For some reason the xml:lang att. is always "en"
// even when the locale is set in this next call.
fault.setFaultString(message);
}
catch (Exception e)
{
throw newServerErrorFault(e);
}
return new SOAPFaultException(fault);
}
public static RuntimeException newServerErrorFault(Exception e)
{
checkNotNull(e, "e");
return new RuntimeException(DetGodeCPROpslagFaultMessages.INTERNAL_SERVER_ERROR, e);
}
}