/* * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package com.sun.xml.internal.ws.runtime.config; import com.sun.istack.internal.logging.Logger; import com.sun.xml.internal.ws.config.metro.dev.FeatureReader; import com.sun.xml.internal.ws.config.metro.util.ParserUtil; import javax.xml.namespace.QName; import javax.xml.stream.XMLEventReader; import javax.xml.stream.XMLStreamConstants; import javax.xml.stream.XMLStreamException; import javax.xml.stream.events.Attribute; import javax.xml.stream.events.EndElement; import javax.xml.stream.events.StartElement; import javax.xml.stream.events.XMLEvent; import javax.xml.ws.WebServiceException; import java.util.Iterator; /** * * @author Fabian Ritzmann */ public class TubelineFeatureReader implements FeatureReader { private static final Logger LOGGER = Logger.getLogger(TubelineFeatureReader.class); private static final QName NAME_ATTRIBUTE_NAME = new QName("name"); // TODO implement public TubelineFeature parse(XMLEventReader reader) throws WebServiceException { try { final StartElement element = reader.nextEvent().asStartElement(); boolean attributeEnabled = true; final Iterator iterator = element.getAttributes(); while (iterator.hasNext()) { final Attribute nextAttribute = (Attribute) iterator.next(); final QName attributeName = nextAttribute.getName(); if (ENABLED_ATTRIBUTE_NAME.equals(attributeName)) { attributeEnabled = ParserUtil.parseBooleanValue(nextAttribute.getValue()); } else if (NAME_ATTRIBUTE_NAME.equals(attributeName)) { // TODO use name attribute } else { // TODO logging message throw LOGGER.logSevereException(new WebServiceException("Unexpected attribute")); } } return parseFactories(attributeEnabled, element, reader); } catch (XMLStreamException e) { throw LOGGER.logSevereException(new WebServiceException("Failed to unmarshal XML document", e)); } } private TubelineFeature parseFactories(final boolean enabled, final StartElement element, final XMLEventReader reader) throws WebServiceException { int elementRead = 0; loop: while (reader.hasNext()) { try { final XMLEvent event = reader.nextEvent(); switch (event.getEventType()) { case XMLStreamConstants.COMMENT: break; // skipping the comments and start document events case XMLStreamConstants.CHARACTERS: if (event.asCharacters().isWhiteSpace()) { break; } else { // TODO: logging message throw LOGGER.logSevereException(new WebServiceException("No character data allowed, was " + event.asCharacters())); } case XMLStreamConstants.START_ELEMENT: // TODO implement elementRead++; break; case XMLStreamConstants.END_ELEMENT: elementRead--; if (elementRead < 0) { final EndElement endElement = event.asEndElement(); if (!element.getName().equals(endElement.getName())) { // TODO logging message throw LOGGER.logSevereException(new WebServiceException("End element does not match " + endElement)); } break loop; } else { break; } default: // TODO logging message throw LOGGER.logSevereException(new WebServiceException("Unexpected event, was " + event)); } } catch (XMLStreamException e) { // TODO logging message throw LOGGER.logSevereException(new WebServiceException("Failed to unmarshal XML document", e)); } } // TODO implement return new TubelineFeature(enabled); } }