21
21
import java .lang .reflect .ParameterizedType ;
22
22
import java .lang .reflect .Type ;
23
23
import java .util .List ;
24
+ import io .clientcore .core .http .models .HttpResponseException ;
25
+ import java .nio .charset .StandardCharsets ;
24
26
25
27
/**
26
28
* Initializes a new instance of the SimpleXmlSerializableServiceImpl type.
@@ -70,7 +72,12 @@ public void sendApplicationXml(SimpleXmlSerializable simpleXmlSerializable) {
70
72
int responseCode = networkResponse .getStatusCode ();
71
73
boolean expectedResponse = responseCode == 200 ;
72
74
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
+ }
74
81
}
75
82
networkResponse .close ();
76
83
}
@@ -95,7 +102,12 @@ public void sendTextXml(SimpleXmlSerializable simpleXmlSerializable) {
95
102
int responseCode = networkResponse .getStatusCode ();
96
103
boolean expectedResponse = responseCode == 200 ;
97
104
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
+ }
99
111
}
100
112
networkResponse .close ();
101
113
}
@@ -112,7 +124,12 @@ public SimpleXmlSerializable getXml(String contentType) {
112
124
int responseCode = networkResponse .getStatusCode ();
113
125
boolean expectedResponse = responseCode == 200 ;
114
126
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
+ }
116
133
}
117
134
Object result = null ;
118
135
ParameterizedType returnType = CoreUtils .createParameterizedType (io .clientcore .annotation .processor .test .implementation .models .SimpleXmlSerializable .class );
@@ -139,7 +156,12 @@ public SimpleXmlSerializable getInvalidXml() {
139
156
int responseCode = networkResponse .getStatusCode ();
140
157
boolean expectedResponse = responseCode == 200 ;
141
158
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
+ }
143
165
}
144
166
Object result = null ;
145
167
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
177
199
}
178
200
return serializer .deserializeFromBytes (data .toBytes (), token );
179
201
} 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 );
181
220
}
221
+ return new HttpResponseException (exceptionMessage .toString (), response , decodedValue );
182
222
}
183
223
}
0 commit comments