Skip to content

Commit a6551c7

Browse files
committed
use HttpResponseException
1 parent 4231e3a commit a6551c7

File tree

8 files changed

+691
-593
lines changed

8 files changed

+691
-593
lines changed
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
import java.lang.reflect.ParameterizedType;
2222
import java.lang.reflect.Type;
2323
import java.util.List;
24+
import io.clientcore.core.http.models.HttpResponseException;
25+
import java.nio.charset.StandardCharsets;
2426

2527
/**
2628
* Initializes a new instance of the SimpleXmlSerializableServiceImpl type.
@@ -70,7 +72,12 @@ public void sendApplicationXml(SimpleXmlSerializable simpleXmlSerializable) {
7072
int responseCode = networkResponse.getStatusCode();
7173
boolean expectedResponse = responseCode == 200;
7274
if (!expectedResponse) {
73-
throw new RuntimeException("Unexpected response code: " + responseCode);
75+
if (networkResponse.getValue() == null || networkResponse.getValue().toBytes().length == 0) {
76+
throw instantiateUnexpectedException(responseCode, networkResponse, null, null);
77+
} else {
78+
ParameterizedType returnType = null;
79+
throw instantiateUnexpectedException(responseCode, networkResponse, networkResponse.getValue(), decodeNetworkResponse(networkResponse.getValue(), jsonSerializer, returnType));
80+
}
7481
}
7582
networkResponse.close();
7683
}
@@ -95,7 +102,12 @@ public void sendTextXml(SimpleXmlSerializable simpleXmlSerializable) {
95102
int responseCode = networkResponse.getStatusCode();
96103
boolean expectedResponse = responseCode == 200;
97104
if (!expectedResponse) {
98-
throw new RuntimeException("Unexpected response code: " + responseCode);
105+
if (networkResponse.getValue() == null || networkResponse.getValue().toBytes().length == 0) {
106+
throw instantiateUnexpectedException(responseCode, networkResponse, null, null);
107+
} else {
108+
ParameterizedType returnType = null;
109+
throw instantiateUnexpectedException(responseCode, networkResponse, networkResponse.getValue(), decodeNetworkResponse(networkResponse.getValue(), jsonSerializer, returnType));
110+
}
99111
}
100112
networkResponse.close();
101113
}
@@ -112,7 +124,12 @@ public SimpleXmlSerializable getXml(String contentType) {
112124
int responseCode = networkResponse.getStatusCode();
113125
boolean expectedResponse = responseCode == 200;
114126
if (!expectedResponse) {
115-
throw new RuntimeException("Unexpected response code: " + responseCode);
127+
if (networkResponse.getValue() == null || networkResponse.getValue().toBytes().length == 0) {
128+
throw instantiateUnexpectedException(responseCode, networkResponse, null, null);
129+
} else {
130+
ParameterizedType returnType = CoreUtils.createParameterizedType(io.clientcore.annotation.processor.test.implementation.models.SimpleXmlSerializable.class);
131+
throw instantiateUnexpectedException(responseCode, networkResponse, networkResponse.getValue(), decodeNetworkResponse(networkResponse.getValue(), jsonSerializer, returnType));
132+
}
116133
}
117134
Object result = null;
118135
ParameterizedType returnType = CoreUtils.createParameterizedType(io.clientcore.annotation.processor.test.implementation.models.SimpleXmlSerializable.class);
@@ -139,7 +156,12 @@ public SimpleXmlSerializable getInvalidXml() {
139156
int responseCode = networkResponse.getStatusCode();
140157
boolean expectedResponse = responseCode == 200;
141158
if (!expectedResponse) {
142-
throw new RuntimeException("Unexpected response code: " + responseCode);
159+
if (networkResponse.getValue() == null || networkResponse.getValue().toBytes().length == 0) {
160+
throw instantiateUnexpectedException(responseCode, networkResponse, null, null);
161+
} else {
162+
ParameterizedType returnType = CoreUtils.createParameterizedType(io.clientcore.annotation.processor.test.implementation.models.SimpleXmlSerializable.class);
163+
throw instantiateUnexpectedException(responseCode, networkResponse, networkResponse.getValue(), decodeNetworkResponse(networkResponse.getValue(), jsonSerializer, returnType));
164+
}
143165
}
144166
Object result = null;
145167
ParameterizedType returnType = CoreUtils.createParameterizedType(io.clientcore.annotation.processor.test.implementation.models.SimpleXmlSerializable.class);
@@ -177,7 +199,25 @@ private static Object decodeNetworkResponse(BinaryData data, ObjectSerializer se
177199
}
178200
return serializer.deserializeFromBytes(data.toBytes(), token);
179201
} catch (IOException e) {
180-
throw LOGGER.logThrowableAsError(CoreException.from(e));
202+
LOGGER.atWarning().setThrowable(e).log(() -> "Failed to deserialize the error entity.");
203+
return null;
204+
}
205+
}
206+
207+
private static HttpResponseException instantiateUnexpectedException(int responseCode, Response<BinaryData> response, BinaryData data, Object decodedValue) {
208+
StringBuilder exceptionMessage = new StringBuilder("Status code ").append(responseCode).append(", ");
209+
String contentType = response.getHeaders().getValue(HttpHeaderName.CONTENT_TYPE);
210+
if ("application/octet-stream".equalsIgnoreCase(contentType)) {
211+
String contentLength = response.getHeaders().getValue(HttpHeaderName.CONTENT_LENGTH);
212+
exceptionMessage.append("(").append(contentLength).append("-byte body)");
213+
} else if (data == null || data.toBytes().length == 0) {
214+
exceptionMessage.append("(empty body)");
215+
} else {
216+
exceptionMessage.append('"').append(new String(data.toBytes(), StandardCharsets.UTF_8)).append('"');
217+
}
218+
if (decodedValue instanceof IOException || decodedValue instanceof IllegalStateException) {
219+
return new HttpResponseException(exceptionMessage.toString(), response, (Throwable) decodedValue);
181220
}
221+
return new HttpResponseException(exceptionMessage.toString(), response, decodedValue);
182222
}
183223
}

0 commit comments

Comments
 (0)