blob: 7ce6289672702262dbb78ca5b2eade32d135ff6c [file] [log] [blame]
/*
* Copyright 2001-2005 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.axis.deployment.wsdd;
import java.io.IOException;
import javax.xml.namespace.QName;
import org.w3c.dom.Attr;
import org.w3c.dom.Element;
import org.xml.sax.helpers.AttributesImpl;
import org.apache.axis.encoding.SerializationContext;
import org.apache.axis.encoding.SerializerFactory;
import org.apache.axis.encoding.ser.ArraySerializerFactory;
import org.apache.axis.utils.XMLUtils;
/**
* A <code>WSDDArrayMapping</code> is simply a <code>WSDDTypeMapping</code>
* which has preset values for the serializer and deserializer attributes.
*
* This enables the following slightly simplified syntax when expressing
* an array mapping:
*
* &lt;arrayMapping qname="prefix:local" languageSpecificType="java:class" innerType="prefix:local"/&gt;
*
*/
public class WSDDArrayMapping extends WSDDTypeMapping {
/** array item type */
private QName innerType = null;
/**
* Default constructor
*/
public WSDDArrayMapping() {
}
public WSDDArrayMapping(Element e) throws WSDDException {
super(e);
Attr innerTypeAttr = e.getAttributeNode(ATTR_INNER_TYPE);
if (innerTypeAttr != null) {
String qnameStr = innerTypeAttr.getValue();
innerType = XMLUtils.getQNameFromString(qnameStr, e);
}
serializer = ARRAY_SERIALIZER_FACTORY;
deserializer = ARRAY_DESERIALIZER_FACTORY;
}
protected QName getElementName() {
return QNAME_ARRAYMAPPING;
}
/**
* @return Returns the innerType.
*/
public QName getInnerType() {
return innerType;
}
public void writeToContext(SerializationContext context) throws IOException {
AttributesImpl attrs = new AttributesImpl();
String typeStr = context.qName2String(typeQName);
attrs.addAttribute("", ATTR_LANG_SPEC_TYPE, ATTR_LANG_SPEC_TYPE, "CDATA", typeStr);
String qnameStr = context.qName2String(qname);
attrs.addAttribute("", ATTR_QNAME, ATTR_QNAME, "CDATA", qnameStr);
String innerTypeStr = context.qName2String(innerType);
attrs.addAttribute("", ATTR_INNER_TYPE, ATTR_INNER_TYPE, "CDATA", innerTypeStr);
context.startElement(QNAME_ARRAYMAPPING, attrs);
context.endElement();
}
void setupSerializer(SerializerFactory ser) {
if (ser instanceof ArraySerializerFactory) {
((ArraySerializerFactory)ser).setComponentType(getInnerType());
}
}
}