Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[WFLY-1634] Make the HTTP Upgrade attribute parsing specific to version 2.0 of the schema. #4730

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Expand Up @@ -462,8 +462,14 @@ public void parseManagementInterfaces(final XMLExtendedStreamReader reader, fina
case DOMAIN_1_0:
parseNativeManagementInterface1_0(reader, address, list);
break;
default:
case DOMAIN_1_1:
case DOMAIN_1_2:
case DOMAIN_1_3:
case DOMAIN_1_4:
parseManagementInterface1_1(reader, address, false, expectedNs, list);
break;
default:
parseManagementInterface2_0(reader, address, false, expectedNs, list);
}
break;
}
Expand All @@ -472,8 +478,14 @@ public void parseManagementInterfaces(final XMLExtendedStreamReader reader, fina
case DOMAIN_1_0:
parseHttpManagementInterface1_0(reader, address, list);
break;
default:
case DOMAIN_1_1:
case DOMAIN_1_2:
case DOMAIN_1_3:
case DOMAIN_1_4:
parseManagementInterface1_1(reader, address, true, expectedNs, list);
break;
default:
parseManagementInterface2_0(reader, address, true, expectedNs, list);
}
break;
}
Expand Down Expand Up @@ -658,6 +670,86 @@ private void parseManagementInterface1_1(XMLExtendedStreamReader reader, ModelNo
list.add(addOp);
}

private void parseHttpManagementInterfaceAttributes2_0(XMLExtendedStreamReader reader, ModelNode addOp) throws XMLStreamException {
final int count = reader.getAttributeCount();
for (int i = 0; i < count; i++) {
final String value = reader.getAttributeValue(i);
if (!isNoNamespaceAttribute(reader, i)) {
throw unexpectedAttribute(reader, i);
} else {
final Attribute attribute = Attribute.forName(reader.getAttributeLocalName(i));
switch (attribute) {
case SECURITY_REALM: {
HttpManagementResourceDefinition.SECURITY_REALM.parseAndSetParameter(value, addOp, reader);
break;
}
case CONSOLE_ENABLED: {
HttpManagementResourceDefinition.CONSOLE_ENABLED.parseAndSetParameter(value, addOp, reader);
break;
}
case HTTP_UPGRADE_ENABLED: {
HttpManagementResourceDefinition.HTTP_UPGRADE_ENABLED.parseAndSetParameter(value, addOp, reader);
break;
}
default:
throw unexpectedAttribute(reader, i);
}
}
}
}

private void parseNativeManagementInterfaceAttributes2_0(XMLExtendedStreamReader reader, ModelNode addOp) throws XMLStreamException {
final int count = reader.getAttributeCount();
for (int i = 0; i < count; i++) {
final String value = reader.getAttributeValue(i);
if (!isNoNamespaceAttribute(reader, i)) {
throw unexpectedAttribute(reader, i);
} else {
final Attribute attribute = Attribute.forName(reader.getAttributeLocalName(i));
switch (attribute) {
case SECURITY_REALM: {
NativeManagementResourceDefinition.SECURITY_REALM.parseAndSetParameter(value, addOp, reader);
break;
}
default:
throw unexpectedAttribute(reader, i);
}
}
}
}

private void parseManagementInterface2_0(XMLExtendedStreamReader reader, ModelNode address, boolean http, Namespace expectedNs, List<ModelNode> list) throws XMLStreamException {

final ModelNode operationAddress = address.clone();
operationAddress.add(MANAGEMENT_INTERFACE, http ? HTTP_INTERFACE : NATIVE_INTERFACE);
final ModelNode addOp = Util.getEmptyOperation(ADD, operationAddress);

// Handle attributes
if (http) {
parseHttpManagementInterfaceAttributes2_0(reader, addOp);
} else {
parseNativeManagementInterfaceAttributes2_0(reader, addOp);
}

// Handle elements
while (reader.hasNext() && reader.nextTag() != END_ELEMENT) {
requireNamespace(reader, expectedNs);
final Element element = Element.forName(reader.getLocalName());
switch (element) {
case SOCKET:
if (http) {
parseHttpManagementSocket(reader, addOp);
} else {
parseNativeManagementSocket(reader, addOp);
}
break;
default:
throw unexpectedElement(reader);
}
}

list.add(addOp);
}
private void parseNativeManagementSocket(XMLExtendedStreamReader reader, ModelNode addOp) throws XMLStreamException {
// Handle attributes
boolean hasInterface = false;
Expand Down
109 changes: 104 additions & 5 deletions server/src/main/java/org/jboss/as/server/parsing/StandaloneXml.java
Expand Up @@ -634,11 +634,29 @@ private void parseManagementInterfaces_1_1(final XMLExtendedStreamReader reader,
final Element element = Element.forName(reader.getLocalName());
switch (element) {
case NATIVE_INTERFACE: {
parseManagementInterface1_1(reader, address, false, expectedNs, list);
switch (expectedNs) { // Will not be 1.0 as this method is called for 1.1 and above.
case DOMAIN_1_1:
case DOMAIN_1_2:
case DOMAIN_1_3:
case DOMAIN_1_4:
parseManagementInterface1_1(reader, address, false, expectedNs, list);
break;
default:
parseManagementInterface2_0(reader, address, false, expectedNs, list);
}
break;
}
case HTTP_INTERFACE: {
parseManagementInterface1_1(reader, address, true, expectedNs, list);
switch (expectedNs) { // Will not be 1.0 as this method is called for 1.1 and above.
case DOMAIN_1_1:
case DOMAIN_1_2:
case DOMAIN_1_3:
case DOMAIN_1_4:
parseManagementInterface1_1(reader, address, true, expectedNs, list);
break;
default:
parseManagementInterface2_0(reader, address, true, expectedNs, list);
}
break;
}
case NATIVE_REMOTING_INTERFACE: {
Expand Down Expand Up @@ -681,17 +699,98 @@ private void parseManagementInterface1_1(XMLExtendedStreamReader reader, ModelNo
}
break;
}
default:
throw unexpectedAttribute(reader, i);
}
}
}

