spring boot版本2.4.4
java版本15
@Bean
public WebClient webClient() {
return WebClient.builder().baseUrl(BASE_URL)
.defaultHeaders(header -> header.setBasicAuth("test",
"testpwd"))
.clientConnector(new ReactorClientHttpConnector(HttpClient.newConnection()))
.exchangeStrategies(ExchangeStrategies.builder().codecs(configurer -> {
configurer.defaultCodecs().jaxb2Encoder(new Jaxb2XmlEncoder());
configurer.defaultCodecs().jaxb2Decoder(new Jaxb2XmlDecoder());
}).build()).build();
}
使用springboot2.4.4webclient并尝试使用带有xml响应的服务。
public Mono<ServerResponse> retrieveServices() {
// Headers can be passed here or while building the client
Mono<DirectoryOfService> serviceMono = webClient
.get().uri("/api/v1/test/services")
.header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_XML_VALUE)
.accept(MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML)
.retrieve().bodyToMono(DirectoryOfService.class);
}
error:-
org.springframework.core.codec.CodecException: Could not create JAXBContext for class [class com.test.model.DirectoryOfService]: Implementation of JAXB-API has not been found on module path or classpath.; nested exception is javax.xml.bind.JAXBException: Implementation of JAXB-API has not been found on module path or classpath.
- with linked exception:
[java.lang.ClassNotFoundException: com.sun.xml.internal.bind.v2.ContextFactory]
at org.springframework.http.codec.xml.JaxbContextContainer.lambda$getJaxbContext$0(JaxbContextContainer.java:58) ~[spring-web-5.3.5.jar:5.3.5]
Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException:
Error has been observed at the following site(s):
|_ checkpoint ⇢ Body from GET https://test.com/api/v1/services [DefaultClientResponse]
|_ checkpoint ⇢ HTTP GET "/api/v1/services" [ExceptionHandlingWebHandler]
Stack trace:
at org.springframework.http.codec.xml.JaxbContextContainer.lambda$getJaxbContext$0(JaxbContextContainer.java:58) ~[spring-web-5.3.5.jar:5.3.5]
at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1708) ~[na:na]
at org.springframework.http.codec.xml.JaxbContextContainer.getJaxbContext(JaxbContextContainer.java:52) ~[spring-web-5.3.5.jar:5.3.5]
at org.springframework.http.codec.xml.JaxbContextContainer.createUnmarshaller(JaxbContextContainer.java:47) ~[spring-web-5.3.5.jar:5.3.5]
at org.springframework.http.codec.xml.Jaxb2XmlDecoder.initUnmarshaller(Jaxb2XmlDecoder.java:235) ~[spring-web-5.3.5.jar:5.3.5]
at org.springframework.http.codec.xml.Jaxb2XmlDecoder.unmarshal(Jaxb2XmlDecoder.java:216) ~[spring-web-5.3.5.jar:5.3.5]
at org.springframework.http.codec.xml.Jaxb2XmlDecoder.decode(Jaxb2XmlDecoder.java:195) ~[spring-web-5.3.5.jar:5.3.5]
at org.springframework.http.codec.xml.Jaxb2XmlDecoder.lambda$decodeToMono$2(Jaxb2XmlDecoder.java:183) ~[spring-web-5.3.5.jar:5.3.5]
at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:113) ~[reactor-core-3.4.4.jar:3.4.4]
at reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.onNext(FluxContextWrite.java:107) ~[reactor-core-3.4.4.jar:3.4.4]
at reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber.onNext(FluxMapFuseable.java:295) ~[reactor-core-3.4.4.jar:3.4.4]
at reactor.core.publisher.FluxFilterFuseable$FilterFuseableConditionalSubscriber.onNext(FluxFilterFuseable.java:337) ~[reactor-core-3.4.4.jar:3.4.4]
at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1815) ~[reactor-core-3.4.4.jar:3.4.4]
at reactor.core.publisher.MonoCollect$CollectSubscriber.onComplete(MonoCollect.java:159) ~[reactor-core-3.4.4.jar:3.4.4]
at reactor.core.publisher.FluxMap$MapSubscriber.onComplete(FluxMap.java:142) ~[reactor-core-3.4.4.jar:3.4.4]
at reactor.core.publisher.FluxPeek$PeekSubscriber.onComplete(FluxPeek.java:259) ~[reactor-core-3.4.4.jar:3.4.4]
at reactor.core.publisher.FluxMap$MapSubscriber.onComplete(FluxMap.java:142) ~[reactor-core-3.4.4.jar:3.4.4]
at reactor.netty.channel.FluxReceive.onInboundComplete(FluxReceive.java:401) ~[reactor-netty-core-1.0.5.jar:1.0.5]
at reactor.netty.channel.ChannelOperations.onInboundComplete(ChannelOperations.java:416) ~[reactor-netty-core-1.0.5.jar:1.0.5]
at reactor.netty.channel.ChannelOperations.terminate(ChannelOperations.java:470) ~[reactor-netty-core-1.0.5.jar:1.0.5]
at reactor.netty.http.client.HttpClientOperations.onInboundNext(HttpClientOperations.java:685) ~[reactor-netty-http-1.0.5.jar:1.0.5]
at reactor.netty.channel.ChannelOperationsHandler.channelRead(ChannelOperationsHandler.java:94) ~[reactor-netty-core-1.0.5.jar:1.0.5]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[netty-transport-4.1.60.Final.jar:4.1.60.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[netty-transport-4.1.60.Final.jar:4.1.60.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[netty-transport-4.1.60.Final.jar:4.1.60.Final]
at io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:436) ~[netty-transport-4.1.60.Final.jar:4.1.60.Final]
at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:324) ~[netty-codec-4.1.60.Final.jar:4.1.60.Final]
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:296) ~[netty-codec-4.1.60.Final.jar:4.1.60.Final]
at io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:251) ~[netty-transport-4.1.60.Final.jar:4.1.60.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[netty-transport-4.1.60.Final.jar:4.1.60.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[netty-transport-4.1.60.Final.jar:4.1.60.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[netty-transport-4.1.60.Final.jar:4.1.60.Final]
at io.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:1534) ~[netty-handler-4.1.60.Final.jar:4.1.60.Final]
at io.netty.handler.ssl.SslHandler.decodeJdkCompatible(SslHandler.java:1283) ~[netty-handler-4.1.60.Final.jar:4.1.60.Final]
at io.netty.handler.ssl.SslHandler.decode(SslHandler.java:1330) ~[netty-handler-4.1.60.Final.jar:4.1.60.Final]
at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:508) ~[netty-codec-4.1.60.Final.jar:4.1.60.Final]
at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:447) ~[netty-codec-4.1.60.Final.jar:4.1.60.Final]
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:276) ~[netty-codec-4.1.60.Final.jar:4.1.60.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[netty-transport-4.1.60.Final.jar:4.1.60.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[netty-transport-4.1.60.Final.jar:4.1.60.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[netty-transport-4.1.60.Final.jar:4.1.60.Final]
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) ~[netty-transport-4.1.60.Final.jar:4.1.60.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[netty-transport-4.1.60.Final.jar:4.1.60.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[netty-transport-4.1.60.Final.jar:4.1.60.Final]
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) ~[netty-transport-4.1.60.Final.jar:4.1.60.Final]
at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) ~[netty-transport-4.1.60.Final.jar:4.1.60.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:719) ~[netty-transport-4.1.60.Final.jar:4.1.60.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:655) ~[netty-transport-4.1.60.Final.jar:4.1.60.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:581) ~[netty-transport-4.1.60.Final.jar:4.1.60.Final]
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493) ~[netty-transport-4.1.60.Final.jar:4.1.60.Final]
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) ~[netty-common-4.1.60.Final.jar:4.1.60.Final]
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.60.Final.jar:4.1.60.Final]
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.60.Final.jar:4.1.60.Final]
at java.base/java.lang.Thread.run(Thread.java:832) ~[na:na]
Caused by: javax.xml.bind.JAXBException: Implementation of JAXB-API has not been found on module path or classpath.
at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:278) ~[jaxb-api-2.3.1.jar:2.3.0]
at javax.xml.bind.ContextFinder.find(ContextFinder.java:421) ~[jaxb-api-2.3.1.jar:2.3.0]
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:721) ~[jaxb-api-2.3.1.jar:2.3.0]
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:662) ~[jaxb-api-2.3.1.jar:2.3.0]
at org.springframework.http.codec.xml.JaxbContextContainer.lambda$getJaxbContext$0(JaxbContextContainer.java:54) ~[spring-web-5.3.5.jar:5.3.5]
at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1708) ~[na:na]
at org.springframework.http.codec.xml.JaxbContextContainer.getJaxbContext(JaxbContextContainer.java:52) ~[spring-web-5.3.5.jar:5.3.5]
at org.springframework.http.codec.xml.JaxbContextContainer.createUnmarshaller(JaxbContextContainer.java:47) ~[spring-web-5.3.5.jar:5.3.5]
at org.springframework.http.codec.xml.Jaxb2XmlDecoder.initUnmarshaller(Jaxb2XmlDecoder.java:235) ~[spring-web-5.3.5.jar:5.3.5]
at org.springframework.http.codec.xml.Jaxb2XmlDecoder.unmarshal(Jaxb2XmlDecoder.java:216) ~[spring-web-5.3.5.jar:5.3.5]
at org.springframework.http.codec.xml.Jaxb2XmlDecoder.decode(Jaxb2XmlDecoder.java:195) ~[spring-web-5.3.5.jar:5.3.5]
at org.springframework.http.codec.xml.Jaxb2XmlDecoder.lambda$decodeToMono$2(Jaxb2XmlDecoder.java:183) ~[spring-web-5.3.5.jar:5.3.5]
at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:113) ~[reactor-core-3.4.4.jar:3.4.4]
at reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.onNext(FluxContextWrite.java:107) ~[reactor-core-3.4.4.jar:3.4.4]
at reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber.onNext(FluxMapFuseable.java:295) ~[reactor-core-3.4.4.jar:3.4.4]
at reactor.core.publisher.FluxFilterFuseable$FilterFuseableConditionalSubscriber.onNext(FluxFilterFuseable.java:337) ~[reactor-core-3.4.4.jar:3.4.4]
at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1815) ~[reactor-core-3.4.4.jar:3.4.4]
at reactor.core.publisher.MonoCollect$CollectSubscriber.onComplete(MonoCollect.java:159) ~[reactor-core-3.4.4.jar:3.4.4]
at reactor.core.publisher.FluxMap$MapSubscriber.onComplete(FluxMap.java:142) ~[reactor-core-3.4.4.jar:3.4.4]
at reactor.core.publisher.FluxPeek$PeekSubscriber.onComplete(FluxPeek.java:259) ~[reactor-core-3.4.4.jar:3.4.4]
at reactor.core.publisher.FluxMap$MapSubscriber.onComplete(FluxMap.java:142) ~[reactor-core-3.4.4.jar:3.4.4]
at reactor.netty.channel.FluxReceive.onInboundComplete(FluxReceive.java:401) ~[reactor-netty-core-1.0.5.jar:1.0.5]
at reactor.netty.channel.ChannelOperations.onInboundComplete(ChannelOperations.java:416) ~[reactor-netty-core-1.0.5.jar:1.0.5]
at reactor.netty.channel.ChannelOperations.terminate(ChannelOperations.java:470) ~[reactor-netty-core-1.0.5.jar:1.0.5]
at reactor.netty.http.client.HttpClientOperations.onInboundNext(HttpClientOperations.java:685) ~[reactor-netty-http-1.0.5.jar:1.0.5]
at reactor.netty.channel.ChannelOperationsHandler.channelRead(ChannelOperationsHandler.java:94) ~[reactor-netty-core-1.0.5.jar:1.0.5]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[netty-transport-4.1.60.Final.jar:4.1.60.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[netty-transport-4.1.60.Final.jar:4.1.60.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[netty-transport-4.1.60.Final.jar:4.1.60.Final]
at io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:436) ~[netty-transport-4.1.60.Final.jar:4.1.60.Final]
at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:324) ~[netty-codec-4.1.60.Final.jar:4.1.60.Final]
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:296) ~[netty-codec-4.1.60.Final.jar:4.1.60.Final]
at io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:251) ~[netty-transport-4.1.60.Final.jar:4.1.60.Final]
格雷德尔先生,
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-webflux'
implementation group: 'com.sun.xml.bind', name: 'jaxb-impl', version: '3.0.0'
implementation group: 'com.sun.xml.bind', name: 'jaxb-core', version: '3.0.0'
implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.3.1'
}
删除com.sun.xml.bind并添加glassfish后,出现以下错误。
实现“org.glassfish”。jaxb:jaxb-runtime:2.3.1'
错误:
org.springframework.core.codec.CodecException: Could not create JAXBContext for class [class com.test.model.DirectoryOfService]: 10 counts of IllegalAnnotationExceptions; nested exception is com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 10 counts of IllegalAnnotationExceptions
Class has two properties of the same name "section"
this problem is related to the following location:
at public com.test.model.Section com.test.model.DirectoryOfService.getSection()
at com.test.model.DirectoryOfService
this problem is related to the following location:
at private com.test.model.Section com.test.model.DirectoryOfService.section
at com.test.model.DirectoryOfService
Class has two properties of the same name "name"
this problem is related to the following location:
at public java.lang.String com.test.model.Section.getName()
at com.test.model.Section
at private com.test.model.Section com.test.model.DirectoryOfService.section
at com.test.model.DirectoryOfService
this problem is related to the following location:
at private java.lang.String com.test.model.Section.name
at com.test.model.Section
at private com.test.model.Section com.test.model.DirectoryOfService.section
at com.test.model.DirectoryOfService
Class has two properties of the same name "test"
this problem is related to the following location:
at public java.util.List com.test.model.Section.getTest()
at com.test.model.Section
at private com.test.model.Section com.test.model.DirectoryOfService.section
at com.test.model.DirectoryOfService
this problem is related to the following location:
at private java.util.List com.test.model.Section.test
at com.test.model.Section
at private com.test.model.Section com.test.model.DirectoryOfService.section
at com.test.model.DirectoryOfService
Class has two properties of the same name "code"
this problem is related to the following location:
at public java.lang.String com.test.model.Test.getCode()
at com.test.model.Test
at private java.util.List com.test.model.Section.test
at com.test.model.Section
at private com.test.model.Section com.test.model.DirectoryOfService.section
at com.test.model.DirectoryOfService
this problem is related to the following location:
at private java.lang.String com.test.model.Test.code
at com.test.model.Test
at private java.util.List com.test.model.Section.test
at com.test.model.Section
at private com.test.model.Section com.test.model.DirectoryOfService.section
at com.test.model.DirectoryOfService
Class has two properties of the same name "currency"
this problem is related to the following location:
at public java.lang.String com.test.model.Test.getCurrency()
at com.test.model.Test
at private java.util.List com.test.model.Section.test
at com.test.model.Section
at private com.test.model.Section com.test.model.DirectoryOfService.section
at com.test.model.DirectoryOfService
this problem is related to the following location:
at private java.lang.String com.test.model.Test.currency
at com.test.model.Test
at private java.util.List com.test.model.Section.test
at com.test.model.Section
at private com.test.model.Section com.test.model.DirectoryOfService.section
at com.test.model.DirectoryOfService
Class has two properties of the same name "includes"
this problem is related to the following location:
at public java.lang.String com.test.model.Test.getIncludes()
at com.test.model.Test
at private java.util.List com.test.model.Section.test
at com.test.model.Section
at private com.test.model.Section com.test.model.DirectoryOfService.section
at com.test.model.DirectoryOfService
this problem is related to the following location:
at private java.lang.String com.test.model.Test.includes
at com.test.model.Test
at private java.util.List com.test.model.Section.test
at com.test.model.Section
at private com.test.model.Section com.test.model.DirectoryOfService.section
at com.test.model.DirectoryOfService
Class has two properties of the same name "name"
this problem is related to the following location:
at public java.lang.String com.test.model.Test.getName()
at com.test.model.Test
at private java.util.List com.test.model.Section.test
at com.test.model.Section
at private com.test.model.Section com.test.model.DirectoryOfService.section
at com.test.model.DirectoryOfService
this problem is related to the following location:
at private java.lang.String com.test.model.Test.name
at com.test.model.Test
at private java.util.List com.test.model.Section.test
at com.test.model.Section
at private com.test.model.Section com.test.model.DirectoryOfService.section
at com.test.model.DirectoryOfService
Class has two properties of the same name "nonDiscountable"
this problem is related to the following location:
at public boolean com.test.model.Test.isNonDiscountable()
at com.test.model.Test
at private java.util.List com.test.model.Section.test
at com.test.model.Section
at private com.test.model.Section com.test.model.DirectoryOfService.section
at com.test.model.DirectoryOfService
this problem is related to the following location:
at private boolean com.test.model.Test.nonDiscountable
at com.test.model.Test
at private java.util.List com.test.model.Section.test
at com.test.model.Section
at private com.test.model.Section com.test.model.DirectoryOfService.section
at com.test.model.DirectoryOfService
Class has two properties of the same name "replicate"
this problem is related to the following location:
at public int com.test.model.Test.getReplicate()
at com.test.model.Test
at private java.util.List com.test.model.Section.test
at com.test.model.Section
at private com.test.model.Section com.test.model.DirectoryOfService.section
at com.test.model.DirectoryOfService
this problem is related to the following location:
at private int com.test.model.Test.replicate
at com.test.model.Test
at private java.util.List com.test.model.Section.test
at com.test.model.Section
at private com.test.model.Section com.test.model.DirectoryOfService.section
at com.test.model.DirectoryOfService
Class has two properties of the same name "validFrom"
this problem is related to the following location:
at public java.util.Date com.test.model.Test.getValidFrom()
at com.test.model.Test
at private java.util.List com.test.model.Section.test
at com.test.model.Section
at private com.test.model.Section com.test.model.DirectoryOfService.section
at com.test.model.DirectoryOfService
this problem is related to the following location:
at private java.util.Date com.test.model.Test.validFrom
at com.test.model.Test
at private java.util.List com.test.model.Section.test
at com.test.model.Section
at private com.test.model.Section com.test.model.DirectoryOfService.section
at com.test.model.DirectoryOfService
样本响应文件,
<?xml version='1.0' encoding='UTF-8'?>
<DirectoryOfService>
<Section Name="Directory">
<Test>
<Name>Mike</Name>
<Code>USA</Code>
<Replicate>0</Replicate>
<ValidFrom>2016-06-30</ValidFrom>
<Includes>Test Includes</Includes>
<Currency>None</Currency>
<NonDiscountable>false</NonDiscountable>
</Test>
<Test>
<Name>Bingo</Name>
<Code>USA</Code>
<Replicate>0</Replicate>
<ValidFrom>2016-06-30</ValidFrom>
<Includes>Test Includes</Includes>
<Currency>None</Currency>
<NonDiscountable>false</NonDiscountable>
</Test>
</Section>
</DirectoryOfService>
模型类,
服务类目录,
import javax.xml.bind.annotation.XmlElementRef;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name="DirectoryOfService")
public class DirectoryOfService {
@XmlElementRef(name = "Section")
private Section section;
public Section getSection() {
return section;
}
public void setSection(Section section) {
this.section = section;
}
}
截面计算,
@XmlRootElement(name="Section")
public class Section {
@XmlElementRef(name = "Test")
private List<Test> test;
@XmlAttribute(name = "Name")
private String name;
//public String text;
public List<Test> getTest() {
return test;
}
public void setTest(List<Test> test) {
this.test = test;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Test class,
@XmlRootElement(name = "Test")
public class Test {
@XmlElement(name = "Name")
private String name;
@XmlElement(name = "Code")
private String code;
@XmlElement(name = "Replicate")
private int replicate;
@XmlElement(name = "ValidFrom")
private Date validFrom;
@XmlElement(name = "Includes")
private String includes;
@XmlElement(name = "Currency")
private String currency;
@XmlElement(name = "NonDiscountable")
private boolean nonDiscountable;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public int getReplicate() {
return replicate;
}
public void setReplicate(int replicate) {
this.replicate = replicate;
}
public Date getValidFrom() {
return validFrom;
}
public void setValidFrom(Date validFrom) {
this.validFrom = validFrom;
}
public String getIncludes() {
return includes;
}
public void setIncludes(String includes) {
this.includes = includes;
}
public String getCurrency() {
return currency;
}
public void setCurrency(String currency) {
this.currency = currency;
}
public boolean isNonDiscountable() {
return nonDiscountable;
}
public void setNonDiscountable(boolean nonDiscountable) {
this.nonDiscountable = nonDiscountable;
}
}
1条答案
按热度按时间o3imoua41#
尽管您测试了类似的方法,但请考虑回顾一下github的问题,尤其是最后的评论,我认为这会有所帮助。
也要确保有适当版本的jaxb运行时。在以前的问题中,spring似乎无法在类路径中找到合适的jaxb实现。对于
jaxb-api
你在相依关系中指出的,2.3.1
,请删除与相关的依赖项com.sun.xml.bind
包括以下内容:最近的
org.glassfish.jaxb
jaxb-runtime
比如说,版本3.0.0
,取决于org.glassfish.jaxb
jaxb-core
这又取决于jakarta.xml.bind
jakarta.xml.bind-api
基于java的Eclipse基金会JAXB实现。如果你想用org.glassfish.jaxb:jaxb-runtime:3.0.0
包括以下依赖项:而不是之前定义的jaxb api:
因此,请更改您的进口并仔细测试,我从未用Spring测试过
WebClient
以及相关的jaxb编解码器。关于
section
重复,jaxb似乎试图序列化pojo的字段和方法定义的属性。要避免此问题,请使用@XmlAccessorType
注解。例如: