/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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.axis2.databinding.types; import org.apache.axis2.databinding.utils.ConverterUtil; import javax.xml.namespace.QName; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamReader; import java.io.Serializable; import java.math.BigDecimal; /** this class is the super class of all the union simple types */ public abstract class Union implements Serializable { // object to store values protected Object localObject; public Object getObject() { return localObject; } public abstract void setObject(Object localObject); public String toString() { return this.localObject.toString(); } /** * method to parse xmlschema objects * * @param xmlStreamReader * @param namespaceURI * @param type * @throws URI.MalformedURIException * @throws XMLStreamException */ public void setObject(XMLStreamReader xmlStreamReader, String namespaceURI, String type) throws URI.MalformedURIException, XMLStreamException { String value = xmlStreamReader.getElementText(); if ("string".equals(type)) { setObject(value); } else if ("int".equals(type) || "integer".equals(type)) { setObject(new Integer(value)); } else if ("boolean".equals(type)) { setObject(new Boolean(value)); } else if ("anyURI".equals(type)) { setObject(new URI(value)); } else if ("date".equals(type)) { setObject(ConverterUtil.convertToDate(value)); } else if ("QName".equals(type)) { if (value.indexOf(":") > 0) { // i.e it has a name space String prefix = value.substring(0, value.indexOf(":")); String localPart = value.substring(value.indexOf(":") + 1); String namespace = xmlStreamReader.getNamespaceURI(prefix); setObject(new QName(namespace, localPart, prefix)); } else { setObject(new QName(value)); } } else if ("dateTime".equals(type)) { setObject(ConverterUtil.convertToDateTime(value)); } else if ("time".equals(type)) { setObject(ConverterUtil.convertToTime(value)); } else if ("float".equals(type)) { setObject(new Float(value)); } else if ("long".equals(type)) { setObject(new Long(value)); } else if ("double".equals(type)) { setObject(new Double(value)); } else if ("decimal".equals(type)) { setObject(new BigDecimal(value)); } else if ("unsignedLong".equals(type)) { setObject(new UnsignedLong(value)); } else if ("unsignedInt".equals(type)) { setObject(new UnsignedInt(value)); } else if ("unsignedShort".equals(type)) { setObject(new UnsignedShort(value)); } else if ("unsignedByte".equals(type)) { setObject(new UnsignedByte(value)); } else if ("positiveInteger".equals(type)) { setObject(new PositiveInteger(value)); } else if ("negativeInteger".equals(type)) { setObject(new NegativeInteger(value)); } else if ("nonNegativeInteger".equals(type)) { setObject(new NonNegativeInteger(value)); } else if ("nonPositiveInteger".equals(type)) { setObject(new NonPositiveInteger(value)); } else if ("duration".equals(type)) { setObject(ConverterUtil.convertToDuration(value)); } else { throw new RuntimeException("Object not found"); } } }