RESTCLIENT-Nachrichtenkonverter können die ISO-8859-1-Antwort nicht vom Remote-Server analysierenJava

Java-Forum
Anonymous
 RESTCLIENT-Nachrichtenkonverter können die ISO-8859-1-Antwort nicht vom Remote-Server analysieren

Post by Anonymous »

Ich verwende Spring Boot 3.4.4 einen Remote-XML-Dienst, bei dem die Antwort in ISO-8859-1 Codierung ist.

Code: Select all

HTTP/1.1 200 OK
Content-type: application/xml;charset=iso-8859-1
Date: Fri, 11 Apr 2025 06:51:09 +0200
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
Content-Security-Policy: frame-ancestors 'none'; sandbox; default-src 'none'
Content-length: 1163




Episode
123
Bue, pil, økser og stædighed
4714857215527
0
Standard
https://foo.bar


< /code>
Der RestClient ist so konfiguriert, dass es ISO-8859-1 Codierung akzeptiert-> < /p>
@Bean(name = "woRestClient")
RestClient woRestClient(RestClient.Builder builder) {
var factory = new JdkClientHttpRequestFactory(createHttpClient());
return builder
.baseUrl(configuration.endpointUrl)
.messageConverters(httpMessageConverters -> {
httpMessageConverters.forEach(httpMessageConverter -> {
if (httpMessageConverter instanceof Jaxb2RootElementHttpMessageConverter converter) {
converter.setDefaultCharset(StandardCharsets.ISO_8859_1);
}
});
})
.requestFactory(factory)
.build();
}

private HttpClient createHttpClient() {
return HttpClient.newBuilder()
.version(HttpClient.Version.HTTP_1_1)
.connectTimeout(Duration.ofSeconds(5))
.build();
}
< /code>
Der Dienst -> < /p>
@Service
public class TheService {
private final RestClient restClient;

public TheService(RestClient restClient) {
this.restClient = restClient;
}

public Programs getStuff() {
var programs = restClient.get()
.uri("/someuri")
.retrieve()
.body(Programs.class);
return programs;
}

}
< /code>
und POM -> < /p>


4.0.0

org.springframework.boot
spring-boot-starter-parent
3.4.4
  

com.example
demo
0.0.1-SNAPSHOT
demo
Demo project for Spring Boot














21



org.springframework.boot
spring-boot-starter-web


jakarta.xml.bind
jakarta.xml.bind-api


com.fasterxml.woodstox
woodstox-core
6.5.0


com.sun.xml.bind
jaxb-impl
runtime


org.springframework.boot
spring-boot-starter-test
test






org.springframework.boot
spring-boot-maven-plugin


org.apache.cxf
cxf-xjc-plugin
4.0.0


xjc
generate-sources

xsdtojava






${basedir}/src/main/spec/myschema.xsd
${basedir}/src/main/spec/binding.xjb
true









< /code>
Beim Aufrufen des Dienstes scheint die Antwort immer noch als UTF-8-Stream behandelt zu werden, da ich einen Fehler von ungültigem Byte 1 der 1-Byte-UTF-8-Sequenz erhalte.]-> < /p>
org.springframework.web.client.RestClientException:  Error while extracting response for type [generated.Programs] and content type [application/xml;charset=iso-8859-1]

at org.springframework.web.client.DefaultRestClient.readWithMessageConverters(DefaultRestClient.java:261)
at org.springframework.web.client.DefaultRestClient$DefaultResponseSpec.readBody(DefaultRestClient.java:814)
at org.springframework.web.client.DefaultRestClient$DefaultResponseSpec.lambda$body$0(DefaultRestClient.java:745)
at org.springframework.web.client.DefaultRestClient$DefaultRequestBodyUriSpec.exchangeInternal(DefaultRestClient.java:574)
at org.springframework.web.client.DefaultRestClient$DefaultRequestBodyUriSpec.exchange(DefaultRestClient.java:535)
at org.springframework.web.client.RestClient$RequestHeadersSpec.exchange(RestClient.java:677)
at org.springframework.web.client.DefaultRestClient$DefaultResponseSpec.executeAndExtract(DefaultRestClient.java:809)
at org.springframework.web.client.DefaultRestClient$DefaultResponseSpec.body(DefaultRestClient.java:745)
at com.example.demo.whatson.WhatsonService.getProduction(WhatsonService.java:24)
at com.example.demo.whatson.WhatsonServiceTest.testGetProduction(WhatsonServiceTest.java:18)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
Caused by: org.springframework.http.converter.HttpMessageNotReadableException: Could not unmarshal to [class generated.Programs]: jakarta.xml.bind.UnmarshalException
- with linked exception:
[com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Invalid byte 1 of 1-byte UTF-8 sequence.]
at org.springframework.http.converter.xml.AbstractXmlHttpMessageConverter.readInternal(AbstractXmlHttpMessageConverter.java:78)
at org.springframework.http.converter.AbstractHttpMessageConverter.read(AbstractHttpMessageConverter.java:198)
at org.springframework.web.client.DefaultRestClient.readWithMessageConverters(DefaultRestClient.java:244)
... 12 more
Caused by: jakarta.xml.bind.UnmarshalException
- with linked exception:
[com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Invalid byte 1 of 1-byte UTF-8 sequence.]
at jakarta.xml.bind.helpers.AbstractUnmarshallerImpl.createUnmarshalException(AbstractUnmarshallerImpl.java:294)
at org.glassfish.jaxb.runtime.v2.runtime.unmarshaller.UnmarshallerImpl.createUnmarshalException(UnmarshallerImpl.java:539)
at org.glassfish.jaxb.runtime.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:224)
at org.glassfish.jaxb.runtime.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:189)
at jakarta.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:134)
at jakarta.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:117)
at org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter.readFromSource(Jaxb2RootElementHttpMessageConverter.java:141)
at org.springframework.http.converter.xml.AbstractXmlHttpMessageConverter.readInternal(AbstractXmlHttpMessageConverter.java:72)
...  14 more
Caused by: com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Invalid byte 1 of 1-byte UTF-8 sequence.
at java.xml/com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.invalidByte(UTF8Reader.java:702)
at java.xml/com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.read(UTF8Reader.java:568)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.load(XMLEntityScanner.java:1699)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.skipChar(XMLEntityScanner.java:1375)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2762)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:605)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:114)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:542)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:889)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:825)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
at java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1224)
at java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:637)
at org.glassfish.jaxb.runtime.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:218)
... 19 more
Jede Hilfe zum Einrichten des Spring-Boots, um die ISO-Codierung zu akzeptieren, wird geschätzt.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post