You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cxf.apache.org by jean pierre pelerin <jp...@yahoo.fr> on 2009/02/13 10:06:39 UTC

Re : problem using marshallerProperties for CData output

Hi, thanks for your answer.

   I try a simple program, and you're right. With ISO-8859-1 encoding, the escaper is called.
   But i try to add this entry for marshallerProperties in my cxf config :
   <entry>
         <key><value>jaxb.encoding</value></key>
         <value>ISO-8859-1</value>
   </entry>                                
    
    and it stay in UTF8 encoding, so the escaper is not called.
    I'm in PureXML/http in tomcat, is it the good properties to set ?

Many thanks.
JP



________________________________
From : Daniel Kulp :


This looks like a restriction/bug in JAXB, not really CXF.    If you use a 
marshaller to marshal an object to an OutputStream with encoding UTF-8, then 
the CharacterEscapeHandler never comes into play.  You can verify that by 
writing a simple program that marshals something to and outputstream.

I'm not sure which code paths in JAXB use the escape handlers and which ones 
don't.  Thus, I cannot really offer a workaround or anything at this point.  
You may be able to ask on the jaxb list for ideas.  At least they may be able 
to tell which of the marshal methods would actually us it, if any, and which 
conditions.   For example, may flipping from UTF-8 to something else would 
cause it to start being called.  (jaxb has a highly optimized UTF-8 encoder 
that maybe doesn't call the EscapeHandlers.  Possibly the other encoders do)

Dan


On Wed February 11 2009 4:37:19 am jean pierre pelerin wrote:
> Hi,
>
>     I'm trying to use a com.sun.xml.bind.characterEscapeHandler for JAXB
> customize escaping, in order to output CData text.
>
>     This is my cxf configuration :
>
>
> <?xml version="1.0" encoding="UTF-8"?>
> <beans xmlns="http://www.springframework.org/schema/beans"
>    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>    xmlns:jaxws="http://cxf.apache.org/jaxws"
>    xmlns:cxf="http://cxf.apache.org/core"
>    xsi:schemaLocation="http://www.springframework.org/schema/beans
> http://www.springframework.org/schema/beans/spring-beans.xsd
> http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
> http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd">
>
>    <import resource="classpath:META-INF/cxf/cxf.xml" />
>    <import resource="classpath:META-INF/cxf/cxf-extension-xml.xml" />
>    <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
>
>
>    <jaxws:endpoint id="wsuodb"
>       implementor="my.test.odbu.odbActionImpl"
>       wsdlLocation="WEB-INF/wsdl/odb.wsdl" address="/odb" >
>       <jaxws:serviceFactory>
>           <bean
> class="org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean"> <property
> name="dataBinding">
>                 <bean class="org.apache.cxf.jaxb.JAXBDataBinding">
>                   <property name="marshallerProperties">
>                      <map>
>                         <entry>
>                          
> <key><value>com.sun.xml.bind.characterEscapeHandler</value></key> <bean
> class="my.test.escape.CDataCEH"/> </entry>
>                      </map>
>                   </property>
>                </bean>
>              </property>
>           </bean>
>        </jaxws:serviceFactory>
>    </jaxws:endpoint>
>
> </beans>
>
> Here is a part of the wsdl :
>
>    <wsdl:binding name="ODB_XMLBinding" type="myODB:ODBActions">
>     <xformat:binding />
>     <wsdl:operation name="ODBAction">
>       <wsdl:input name="TrRequest" />
>       <wsdl:output name="TrResponse" />
>     </wsdl:operation>
>   </wsdl:binding>
>
>   <wsdl:service name="ODBU">
>     <wsdl:port binding="myODB:ODB_XMLBinding" name="actionsu">
>       <http-conf:server CacheControl="no-cache" />
>       <http:address location="http://localhost/odb/odb" />
>     </wsdl:port>
>   </wsdl:service>
>
>
>    There is no error when it start, and durring a request.
>    But there is somme trace in the escape Methode of
> my.test.escape.CDataCEH and It is nerver call.
>
>    When I replace  <bean class="my.test.escape.CDataCEH"/> by
> <value>something</value> there is an error during output, syaing that
> "something" is not an instance of "characterEscapeHandler". So that's ok,
> this configuration is use. Why the escape methode is never call ?
>
> Many thanks.
> JP
>
>
>      
> ___________________________________________________________________________
>_______________________ Ne pleurez pas si votre Webmail ferme ! Récupérez
> votre historique sur Yahoo! Mail !
> http://fr.docs.yahoo.com/mail/transfert_mails.html

-- 
Daniel Kulp
dkulp@apache.org
http://www.dankulp.com/blog



      __________________________________________________________________________________________________
Ne pleurez pas si votre Webmail ferme ! Récupérez votre historique sur Yahoo! Mail ! http://fr.docs.yahoo.com/mail/transfert_mails.html