REST - jak pozbyć się niedozwolonych znaków unicode?

0

Hej,
Potrzebuje rady jak przed parsowaniem usunąć niedozwolone znaki unicode z XML.

Tu fragment kodu:

	Response searchResponse = webTarget.request(MediaType.APPLICATION_XML).get();
	/..
	SearchOutput searchOutput = searchResponse.readEntity(SearchOutput.class);

Działa to dobrze o ile XML jest prawidłowy. Jeśli natomiast ten XML zawiera jakiś niedozwolony znak, nie może być prawidłowo obsłużony (czyli rzuca wyjątkiem i tyle z wyniku).

Jak sobie radzicie z takimi sytuacjami? Jest jakaś opcja, żeby przed searchResponse.readEntity(SearchOutput.class) usunąć nieprawidłowe znaki?

0

To się zwie "sanitizing" albo "escaping" z tego co kojarzę. Google mówi, że apache-commons ma klasę do tego: https://commons.apache.org/proper/commons-lang/javadocs/api-3.4/org/apache/commons/lang3/StringEscapeUtils.html

0

Zeby uściślić temat, nie chodzi mi o usuwanie znaków w ogólnym znaczeniu. (@Wizzie serio?)

Chodzi mi o ten konkretny przypadek, żeby w efekcie końcowym miec odpowiedz z REST bez niedozwolonych znaków, w postaci SearchOutput.class.

1

readEntity jako String.class, sparsowac do Document czy czegos podobnego, wykonac oczyczsczenie (albo jesli sie da bez parsowania do Document na samym stringu?). Nastepnie marshaling do Twojego entity. Hm?

0

Spróbowałam jeszcze raz i teraz zadziałało (nie mam pojęcia co wcześniej zrobiłam nie tak..)

Dla potomnych:

	String searchOutputString = searchResponse.readEntity(String.class);
	searchOutputString = searchOutputString.replaceAll(SearchHelper.XML_PATTERN, "");

	JAXBContext jaxbContext = JAXBContext.newInstance("rest.model.search");
	Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
	StringReader reader = new StringReader(searchOutputString);

	SearchOutput searchOutput = (SearchOutput) JAXBIntrospector.getValue(unmarshaller.unmarshal(reader));	

@Swr dzięki za inspiracje

1 użytkowników online, w tym zalogowanych: 0, gości: 1