// Handle elements
while (reader.hasNext() && reader.nextTag() != END_ELEMENT) {
requireNamespace(reader, expectedNs);
final Element element = Element.forName(reader.getLocalName());
switch (element) {
case SOCKET:
if (http) {
parseHttpManagementSocket(reader, addOp);
} else {
parseNativeManagementSocket(reader, addOp);
}
break;
case SOCKET_BINDING:
if (http) {
parseHttpManagementSocketBinding(reader, addOp);
} else {
parseNativeManagementSocketBinding(reader, addOp);
}
break;
default:
throw unexpectedElement(reader);
}
}

list.add(addOp);
}

private void parseHttpManagementInterfaceAttributes2_0(XMLExtendedStreamReader reader,ModelNode addOp) throws XMLStreamException {
final int count = reader.getAttributeCount();
for (int i = 0; i < count; i++) {
final String value = reader.getAttributeValue(i);
if (!isNoNamespaceAttribute(reader, i)) {
throw unexpectedAttribute(reader, i);
} else {
final Attribute attribute = Attribute.forName(reader.getAttributeLocalName(i));
switch (attribute) {
case SECURITY_REALM: {
HttpManagementResourceDefinition.SECURITY_REALM.parseAndSetParameter(value, addOp, reader);
break;
}
case CONSOLE_ENABLED: {
HttpManagementResourceDefinition.CONSOLE_ENABLED.parseAndSetParameter(value, addOp, reader);
break;
}
case HTTP_UPGRADE_ENABLED: {
if (http) {
HttpManagementResourceDefinition.HTTP_UPGRADE_ENABLED.parseAndSetParameter(value, addOp, reader);
}
HttpManagementResourceDefinition.HTTP_UPGRADE_ENABLED.parseAndSetParameter(value, addOp, reader);
break;
}
default:
throw unexpectedAttribute(reader, i);
}
}
}
}

private void parseNativeManagementInterfaceAttributes2_0(XMLExtendedStreamReader reader, ModelNode addOp) throws XMLStreamException {
final int count = reader.getAttributeCount();
for (int i = 0; i < count; i++) {
final String value = reader.getAttributeValue(i);
if (!isNoNamespaceAttribute(reader, i)) {
throw unexpectedAttribute(reader, i);
} else {
final Attribute attribute = Attribute.forName(reader.getAttributeLocalName(i));
switch (attribute) {
case SECURITY_REALM: {
NativeManagementResourceDefinition.SECURITY_REALM.parseAndSetParameter(value, addOp, reader);
break;
}
default:
throw unexpectedAttribute(reader, i);
}
}
}
}

private void parseManagementInterface2_0(XMLExtendedStreamReader reader, ModelNode address, boolean http, Namespace expectedNs, List<ModelNode> list) throws XMLStreamException {
final ModelNode operationAddress = address.clone();
operationAddress.add(MANAGEMENT_INTERFACE, http ? HTTP_INTERFACE : NATIVE_INTERFACE);
final ModelNode addOp = Util.getEmptyOperation(ADD, operationAddress);

// Handle attributes
if (http) {
parseHttpManagementInterfaceAttributes2_0(reader, addOp);
} else {
parseNativeManagementInterfaceAttributes2_0(reader, addOp);
}

// Handle elements
while (reader.hasNext() && reader.nextTag() != END_ELEMENT) {
Expand Down