Skip to content

Commit aea6d50

Browse files
committed
use HttpResponseException
1 parent fb649c2 commit aea6d50

File tree

6 files changed

+691
-125
lines changed

6 files changed

+691
-125
lines changed

sdk/clientcore/annotation-processor-test/src/main/java/io/clientcore/annotation/processor/test/SimpleXmlSerializableServiceImpl.java

Lines changed: 45 additions & 5 deletions
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);
@@ -140,7 +157,12 @@ public SimpleXmlSerializable getInvalidXml(String contentType) {
140157
int responseCode = networkResponse.getStatusCode();
141158
boolean expectedResponse = responseCode == 200;
142159
if (!expectedResponse) {
143-
throw new RuntimeException("Unexpected response code: " + responseCode);
160+
if (networkResponse.getValue() == null || networkResponse.getValue().toBytes().length == 0) {
161+
throw instantiateUnexpectedException(responseCode, networkResponse, null, null);
162+
} else {
163+
ParameterizedType returnType = CoreUtils.createParameterizedType(io.clientcore.annotation.processor.test.implementation.models.SimpleXmlSerializable.class);
164+
throw instantiateUnexpectedException(responseCode, networkResponse, networkResponse.getValue(), decodeNetworkResponse(networkResponse.getValue(), jsonSerializer, returnType));
165+
}
144166
}
145167
Object result = null;
146168
ParameterizedType returnType = CoreUtils.createParameterizedType(io.clientcore.annotation.processor.test.implementation.models.SimpleXmlSerializable.class);
@@ -178,7 +200,25 @@ private static Object decodeNetworkResponse(BinaryData data, ObjectSerializer se
178200
}
179201
return serializer.deserializeFromBytes(data.toBytes(), token);
180202
} catch (IOException e) {
181-
throw LOGGER.logThrowableAsError(CoreException.from(e));
203+
LOGGER.atWarning().setThrowable(e).log(() -> "Failed to deserialize the error entity.");
204+
return null;
205+
}
206+
}
207+
208+
private static HttpResponseException instantiateUnexpectedException(int responseCode, Response<BinaryData> response, BinaryData data, Object decodedValue) {
209+
StringBuilder exceptionMessage = new StringBuilder("Status code ").append(responseCode).append(", ");
210+
String contentType = response.getHeaders().getValue(HttpHeaderName.CONTENT_TYPE);
211+
if ("application/octet-stream".equalsIgnoreCase(contentType)) {
212+
String contentLength = response.getHeaders().getValue(HttpHeaderName.CONTENT_LENGTH);
213+
exceptionMessage.append("(").append(contentLength).append("-byte body)");
214+
} else if (data == null || data.toBytes().length == 0) {
215+
exceptionMessage.append("(empty body)");
216+
} else {
217+
exceptionMessage.append('"').append(new String(data.toBytes(), StandardCharsets.UTF_8)).append('"');
218+
}
219+
if (decodedValue instanceof IOException || decodedValue instanceof IllegalStateException) {
220+
return new HttpResponseException(exceptionMessage.toString(), response, (Throwable) decodedValue);
182221
}
222+
return new HttpResponseException(exceptionMessage.toString(), response, decodedValue);
183223
}
184224
}

0 commit comments

Comments
 (0)