Hi, see https://github.com/apache/cxf/blob/main/core/src/main/java/org/apache/cxf/common/jaxb/JAXBUtils.java#L1105
vs https://github.com/apache/cxf/blob/cxf-3.5.5/core/src/main/java/org/apache/cxf/common/jaxb/JAXBUtils.java#L1104 I think, it should disappear after upgrading to cxf 4 ;) (wip atm, waiting for the cxf guys to fix one tck regression). Gruß Richard Am Mittwoch, dem 30.08.2023 um 13:10 +0200 schrieb tomee-u...@web.de: > Hi, > > by upgrading to TomEE 9.1.0 we have a lot of message exception stack > about a missing property: jakarta.xml.bind.PropertyException: name: > com.sun.xml.bind.characterEscapeHandler value: null. [1] > > By using the debugger I come to following conlusion: > > In the lib org.apache.cxf.common.jaxb (org.apache.tomee:cxf- > shade:9.1.0) the method > org.apache.cxf.common.jaxb.DataWriterImpl.createMarshaller will be > invoked which creates a marshaller from the context which is on my > machine: jar:file:/opt/tomee/lib/jaxb-runtime- > 3.0.2.jar!/org/glassfish/jaxb/runtime/v2/runtime/JAXBContextImpl.clas > s. > > Then the JAXBUtils.setEscapeHandler will be invoked > databinding.applyEscapeHandler(!noEscape, eh -> > JAXBUtils.setEscapeHandler(marshaller, eh)); which is in the same > jar. > > The invoked methodd adds a com.sun.xml package namespace... (which I > assume is wrong). [2] > > After this in the lib org.glassfish.jaxb:jaxb-runtime:3.0.2 the > method > org.glassfish.jaxb.runtime.v2.runtime.MarshallerImpl.setProperty will > be invoked. > The constant name is protected static final String ENCODING_HANDLER = > "org.glassfish.jaxb.characterEscapeHandler";. > My assumption is that here a match should happen. [3] > > At the end it runs into the method > jakarta.xml.bind.helpers.AbstractMarshallerImpl.setProperty of > org.apache.tomee:jakartaee-api:9.1.1. The end of the process the > PropertyException will be thrown (throw new PropertyException(name, > value);) > > Can you confirm that this is a bug? > If the name would be correct a null value is not an correct value, so > another exception will be thrown where I am not sure if I have any > influence on it ( databinding.applyEscapeHandler(!noEscape, eh -> > JAXBUtils.setEscapeHandler(marshaller, eh));).[2][3] > > Thanks, > Markus > > > > [1] > 20-Jul-2023 11:22:16.142 INFO [http-nio-8080-exec-1] > org.apache.cxf.jaxb.io.DataReaderImpl.createUnmarshaller > PropertyException setting Marshaller properties > jakarta.xml.bind.PropertyException: name: > org.glassfish.jaxb.ObjectFactory value: > jakarta.xml.bind.JAXBElementFactory@6bc54824 > at > jakarta.xml.bind.helpers.AbstractUnmarshallerImpl.setProperty(Abstrac > tUnmarshallerImpl.java:327) > at > org.glassfish.jaxb.runtime.v2.runtime.unmarshaller.UnmarshallerImpl.s > etProperty(UnmarshallerImpl.java:474) > at > org.apache.cxf.jaxb.io.DataReaderImpl.createUnmarshaller(DataReaderIm > pl.java:123) > at > org.apache.cxf.jaxb.io.DataReaderImpl.read(DataReaderImpl.java:166) > at > org.apache.cxf.wsdl.interceptors.DocLiteralInInterceptor.handleMessag > e(DocLiteralInInterceptor.java:109) > at > org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseIntercept > orChain.java:307) > at > org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainIniti > ationObserver.java:121) > at > org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(Abstract > HTTPDestination.java:265) > at > org.apache.openejb.server.cxf.CxfWsContainer.onMessage(CxfWsContainer > .java:85) > at > org.apache.openejb.server.webservices.WsServlet.service(WsServlet.jav > a:72) > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl > icationFilterChain.java:223) > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF > ilterChain.java:158) > at > org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53 > ) > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl > icationFilterChain.java:185) > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF > ilterChain.java:158) > at > org.apache.openejb.server.httpd.EEFilter.doFilter(EEFilter.java:67) > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl > icationFilterChain.java:185) > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF > ilterChain.java:158) > at > io.smallrye.metrics.jaxrs.JaxRsMetricsServletFilter.doFilter(JaxRsMet > ricsServletFilter.java:53) > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl > icationFilterChain.java:185) > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF > ilterChain.java:158) > at > org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperV > alve.java:197) > at > org.apache.catalina.core.StandardContextValve.invoke(StandardContextV > alve.java:97) > at > org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:45) > at > org.apache.catalina.authenticator.AuthenticatorBase.invoke(Authentica > torBase.java:542) > at > org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.j > ava:119) > at > org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.j > ava:92) > at > org.apache.tomee.catalina.OpenEJBSecurityListener$RequestCapturer.inv > oke(OpenEJBSecurityListener.java:97) > at > org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAcce > ssLogValve.java:690) > at > org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineVal > ve.java:78) > at > org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.jav > a:356) > at > org.apache.coyote.http11.Http11Processor.service(Http11Processor.java > :399) > at > org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLig > ht.java:65) > at > org.apache.coyote.AbstractProtocol$ConnectionHandler.process(Abstract > Protocol.java:870) > at > org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpo > int.java:1762) > at > org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBas > e.java:49) > at > org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoo > lExecutor.java:1191) > at > org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPo > olExecutor.java:659) > at > org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskTh > read.java:61) > at java.base/java.lang.Thread.run(Thread.java:833) > 20-Jul-2023 11:22:16.401 INFO [http-nio-8080-exec-1] > org.apache.cxf.common.jaxb.JAXBUtils.setEscapeHandler Failed to set > MinumEscapeHandler to jaxb marshaller > jakarta.xml.bind.PropertyException: name: > com.sun.xml.bind.characterEscapeHandler value: null > at > jakarta.xml.bind.helpers.AbstractMarshallerImpl.setProperty(AbstractM > arshallerImpl.java:343) > at > org.glassfish.jaxb.runtime.v2.runtime.MarshallerImpl.setProperty(Mars > hallerImpl.java:499) > at > org.apache.cxf.common.jaxb.JAXBUtils.setEscapeHandler(JAXBUtils.java: > 1135) > at > org.apache.cxf.jaxb.io.DataWriterImpl.lambda$createMarshaller$0(DataW > riterImpl.java:140) > at > org.apache.cxf.jaxb.JAXBDataBinding.applyEscapeHandler(JAXBDataBindin > g.java:279) > at > org.apache.cxf.jaxb.io.DataWriterImpl.createMarshaller(DataWriterImpl > .java:140) > at > org.apache.cxf.jaxb.io.DataWriterImpl.write(DataWriterImpl.java:239) > at > org.apache.cxf.interceptor.AbstractOutDatabindingInterceptor.writePar > ts(AbstractOutDatabindingInterceptor.java:137) > at > org.apache.cxf.wsdl.interceptors.BareOutInterceptor.handleMessage(Bar > eOutInterceptor.java:68) > at > org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseIntercept > orChain.java:307) > at > org.apache.cxf.interceptor.OutgoingChainInterceptor.handleMessage(Out > goingChainInterceptor.java:90) > at > org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseIntercept > orChain.java:307) > at > org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainIniti > ationObserver.java:121) > at > org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(Abstract > HTTPDestination.java:265) > at > org.apache.openejb.server.cxf.CxfWsContainer.onMessage(CxfWsContainer > .java:85) > at > org.apache.openejb.server.webservices.WsServlet.service(WsServlet.jav > a:72) > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl > icationFilterChain.java:223) > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF > ilterChain.java:158) > at > org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53 > ) > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl > icationFilterChain.java:185) > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF > ilterChain.java:158) > at > org.apache.openejb.server.httpd.EEFilter.doFilter(EEFilter.java:67) > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl > icationFilterChain.java:185) > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF > ilterChain.java:158) > at > io.smallrye.metrics.jaxrs.JaxRsMetricsServletFilter.doFilter(JaxRsMet > ricsServletFilter.java:53) > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl > icationFilterChain.java:185) > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF > ilterChain.java:158) > at > org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperV > alve.java:197) > at > org.apache.catalina.core.StandardContextValve.invoke(StandardContextV > alve.java:97) > at > org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:45) > at > org.apache.catalina.authenticator.AuthenticatorBase.invoke(Authentica > torBase.java:542) > at > org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.j > ava:119) > at > org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.j > ava:92) > at > org.apache.tomee.catalina.OpenEJBSecurityListener$RequestCapturer.inv > oke(OpenEJBSecurityListener.java:97) > at > org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAcce > ssLogValve.java:690) > at > org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineVal > ve.java:78) > at > org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.jav > a:356) > at > org.apache.coyote.http11.Http11Processor.service(Http11Processor.java > :399) > at > org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLig > ht.java:65) > at > org.apache.coyote.AbstractProtocol$ConnectionHandler.process(Abstract > Protocol.java:870) > at > org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpo > int.java:1762) > at > org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBas > e.java:49) > at > org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoo > lExecutor.java:1191) > at > org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPo > olExecutor.java:659) > at > org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskTh > read.java:61) > at java.base/java.lang.Thread.run(Thread.java:833) > > [2] > public static void > org.apache.cxf.common.jaxb.JAXBUtils.setEscapeHandler(Marshaller > marshaller, Object escapeHandler) { > try { > String postFix = getPostfix(marshaller.getClass()); > if (postFix != null && escapeHandler != null) { > marshaller.setProperty("com.sun.xml" + postFix + > ".bind.characterEscapeHandler", escapeHandler); > } > } catch (PropertyException e) { > LOG.log(Level.INFO, "Failed to set MinumEscapeHandler to > jaxb marshaller", e); > } > } > > > [3] > if( ENCODING_HANDLER.equals(name) || > ENCODING_HANDLER2.equals(name)) { > if(!(value instanceof CharacterEscapeHandler)) > throw new PropertyException( > Messages.MUST_BE_X.format( > name, > CharacterEscapeHandler.class.getName(), > value.getClass().getName() ) ); > escapeHandler = (CharacterEscapeHandler)value; > return; > }
signature.asc
Description: This is a digitally signed message part