/* * JBoss, Home of Professional Open Source. * Copyright 2014, Red Hat, Inc., and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.as.ee.structure; import static javax.xml.stream.XMLStreamConstants.END_ELEMENT; import static javax.xml.stream.XMLStreamConstants.START_ELEMENT; import java.util.EnumSet; import java.util.Set; import javax.xml.stream.XMLStreamException; import org.jboss.as.ee.metadata.EJBClientDescriptorMetaData; import org.jboss.metadata.property.PropertyReplacer; import org.jboss.staxmapper.XMLExtendedStreamReader; /** * Parser for urn:jboss:ejb-client:1.3:jboss-ejb-client * * @author Jaikiran Pai * @author <a href="mailto:tadamski@redhat.com">Tomasz Adamski</a> * @author <a href="mailto:wfink@redhat.com">Wolf-Dieter Fink</a> */ class EJBClientDescriptor13Parser extends EJBClientDescriptor12Parser { public static final String NAMESPACE_1_3 = "urn:jboss:ejb-client:1.3"; protected EJBClientDescriptor13Parser(final PropertyReplacer propertyReplacer) { super(propertyReplacer); } protected void parseClientContext(final XMLExtendedStreamReader reader, final EJBClientDescriptorMetaData ejbClientDescriptorMetaData) throws XMLStreamException { final int count = reader.getAttributeCount(); for (int i = 0; i < count; i++) { final EJBClientDescriptorXMLAttribute attribute = EJBClientDescriptorXMLAttribute.forName(reader .getAttributeLocalName(i)); final String value = readResolveValue(reader, i); switch (attribute) { case INVOCATION_TIMEOUT: final Long invocationTimeout = Long.parseLong(value); ejbClientDescriptorMetaData.setInvocationTimeout(invocationTimeout); break; case DEPLOYMENT_NODE_SELECTOR: final String deploymentNodeSelector = readResolveValue(reader, i); ejbClientDescriptorMetaData.setDeploymentNodeSelector(deploymentNodeSelector); break; default: unexpectedContent(reader); } } final Set<EJBClientDescriptorXMLElement> visited = EnumSet.noneOf(EJBClientDescriptorXMLElement.class); while (reader.hasNext()) { switch (reader.nextTag()) { case END_ELEMENT: { return; } case START_ELEMENT: { final EJBClientDescriptorXMLElement element = EJBClientDescriptorXMLElement.forName(reader.getLocalName()); if (visited.contains(element)) { unexpectedElement(reader); } visited.add(element); switch (element) { case EJB_RECEIVERS: this.parseEJBReceivers(reader, ejbClientDescriptorMetaData); break; case CLUSTERS: this.parseClusters(reader, ejbClientDescriptorMetaData); break; case PROFILE: this.parseProfile(reader, ejbClientDescriptorMetaData); break; default: unexpectedElement(reader); } break; } default: { unexpectedContent(reader); } } } unexpectedEndOfDocument(reader.getLocation()); } protected void parseProfile(final XMLExtendedStreamReader reader, final EJBClientDescriptorMetaData ejbClientDescriptorMetaData) throws XMLStreamException { final Set<EJBClientDescriptorXMLAttribute> required = EnumSet.of(EJBClientDescriptorXMLAttribute.NAME); final int count = reader.getAttributeCount(); String profileName = null; for (int i = 0; i < count; i++) { final EJBClientDescriptorXMLAttribute attribute = EJBClientDescriptorXMLAttribute.forName(reader .getAttributeLocalName(i)); required.remove(attribute); final String value = readResolveValue(reader, i); switch (attribute) { case NAME: profileName = value; break; default: unexpectedContent(reader); } } if (!required.isEmpty()) { missingAttributes(reader.getLocation(), required); } // add a new node config to the cluster config ejbClientDescriptorMetaData.setProfile(profileName); } }