| 32 | import org.xml.sax.helpers.DefaultHandler; |
| 33 | |
| 34 | @SuppressWarnings("deprecation") |
| 35 | class SAXDecoderTest { |
| 36 | |
| 37 | static String statusFailed = |
| 38 | """ |
| 39 | <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> |
| 40 | <soap:Body> |
| 41 | <ns1:getNeustarNetworkStatusResponse xmlns:ns1="http://webservice.api.ultra.neustar.com/v01/"> |
| 42 | <NeustarNetworkStatus xmlns:ns2="http://schema.ultraservice.neustar.com/v01/">Failed</NeustarNetworkStatus> |
| 43 | </ns1:getNeustarNetworkStatusResponse> |
| 44 | </soap:Body> |
| 45 | </soap:Envelope> |
| 46 | """; |
| 47 | Decoder decoder = |
| 48 | SAXDecoder.builder() |
| 49 | .registerContentHandler( |
| 50 | NetworkStatus.class, |
| 51 | new SAXDecoder.ContentHandlerWithResult.Factory<NetworkStatus>() { |
| 52 | @Override |
| 53 | public SAXDecoder.ContentHandlerWithResult<NetworkStatus> create() { |
| 54 | return new NetworkStatusHandler(); |
| 55 | } |
| 56 | }) // |
| 57 | .registerContentHandler(NetworkStatusStringHandler.class) // |
| 58 | .build(); |
| 59 | |
| 60 | @Test |
| 61 | void parsesConfiguredTypes() throws ParseException, IOException { |
| 62 | assertThat(decoder.decode(statusFailedResponse(), NetworkStatus.class)) |
| 63 | .isEqualTo(NetworkStatus.FAILED); |
| 64 | assertThat(decoder.decode(statusFailedResponse(), String.class)).isEqualTo("Failed"); |
| 65 | } |
| 66 | |
| 67 | @Test |
| 68 | void niceErrorOnUnconfiguredType() throws ParseException, IOException { |
| 69 | Throwable exception = |
| 70 | assertThrows( |
| 71 | IllegalStateException.class, () -> decoder.decode(statusFailedResponse(), int.class)); |
| 72 | |
| 73 | assertThat(exception.getMessage()).contains("type int not in configured handlers"); |
| 74 | } |
| 75 | |
| 76 | private Response statusFailedResponse() { |
| 77 | return Response.builder() |
| 78 | .status(200) |
| 79 | .reason("OK") |
| 80 | .request(Request.create(HttpMethod.GET, "/api", Collections.emptyMap(), null, Util.UTF_8)) |
| 81 | .headers(Collections.<String, Collection<String>>emptyMap()) |
| 82 | .body(statusFailed, UTF_8) |
| 83 | .build(); |
| 84 | } |
| 85 | |
| 86 | @Test |
| 87 | void nullBodyDecodesToEmpty() throws Exception { |
| 88 | Response response = |
| 89 | Response.builder() |
| 90 | .status(204) |
| 91 | .reason("OK") |
nothing calls this directly
no test coverage detected