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;
>         }

Attachment: signature.asc
Description: This is a digitally signed message part

Reply via email to