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 <types> element of a WSDL document, or underneath an
> * <element> or <attribute> 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/