You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by Davanum Srinivas <da...@gmail.com> on 2004/10/15 16:45:25 UTC

Re: RE : better castor serializer

Checked in...sorry for the delay.

thanks,
dims


On Wed, 15 Sep 2004 12:51:40 -0400, nisol.fabien@hydro.qc.ca
<ni...@hydro.qc.ca> wrote:
>  
> 
> Done... :) 
> 
> http://issues.apache.org/jira/browse/AXIS-1556?page=history 
> 
>  
> 
> Fabien Nisol 
> 
> Conseiller 
> Grand Montréal 
> CGI 
> Tél: +1 514 289 2211 (4611) 
> 
>   
>  
>  
> 
> -----Message d'origine----- 
> De : Davanum Srinivas [mailto:davanum@gmail.com] 
> Envoyé : 14 septembre, 2004 00:51 
> À : axis-dev@ws.apache.org 
> Objet : Re: better castor serializer 
>  
> 
> Can you please create a JIRA bug and upload the sources. 
> (http://issues.apache.org/jira/) 
> 
> thanks, 
> dims 
> 
> PS: Am travelling with limited access to review/check-in stuff and dont'
> want this to fall thru the cracks. 
> 
> ----- Original Message ----- 
> From: nisol.fabien@hydro.qc.ca <ni...@hydro.qc.ca> 
> Date: Fri, 10 Sep 2004 12:52:07 -0400 
> Subject: better castor serializer 
> To: axis-dev@ws.apache.org 
> 
>   
>   
> Hello fellow developers ... 
>   
> There is a slight problems using castor serializer in its current form. 
>   
> The marshaller is totaly decoupled from the soap context, and thus don't
> know current enveloppe namespace aliases. This leads to the fact that castor
> does not use correct aliases ... 
> 
>   
> here is modified code, using a ContentHandler instead of a StringWriter
> serialization : 
>   
>   
> Hope It'll help :) 
>   
> 1) the Serializer: 
>   
> /* 
>  * The Apache Software License, Version 1.1 
>  * 
>  * 
>  * Copyright (c) 2002 The Apache Software Foundation.  All rights 
>  * reserved. 
>  * 
>  * Redistribution and use in source and binary forms, with or without 
>  * modification, are permitted provided that the following conditions 
>  * are met: 
>  * 
>  * 1. Redistributions of source code must retain the above copyright 
>  *    notice, this list of conditions and the following disclaimer. 
>  * 
>  * 2. Redistributions in binary form must reproduce the above copyright 
>  *    notice, this list of conditions and the following disclaimer in 
>  *    the documentation and/or other materials provided with the 
>  *    distribution. 
>  * 
>  * 3. The end-user documentation included with the redistribution, 
>  *    if any, must include the following acknowledgment: 
>  *       "This product includes software developed by the 
>  *        Apache Software Foundation (http://www.apache.org/)." 
>  *    Alternately, this acknowledgment may appear in the software itself, 
>  *    if and wherever such third-party acknowledgments normally appear. 
>  * 
>  * 4. The names "Axis" and "Apache Software Foundation" must 
>  *    not be used to endorse or promote products derived from this 
>  *    software without prior written permission. For written 
>  *    permission, please contact apache@apache.org. 
>  * 
>  * 5. Products derived from this software may not be called "Apache", 
>  *    nor may "Apache" appear in their name, without prior written 
>  *    permission of the Apache Software Foundation. 
>  * 
>  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED 
>  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 
>  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
>  * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR 
>  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
>  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
>  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
>  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 
>  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 
>  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 
>  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 
>  * SUCH DAMAGE. 
>  * ==================================================================== 
>  * 
>  * This software consists of voluntary contributions made by many 
>  * individuals on behalf of the Apache Software Foundation.  For more 
>  * information on the Apache Software Foundation, please see 
>  * <http://www.apache.org/>. 
>  */ 
>   
> package org.apache.axis.encoding.ser.castor; 
>   
> import org.apache.axis.Constants; 
> import org.apache.axis.components.logger.LogFactory; 
> import org.apache.axis.encoding.SerializationContext; 
> import org.apache.axis.encoding.Serializer; 
> import org.apache.axis.utils.Messages; 
> import org.apache.axis.wsdl.fromJava.Types; 
> import org.apache.commons.logging.Log; 
> import org.exolab.castor.xml.MarshalException; 
> import org.exolab.castor.xml.Marshaller; 
> import org.exolab.castor.xml.ValidationException; 
> import org.w3c.dom.Element; 
> import org.xml.sax.Attributes; 
>   
> import javax.xml.namespace.QName; 
> import java.io.IOException; 
> import java.io.StringWriter; 
> import java.util.Iterator; 
> import org.apache.axis.message.MessageElement; 
>   
> /** 
>  * Castor serializer 
>  * @author Olivier Brand (olivier.brand@vodafone.com) 
>  * @author Steve Loughran 
>  * @version 1.0 
>  * 
>  */ 
> public class CastorSerializer implements Serializer { 
>   
>     protected static Log log = 
>             LogFactory.getLog(CastorSerializer.class.getName()); 
>   
>     /** 
>      * Serialize a Castor object. 
>      * @param name 
>      * @param attributes 
>      * @param value     this must be a castor object for marshalling 
>      * @param context 
>      * @throws IOException for XML schema noncompliance, bad object type,
> and any IO 
>      * trouble. 
>      */ 
>     public void serialize( 
>             QName name, 
>             Attributes attributes, 
>             Object value, 
>             SerializationContext context) 
>             throws IOException { 
>                 
>   
>         try { 
>   
>             AxisContentHandler hand=new AxisContentHandler(context); 
>             Marshaller marshaller =new Marshaller(hand); 
>   
>             // Don't include the DOCTYPE, otherwise an exception occurs due
> to 
>             //2 DOCTYPE defined in the document. The XML fragment is
> included in 
>             //an XML document containing already a DOCTYPE 
>             marshaller.setMarshalAsDocument(false); 
>             marshaller.setRootElement(name.getLocalPart()); 
>             
>             // Marshall the Castor object into context 
>             marshaller.marshal(value); 
>   
>         } catch (MarshalException me) { 
>             log.error(Messages.getMessage("castorMarshalException00"), me); 
>             throw new 
> IOException(Messages.getMessage("castorMarshalException00") 
>                     + me.getLocalizedMessage()); 
>         } catch (ValidationException ve) { 
>             log.error(Messages.getMessage("castorValidationException00"),
> ve); 
>             throw new 
> IOException(Messages.getMessage("castorValidationException00") 
>                     + ve.getLocalizedMessage()); 
>         } finally { 
>             
>         } 
>     } 
>   
>     public String getMechanismType() { 
>         return Constants.AXIS_SAX; 
>     } 
>   
>     /** 
>      * Return XML schema for the specified type, suitable for insertion into
>      * the &lt;types&gt; element of a WSDL document, or underneath an 
>      * &lt;element&gt; or &lt;attribute&gt; declaration. 
>      * 
>      * @param javaType the Java Class we're writing out schema for 
>      * @param types the Java2WSDL Types object which holds the context 
>      *              for the WSDL being generated. 
>      * @return a type element containing a schema simpleType/complexType 
>      * @see org.apache.axis.wsdl.fromJava.Types 
>      */ 
>     public Element writeSchema(Class javaType, Types types) throws Exception
> { 
>         return null; 
>     } 
> } 
>   
> 2) and the ContentHandler 
>   
>   
> /* 
>  * The Apache Software License, Version 1.1 
>  * 
>  * 
>  * Copyright (c) 2002 The Apache Software Foundation.  All rights 
>  * reserved. 
>  * 
>  * Redistribution and use in source and binary forms, with or without 
>  * modification, are permitted provided that the following conditions 
>  * are met: 
>  * 
>  * 1. Redistributions of source code must retain the above copyright 
>  *    notice, this list of conditions and the following disclaimer. 
>  * 
>  * 2. Redistributions in binary form must reproduce the above copyright 
>  *    notice, this list of conditions and the following disclaimer in 
>  *    the documentation and/or other materials provided with the 
>  *    distribution. 
>  * 
>  * 3. The end-user documentation included with the redistribution, 
>  *    if any, must include the following acknowledgment: 
>  *       "This product includes software developed by the 
>  *        Apache Software Foundation (http://www.apache.org/)." 
>  *    Alternately, this acknowledgment may appear in the software itself, 
>  *    if and wherever such third-party acknowledgments normally appear. 
>  * 
>  * 4. The names "Axis" and "Apache Software Foundation" must 
>  *    not be used to endorse or promote products derived from this 
>  *    software without prior written permission. For written 
>  *    permission, please contact apache@apache.org. 
>  * 
>  * 5. Products derived from this software may not be called "Apache", 
>  *    nor may "Apache" appear in their name, without prior written 
>  *    permission of the Apache Software Foundation. 
>  * 
>  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED 
>  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 
>  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
>  * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR 
>  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
>  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
>  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 
>  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 
>  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 
>  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 
>  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 
>  * SUCH DAMAGE. 
>  * ==================================================================== 
>  * 
>  * This software consists of voluntary contributions made by many 
>  * individuals on behalf of the Apache Software Foundation.  For more 
>  * information on the Apache Software Foundation, please see 
>  * <http://www.apache.org/>. 
>  */package org.apache.axis.encoding.ser.castor; 
>   
> import java.io.IOException; 
> import javax.xml.namespace.QName; 
> import org.apache.axis.encoding.SerializationContext; 
> import org.xml.sax.SAXException; 
> import org.xml.sax.helpers.DefaultHandler; 
>   
> /** 
>  * Content Handler that wraps all calls into a SerializationContext 
>  * 
>  * @author Fabien Nisol (fabien.nisol@advalvas.be) 
>  * @version 1.0 
>  */ 
> public class AxisContentHandler extends DefaultHandler { 
>     
>     private SerializationContext context; 
>     
>     static 
>     { 
>         // castor 0.9.5.2 does need this variable to be set. 
>         // @todo remove this code when unnecessary 
>         if(System.getProperty("org.xml.sax.parser")==null) 
>            
> System.setProperty("org.xml.sax.parser","org.apache.xerces.parsers.SAXParser");
>     } 
>     
>     /** Constructeur pour la classe AxisContentHandler */ 
>     public AxisContentHandler(SerializationContext context) { 
>         super(); 
>         setContext(context); 
>     } 
>     
>     /** Getter for property context. 
>      * @return Value of property context. 
>      * 
>      */ 
>     public org.apache.axis.encoding.SerializationContext getContext() { 
>         return context; 
>     } 
>     
>     /** Setter for property context. 
>      * @param context New value of property context. 
>      * 
>      */ 
>     public void setContext(org.apache.axis.encoding.SerializationContext
> context) { 
>         this.context = context; 
>     } 
>     
>     public void startElement(String uri, String localName, String qName,
> org.xml.sax.Attributes attributes) throws org.xml.sax.SAXException { 
> 
>         try { 
>             context.startElement(new QName(uri,localName),attributes); 
>         } catch (IOException ioe) { 
>             throw new SAXException(ioe); 
>         } 
>     }   
>     
>     public void endElement(String uri, String localName, String qName)
> throws org.xml.sax.SAXException { 
>         try { 
>             context.endElement(); 
>         } catch (IOException ioe) { 
>             throw new SAXException(ioe); 
>         } 
>     } 
>     
>     public void characters(char[] ch, int start, int length) throws
> org.xml.sax.SAXException { 
>         try { 
>             context.writeChars(ch,start,length); 
>         } catch (IOException ioe) { 
>             throw new SAXException(ioe); 
>         } 
>     } 
>     
> } 
>   
>   
>  
>  
> 
> -- 
> Davanum Srinivas - http://webservices.apache.org/~dims/ 


-- 
Davanum Srinivas - http://webservices.apache.org/~dims/