org.jboss.as.ee.structure.EJBClientDescriptor11Parser Maven / Gradle / Ivy
/*
* Copyright The WildFly Authors
* SPDX-License-Identifier: Apache-2.0
*/
package org.jboss.as.ee.structure;
import static org.jboss.as.ee.logging.EeLogger.ROOT_LOGGER;
import static javax.xml.stream.XMLStreamConstants.END_ELEMENT;
import static javax.xml.stream.XMLStreamConstants.START_ELEMENT;
import java.util.EnumSet;
import java.util.Properties;
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.1:jboss-ejb-client
*
* @author Jaikiran Pai
* @author Tomasz Adamski
* @author Wolf-Dieter Fink
*/
class EJBClientDescriptor11Parser extends EJBClientDescriptor10Parser {
public static final String NAMESPACE_1_1 = "urn:jboss:ejb-client:1.1";
protected EJBClientDescriptor11Parser(final PropertyReplacer propertyReplacer) {
super(propertyReplacer);
}
protected void parseClientContext(final XMLExtendedStreamReader reader, final EJBClientDescriptorMetaData ejbClientDescriptorMetaData) throws XMLStreamException {
final Set 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;
default:
unexpectedElement(reader);
}
break;
}
default: {
unexpectedContent(reader);
}
}
}
unexpectedEndOfDocument(reader.getLocation());
}
protected void parseClusters(final XMLExtendedStreamReader reader, final EJBClientDescriptorMetaData ejbClientDescriptorMetaData) throws XMLStreamException {
while (reader.hasNext()) {
switch (reader.nextTag()) {
case END_ELEMENT: {
return;
}
case START_ELEMENT: {
final EJBClientDescriptorXMLElement element = EJBClientDescriptorXMLElement.forName(reader.getLocalName());
switch (element) {
case CLUSTER:
this.parseCluster(reader, ejbClientDescriptorMetaData);
break;
default:
unexpectedElement(reader);
}
break;
}
default: {
unexpectedContent(reader);
}
}
}
unexpectedEndOfDocument(reader.getLocation());
}
protected void parseCluster(final XMLExtendedStreamReader reader, final EJBClientDescriptorMetaData ejbClientDescriptorMetaData) throws XMLStreamException {
final Set required = EnumSet.of(EJBClientDescriptorXMLAttribute.NAME);
final int count = reader.getAttributeCount();
String clusterName = null;
String clusterNodeSelector = null;
long connectTimeout = 5000;
long maxAllowedConnectedNodes = 10;
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:
clusterName = value;
break;
case CONNECT_TIMEOUT:
connectTimeout = Long.parseLong(value);
break;
case CLUSTER_NODE_SELECTOR:
clusterNodeSelector = value;
break;
case MAX_ALLOWED_CONNECTED_NODES:
maxAllowedConnectedNodes = Long.parseLong(value);
break;
case USERNAME:
throw ROOT_LOGGER.attributeNoLongerSupported(EJBClientDescriptorXMLAttribute.USERNAME.getLocalName());
case SECURITY_REALM:
throw ROOT_LOGGER.attributeNoLongerSupported(EJBClientDescriptorXMLAttribute.SECURITY_REALM.getLocalName());
default:
unexpectedContent(reader);
}
}
if (!required.isEmpty()) {
missingAttributes(reader.getLocation(), required);
}
// add a new cluster config to the client configuration metadata
final EJBClientDescriptorMetaData.ClusterConfig clusterConfig = ejbClientDescriptorMetaData.newClusterConfig(clusterName);
clusterConfig.setConnectTimeout(connectTimeout);
clusterConfig.setNodeSelector(clusterNodeSelector);
clusterConfig.setMaxAllowedConnectedNodes(maxAllowedConnectedNodes);
while (reader.hasNext()) {
switch (reader.nextTag()) {
case END_ELEMENT: {
return;
}
case START_ELEMENT: {
final EJBClientDescriptorXMLElement element = EJBClientDescriptorXMLElement.forName(reader.getLocalName());
switch (element) {
case CONNECTION_CREATION_OPTIONS:
final Properties connectionCreationOptions = this.parseConnectionCreationOptions(reader);
clusterConfig.setConnectionOptions(connectionCreationOptions);
break;
case CHANNEL_CREATION_OPTIONS:
final Properties channelCreationOptions = this.parseChannelCreationOptions(reader);
clusterConfig.setChannelCreationOptions(channelCreationOptions);
break;
case NODE:
this.parseClusterNode(reader, clusterConfig);
break;
default:
unexpectedElement(reader);
}
break;
}
default: {
unexpectedContent(reader);
}
}
}
unexpectedEndOfDocument(reader.getLocation());
}
protected Properties parseConnectionCreationOptions(final XMLExtendedStreamReader reader) throws XMLStreamException {
final Properties connectionCreationOptions = new Properties();
while (reader.hasNext()) {
switch (reader.nextTag()) {
case END_ELEMENT: {
return connectionCreationOptions;
}
case START_ELEMENT: {
final EJBClientDescriptorXMLElement element = EJBClientDescriptorXMLElement.forName(reader.getLocalName());
switch (element) {
case PROPERTY:
connectionCreationOptions.putAll(this.parseProperty(reader));
break;
default:
unexpectedElement(reader);
}
break;
}
default: {
unexpectedContent(reader);
}
}
}
unexpectedEndOfDocument(reader.getLocation());
// unreachable
return connectionCreationOptions;
}
protected Properties parseChannelCreationOptions(final XMLExtendedStreamReader reader) throws XMLStreamException {
final Properties channelCreationOptions = new Properties();
while (reader.hasNext()) {
switch (reader.nextTag()) {
case END_ELEMENT: {
return channelCreationOptions;
}
case START_ELEMENT: {
final EJBClientDescriptorXMLElement element = EJBClientDescriptorXMLElement.forName(reader.getLocalName());
switch (element) {
case PROPERTY:
channelCreationOptions.putAll(this.parseProperty(reader));
break;
default:
unexpectedElement(reader);
}
break;
}
default: {
unexpectedContent(reader);
}
}
}
unexpectedEndOfDocument(reader.getLocation());
// unreachable
return channelCreationOptions;
}
protected void parseClusterNode(final XMLExtendedStreamReader reader, final EJBClientDescriptorMetaData.ClusterConfig clusterConfig) throws XMLStreamException {
final Set required = EnumSet.of(EJBClientDescriptorXMLAttribute.NAME);
final int count = reader.getAttributeCount();
String nodeName = null;
long connectTimeout = 5000;
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:
nodeName = value;
break;
case CONNECT_TIMEOUT:
connectTimeout = Long.parseLong(value);
break;
case USERNAME:
throw ROOT_LOGGER.attributeNoLongerSupported(EJBClientDescriptorXMLAttribute.USERNAME.getLocalName());
case SECURITY_REALM:
throw ROOT_LOGGER.attributeNoLongerSupported(EJBClientDescriptorXMLAttribute.SECURITY_REALM.getLocalName());
default:
unexpectedContent(reader);
}
}
if (!required.isEmpty()) {
missingAttributes(reader.getLocation(), required);
}
// add a new node config to the cluster config
final EJBClientDescriptorMetaData.ClusterNodeConfig clusterNodeConfig = clusterConfig.newClusterNode(nodeName);
clusterNodeConfig.setConnectTimeout(connectTimeout);
while (reader.hasNext()) {
switch (reader.nextTag()) {
case END_ELEMENT: {
return;
}
case START_ELEMENT: {
final EJBClientDescriptorXMLElement element = EJBClientDescriptorXMLElement.forName(reader.getLocalName());
switch (element) {
case CONNECTION_CREATION_OPTIONS:
final Properties connectionCreationOptions = this.parseConnectionCreationOptions(reader);
clusterNodeConfig.setConnectionOptions(connectionCreationOptions);
break;
case CHANNEL_CREATION_OPTIONS:
final Properties channelCreationOptions = this.parseChannelCreationOptions(reader);
clusterNodeConfig.setChannelCreationOptions(channelCreationOptions);
break;
default:
unexpectedElement(reader);
}
break;
}
default: {
unexpectedContent(reader);
}
}
}
unexpectedEndOfDocument(reader.getLocation());
}
protected Properties parseProperty(final XMLExtendedStreamReader reader) throws XMLStreamException {
final Set required = EnumSet.of(EJBClientDescriptorXMLAttribute.NAME,
EJBClientDescriptorXMLAttribute.VALUE);
final int count = reader.getAttributeCount();
String name = null;
String value = null;
for (int i = 0; i < count; i++) {
final EJBClientDescriptorXMLAttribute attribute = EJBClientDescriptorXMLAttribute.forName(reader.getAttributeLocalName(i));
required.remove(attribute);
final String val = readResolveValue(reader, i);
switch (attribute) {
case NAME:
name = val;
break;
case VALUE:
value = val;
break;
default:
unexpectedContent(reader);
}
}
if (!required.isEmpty()) {
missingAttributes(reader.getLocation(), required);
}
// no child elements allowed
requireNoContent(reader);
final Properties property = new Properties();
property.put(name, value);
return property;
}
protected static void requireNoContent(final XMLExtendedStreamReader reader) throws XMLStreamException {
if (reader.hasNext() && reader.nextTag() != END_ELEMENT) {
unexpectedElement(reader);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy