21 package org.opensplice.dds.core;
23 import java.util.concurrent.TimeoutException;
39 "Internal error: TimeOutException caught in unexpected location.");
47 case DDS.RETCODE_PRECONDITION_NOT_MET.value:
49 getErrorMessage(retCode, message));
50 case DDS.RETCODE_OUT_OF_RESOURCES.value:
53 case DDS.RETCODE_ALREADY_DELETED.value:
56 case DDS.RETCODE_BAD_PARAMETER.value:
58 getErrorMessage(retCode, message));
59 case DDS.RETCODE_ERROR.value:
62 case DDS.RETCODE_ILLEGAL_OPERATION.value:
64 getErrorMessage(retCode, message));
65 case DDS.RETCODE_IMMUTABLE_POLICY.value:
67 getErrorMessage(retCode, message));
68 case DDS.RETCODE_INCONSISTENT_POLICY.value:
70 getErrorMessage(retCode, message));
71 case DDS.RETCODE_NOT_ENABLED.value:
74 case DDS.RETCODE_UNSUPPORTED.value:
76 getErrorMessage(retCode, message));
77 case DDS.RETCODE_TIMEOUT.value:
79 if (retCode == DDS.RETCODE_TIMEOUT.value) {
81 getErrorMessage(retCode, message));
84 case DDS.RETCODE_OK.value:
85 case DDS.RETCODE_NO_DATA.value:
91 private static String getDetails(DDS.ErrorInfo errorInfo, String message) {
93 DDS.StringHolder messageHolder =
new DDS.StringHolder();
95 errorInfo.get_message(messageHolder);
97 if (messageHolder.value != null) {
98 if (message != null) {
100 result +=
"(" + messageHolder.value +
")";
102 result += messageHolder.value;
104 }
else if (message != null) {
107 errorInfo.get_location(messageHolder);
109 if (messageHolder.value != null) {
110 result +=
" at " + messageHolder.value;
112 errorInfo.get_source_line(messageHolder);
114 if (messageHolder.value != null) {
115 result +=
" (" + messageHolder.value +
")";
117 errorInfo.get_stack_trace(messageHolder);
119 if (messageHolder.value != null) {
120 result +=
"\nStack trace:\n" + messageHolder.value;
125 private static String getErrorMessage(
int retCode, String message) {
127 DDS.ErrorInfo errorInfo =
new ErrorInfo();
128 int result = errorInfo.update();
131 case DDS.RETCODE_NO_DATA.value:
134 case DDS.RETCODE_OK.value:
135 output = getDetails(errorInfo, message);
138 if (message != null) {
139 output =
" Unable to get extra error information due to internal error.(" 142 output =
" Unable to get extra error information due to internal error.";
150 StackTraceElement[] stack) {
151 StringBuffer result =
new StringBuffer();
154 result.append(ex.getClass().getSuperclass().getName() +
": " 155 + ex.getMessage() +
"\n");
157 while ((stack.length > startIndex)
158 && (
Utilities.class.getName().equals(stack[startIndex]
162 for (
int i = startIndex; i < stack.length; i++) {
163 result.append(
"\tat ");
164 result.append(stack[i].getClassName());
166 result.append(stack[i].getMethodName());
168 result.append(stack[i].getFileName());
170 result.append(stack[i].getLineNumber());
171 result.append(
")\n");
173 return result.toString();
178 throws TimeoutException {
186 DDS.ErrorInfo errorInfo =
new ErrorInfo();
187 int result = errorInfo.update();
190 case DDS.RETCODE_NO_DATA.value:
192 code = DDS.RETCODE_ERROR.value;
194 case DDS.RETCODE_OK.value:
195 DDS.ReturnCodeHolder errorHolder =
new DDS.ReturnCodeHolder();
196 errorInfo.get_code(errorHolder);
197 code = errorHolder.value;
198 message = getDetails(errorInfo, null);
201 message =
"Unable to get extra error information due to internal error.";
202 code = DDS.RETCODE_ERROR.value;
206 case DDS.RETCODE_PRECONDITION_NOT_MET.value:
208 case DDS.RETCODE_OUT_OF_RESOURCES.value:
210 case DDS.RETCODE_ALREADY_DELETED.value:
212 case DDS.RETCODE_BAD_PARAMETER.value:
214 case DDS.RETCODE_ILLEGAL_OPERATION.value:
216 case DDS.RETCODE_IMMUTABLE_POLICY.value:
218 case DDS.RETCODE_INCONSISTENT_POLICY.value:
220 case DDS.RETCODE_NOT_ENABLED.value:
222 case DDS.RETCODE_UNSUPPORTED.value:
224 case DDS.RETCODE_ERROR.value:
236 "Illegal Duration provided (null).");
240 }
catch (ClassCastException e) {
242 "Usage of non-OpenSplice Duration implementation is not supported.");
254 "Illegal InstanceHandle provided (null).");
258 }
catch (ClassCastException e) {
260 "Usage of non-OpenSplice InstanceHandle implementation is not supported.");
271 "Illegal Time provided (null).");
275 }
catch (ClassCastException e) {
277 "Usage of non-OpenSplice Time implementation is not supported.");
282 return new TimeImpl(env, t.sec, t.nanosec);
static InstanceHandle convert(OsplServiceEnvironment env, long handle)
static void checkReturnCodeWithTimeout(int retCode, OsplServiceEnvironment environment, String message)
static Time convert(OsplServiceEnvironment env, DDS.Time_t t)
static String getOsplExceptionStack(Exception ex, StackTraceElement[] stack)
static DDS.Duration_t convert(OsplServiceEnvironment environment, Duration d)
static Duration convert(OsplServiceEnvironment env, DDS.Duration_t d)
An opaque handle that can be used to refer to a local or remote entity.
static void checkReturnCode(int retCode, OsplServiceEnvironment environment, String message)
static long convert(OsplServiceEnvironment environment, InstanceHandle h)
static DDS.Time_t convert(OsplServiceEnvironment environment, Time t)
A span of elapsed time expressed with nanosecond precision.
static void throwLastErrorException(OsplServiceEnvironment environment)
A moment in time expressed with nanosecond precision (though not necessarily nanosecond accuracy)...