diff options
Diffstat (limited to 'qpid/java/management/client/src/main/java/org/apache/qpid/management')
31 files changed, 620 insertions, 711 deletions
diff --git a/qpid/java/management/client/src/main/java/org/apache/qpid/management/Messages.java b/qpid/java/management/client/src/main/java/org/apache/qpid/management/Messages.java index 3d208835f0..4f84128fb3 100644 --- a/qpid/java/management/client/src/main/java/org/apache/qpid/management/Messages.java +++ b/qpid/java/management/client/src/main/java/org/apache/qpid/management/Messages.java @@ -170,6 +170,6 @@ public interface Messages String QMAN_100037_INVOKE_OPERATION_FAILURE = "<QMAN-100037> : Operation Invocation failure for operation.";
String QMAN_100038_UNABLE_TO_SEND_WS_NOTIFICATION = "<QMAN-100038> : Unable to send notification.";
String QMAN_100039_UNABLE_TO_CONFIGURE_PROPERLY_WORKER_MANAGER = "<QMAN-100039> : Unable to properly configure WorkManager. A malformed property (NaN) was given as input parameter.";
-
+ String QMAN_100040_UNABLE_TO_LOCATE_WSRP_PROPERTIES = "<QMAN-100040> : Unable to evaluate the WSRP XPath expression on resource WSDL.";
}
\ No newline at end of file diff --git a/qpid/java/management/client/src/main/java/org/apache/qpid/management/Names.java b/qpid/java/management/client/src/main/java/org/apache/qpid/management/Names.java index 808cafb6a7..d3ce711d5d 100644 --- a/qpid/java/management/client/src/main/java/org/apache/qpid/management/Names.java +++ b/qpid/java/management/client/src/main/java/org/apache/qpid/management/Names.java @@ -45,7 +45,7 @@ public abstract class Names public static String CLASS = "class"; public static String EVENT = "event"; public static String OBJECT_ID="objectId"; - public static String BROKER_ID = "brokerID"; + public static String BROKER_ID = "brokerId"; public static String DOMAIN_NAME = "Q-MAN"; public static String ARG_COUNT_PARAM_NAME = "argCount"; @@ -86,7 +86,7 @@ public abstract class Names new StringBuilder() .append(DOMAIN_NAME) .append(':') - .append("Type=Service") + .append("Name=QMan,Type=Service") .toString()); } catch(Exception exception) { diff --git a/qpid/java/management/client/src/main/java/org/apache/qpid/management/configuration/AccessModeMapping.java b/qpid/java/management/client/src/main/java/org/apache/qpid/management/configuration/AccessModeMapping.java deleted file mode 100644 index af6aaa36bf..0000000000 --- a/qpid/java/management/client/src/main/java/org/apache/qpid/management/configuration/AccessModeMapping.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * - * 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.qpid.management.configuration; - -import org.apache.qpid.management.domain.model.AccessMode; - -/** - * Class used to encapsulate a mapping between an access mode and a code. - * - * @author Andrea Gazzarini - */ -class AccessModeMapping -{ - private final int _code; - private final AccessMode _accessMode; - - /** - * Builds a new access mode mapping with the given parameters. - * - * @param code the access code. - * @param accessMode the access mode. - */ - AccessModeMapping(int code, AccessMode accessMode) - { - this._code = code; - this._accessMode = accessMode; - } - - /** - * Returns the access mode of this mapping. - * - * @return the access mode of this mapping. - */ - AccessMode getAccessMode () - { - return _accessMode; - } - - /** - * Returns the code of this mapping. - * - * @return the code of this mapping. - */ - int getCode () - { - return _code; - } - - /** - * Returns a string representation of this mapping. - * The returned string is indicating the code and the corresponding access mode. - * - * @return a string representation of this mapping. - */ - @Override - public String toString () - { - return new StringBuilder() - .append("AccessMode mapping (") - .append(_code) - .append(',') - .append(_accessMode) - .append(')').toString(); - } -} diff --git a/qpid/java/management/client/src/main/java/org/apache/qpid/management/configuration/Configuration.java b/qpid/java/management/client/src/main/java/org/apache/qpid/management/configuration/Configuration.java index c9d45c5023..51dc62f4fa 100644 --- a/qpid/java/management/client/src/main/java/org/apache/qpid/management/configuration/Configuration.java +++ b/qpid/java/management/client/src/main/java/org/apache/qpid/management/configuration/Configuration.java @@ -30,7 +30,16 @@ import org.apache.qpid.management.Messages; import org.apache.qpid.management.Names; import org.apache.qpid.management.domain.handler.base.IMessageHandler; import org.apache.qpid.management.domain.model.AccessMode; +import org.apache.qpid.management.domain.model.type.AbsTime; +import org.apache.qpid.management.domain.model.type.DeltaTime; +import org.apache.qpid.management.domain.model.type.ObjectReference; +import org.apache.qpid.management.domain.model.type.Str16; +import org.apache.qpid.management.domain.model.type.Str8; import org.apache.qpid.management.domain.model.type.Type; +import org.apache.qpid.management.domain.model.type.Uint16; +import org.apache.qpid.management.domain.model.type.Uint32; +import org.apache.qpid.management.domain.model.type.Uint64; +import org.apache.qpid.management.domain.model.type.Uint8; import org.apache.qpid.transport.DeliveryProperties; import org.apache.qpid.transport.Header; import org.apache.qpid.transport.MessageProperties; @@ -71,7 +80,12 @@ public final class Configuration private Configuration() { defineQueueNames(); + createHeaderForCommandMessages(); + + addAccessModeMappings(); + + addTypeMappings(); } void clean() @@ -90,9 +104,11 @@ public final class Configuration } /** - * Returns true if this configuration has at least one broker connection data. + * Returns true if this configuration has at least + * one broker configured. * - * @return true if this configuration has at least one broker connection data. + * @return true if this configuration has at least one + * broker configured. */ public boolean hasOneOrMoreBrokersDefined() { @@ -245,26 +261,46 @@ public final class Configuration /** * Adds a new type mapping to this configuration. * - * @param mapping the type mapping that will be added. + * @param code the code that will be associated with the declared type. + * @param type the type. + * @param vailidatorClassName the FQN of the validator class that will be + * associated with the given type. */ - void addTypeMapping(TypeMapping mapping) { - int code = mapping.getCode(); - Type type = mapping.getType(); - String validatorClassName = mapping.getValidatorClassName(); - _typeMappings.put(code, type); + void addTypeMapping(int code, Type type, String validatorClassName) { + _typeMappings.put(code, type); _validators.put(type, validatorClassName); - LOGGER.info(Messages.QMAN_000005_TYPE_MAPPING_CONFIGURED, code,type,validatorClassName); + LOGGER.info( + Messages.QMAN_000005_TYPE_MAPPING_CONFIGURED, + code, + type, + validatorClassName); } - + + + /** + * Adds a new type mapping to this configuration. + * + * @param code the code that will be associated with the declared type. + * @param type the type. + */ + void addTypeMapping(int code, Type type) { + _typeMappings.put(code, type); + + LOGGER.info( + Messages.QMAN_000005_TYPE_MAPPING_CONFIGURED, + code, + type, + "not configured for this type."); + } + /** * Adds a new access mode mapping to this configuration. * - * @param mapping the mapping that will be added. + * @param code the code that will be associated with the access mode, + * @param accessMode the accessMode. */ - void addAccessModeMapping(AccessModeMapping mapping){ - int code = mapping.getCode(); - AccessMode accessMode = mapping.getAccessMode(); + void addAccessModeMapping(int code, AccessMode accessMode){ _accessModes.put(code, accessMode); LOGGER.info(Messages.QMAN_000006_ACCESS_MODE_MAPPING_CONFIGURED, code,accessMode); @@ -420,4 +456,34 @@ public final class Configuration { this._keepAliveTime = keepAliveTime; } + + /** + * Configures access mode mappings. + * An access mode mapping is an association between a code and an access mode. + */ + private void addAccessModeMappings() { + addAccessModeMapping(1,AccessMode.RC); + addAccessModeMapping(2,AccessMode.RW); + addAccessModeMapping(3,AccessMode.RO); + } + + /** + * Configures type mappings. + * A type mapping is an association between a code and a management type. + */ + private void addTypeMappings() + { + addTypeMapping(1,new Uint8(),Names.NUMBER_VALIDATOR); + addTypeMapping(2,new Uint16(),Names.NUMBER_VALIDATOR); + addTypeMapping(3,new Uint32(),Names.NUMBER_VALIDATOR); + addTypeMapping(4,new Uint64(),Names.NUMBER_VALIDATOR); + addTypeMapping(6,new Str8(),Names.STRING_VALIDATOR); + addTypeMapping(7,new Str16(),Names.STRING_VALIDATOR); + addTypeMapping(8,new AbsTime()); + addTypeMapping(9,new DeltaTime()); + addTypeMapping(10,new ObjectReference()); + addTypeMapping(11,new org.apache.qpid.management.domain.model.type.Boolean()); + addTypeMapping(14,new org.apache.qpid.management.domain.model.type.Uuid()); + addTypeMapping(15,new org.apache.qpid.management.domain.model.type.Map()); + } }
\ No newline at end of file diff --git a/qpid/java/management/client/src/main/java/org/apache/qpid/management/configuration/Configurator.java b/qpid/java/management/client/src/main/java/org/apache/qpid/management/configuration/Configurator.java index 1cde9d5f88..fe44c6aff7 100644 --- a/qpid/java/management/client/src/main/java/org/apache/qpid/management/configuration/Configurator.java +++ b/qpid/java/management/client/src/main/java/org/apache/qpid/management/configuration/Configurator.java @@ -38,16 +38,6 @@ import org.apache.qpid.management.domain.handler.impl.HeartBeatIndicationMessage import org.apache.qpid.management.domain.handler.impl.InstrumentationMessageHandler; import org.apache.qpid.management.domain.handler.impl.MethodResponseMessageHandler; import org.apache.qpid.management.domain.handler.impl.SchemaResponseMessageHandler; -import org.apache.qpid.management.domain.model.AccessMode; -import org.apache.qpid.management.domain.model.type.AbsTime; -import org.apache.qpid.management.domain.model.type.DeltaTime; -import org.apache.qpid.management.domain.model.type.ObjectReference; -import org.apache.qpid.management.domain.model.type.Str16; -import org.apache.qpid.management.domain.model.type.Str8; -import org.apache.qpid.management.domain.model.type.Uint16; -import org.apache.qpid.management.domain.model.type.Uint32; -import org.apache.qpid.management.domain.model.type.Uint64; -import org.apache.qpid.management.domain.model.type.Uint8; import org.apache.qpid.transport.util.Logger; import org.xml.sax.Attributes; import org.xml.sax.InputSource; @@ -148,9 +138,6 @@ public class Configurator extends DefaultHandler } } - addTypeMappings(); - addAccessModeMappings(); - addMandatoryManagementMessageHandlers(); addMandatoryMethodReplyMessageHandlers(); } catch (Exception exception) @@ -209,38 +196,6 @@ public class Configurator extends DefaultHandler return data; } - /** - * Configures access mode mappings. - * An access mode mapping is an association between a code and an access mode. - */ - private void addAccessModeMappings() { - Configuration configuration = Configuration.getInstance(); - configuration.addAccessModeMapping(new AccessModeMapping(1,AccessMode.RC)); - configuration.addAccessModeMapping(new AccessModeMapping(2,AccessMode.RW)); - configuration.addAccessModeMapping(new AccessModeMapping(3,AccessMode.RO)); - } - - /** - * Configures type mappings. - * A type mapping is an association between a code and a management type. - */ - private void addTypeMappings() - { - Configuration configuration = Configuration.getInstance(); - configuration.addTypeMapping(new TypeMapping(1,new Uint8(),Names.NUMBER_VALIDATOR)); - configuration.addTypeMapping(new TypeMapping(2,new Uint16(),Names.NUMBER_VALIDATOR)); - configuration.addTypeMapping(new TypeMapping(3,new Uint32(),Names.NUMBER_VALIDATOR)); - configuration.addTypeMapping(new TypeMapping(4,new Uint64(),Names.NUMBER_VALIDATOR)); - configuration.addTypeMapping(new TypeMapping(6,new Str8(),Names.STRING_VALIDATOR)); - configuration.addTypeMapping(new TypeMapping(7,new Str16(),Names.STRING_VALIDATOR)); - configuration.addTypeMapping(new TypeMapping(8,new AbsTime())); - configuration.addTypeMapping(new TypeMapping(9,new DeltaTime())); - configuration.addTypeMapping(new TypeMapping(10,new ObjectReference())); - configuration.addTypeMapping(new TypeMapping(11,new org.apache.qpid.management.domain.model.type.Boolean())); - configuration.addTypeMapping(new TypeMapping(14,new org.apache.qpid.management.domain.model.type.Uuid())); - configuration.addTypeMapping(new TypeMapping(15,new org.apache.qpid.management.domain.model.type.Map())); - } - /** * Configures the mandatory management message handlers. */ diff --git a/qpid/java/management/client/src/main/java/org/apache/qpid/management/configuration/TypeMapping.java b/qpid/java/management/client/src/main/java/org/apache/qpid/management/configuration/TypeMapping.java deleted file mode 100644 index 2c0a460c1a..0000000000 --- a/qpid/java/management/client/src/main/java/org/apache/qpid/management/configuration/TypeMapping.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * - * 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.qpid.management.configuration; - -import org.apache.qpid.management.domain.model.type.Type; - -/** - * Type Mapping used for associating a code with a management type. - * - * @author Andrea Gazzarini - */ -class TypeMapping -{ - private final int _code; - private final Type _type; - private final String _validatorClass; - - /** - * Builds a new type mapping with the given parameters and no validator. - * - * @param code the code. - * @param type the management type. - */ - TypeMapping(int code, Type type) - { - this(code,type,null); - } - - /** - * Builds a new type mapping with the given parameters. - * - * @param code the code. - * @param type the management type. - * @param validatorClassName the class name of the validator to be used. - */ - TypeMapping(int code, Type type, String validatorClassName) - { - this._code = code; - this._type = type; - this._validatorClass = validatorClassName; - } - - /** - * Returns the code of this mapping. - * - * @return the code of this mapping. - */ - int getCode () - { - return _code; - } - - /** - * Returns the type for this mapping. - * - * @return the type for this mapping. - */ - Type getType () - { - return _type; - } - - /** - * Returns the validator class of this mapping. - * - * @return the validator class (as a string) of this mapping. - */ - public String getValidatorClassName() - { - return _validatorClass; - } -} diff --git a/qpid/java/management/client/src/main/java/org/apache/qpid/management/domain/model/JmxService.java b/qpid/java/management/client/src/main/java/org/apache/qpid/management/domain/model/JmxService.java index 176cec451e..657d7e6210 100644 --- a/qpid/java/management/client/src/main/java/org/apache/qpid/management/domain/model/JmxService.java +++ b/qpid/java/management/client/src/main/java/org/apache/qpid/management/domain/model/JmxService.java @@ -54,11 +54,10 @@ public class JmxService */ public void registerQManService(QMan qman) throws MBeanException { - ObjectName name = createQManName(); - if (!_mxServer.isRegistered(name)) + if (!_mxServer.isRegistered(Names.QMAN_OBJECT_NAME)) { try { - _mxServer.registerMBean(qman, name); + _mxServer.registerMBean(qman, Names.QMAN_OBJECT_NAME); } catch (Exception exception) { throw new MBeanException(exception); } @@ -358,27 +357,6 @@ public class JmxService throw new RuntimeException(exception); } } - - /** - * Creates the QMan object name. - * - * @return the QMan object name. - */ - private ObjectName createQManName() - { - String asString = new StringBuilder() - .append(Names.DOMAIN_NAME) - .append(':') - .append("Type=Service") - .toString(); - try - { - return new ObjectName(asString); - } catch (MalformedObjectNameException exception) - { - throw new RuntimeException(exception); - } - } ObjectName createEntityDefinitionName(String packageName, String className, String type) { @@ -407,7 +385,7 @@ public class JmxService { if (!_mxServer.isRegistered(name)) _mxServer.registerMBean(entity, name); - _mxServer.addNotificationListener(name, createQManName(), null, null); + _mxServer.addNotificationListener(name, Names.QMAN_OBJECT_NAME, null, null); } catch(Exception exception) { throw new RuntimeException(exception); diff --git a/qpid/java/management/client/src/main/java/org/apache/qpid/management/domain/services/QMan.java b/qpid/java/management/client/src/main/java/org/apache/qpid/management/domain/services/QMan.java index d124593472..c4c0ce5e74 100644 --- a/qpid/java/management/client/src/main/java/org/apache/qpid/management/domain/services/QMan.java +++ b/qpid/java/management/client/src/main/java/org/apache/qpid/management/domain/services/QMan.java @@ -26,6 +26,9 @@ import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; import java.util.UUID; +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; import javax.management.Attribute; import javax.management.AttributeList; @@ -45,6 +48,7 @@ import org.apache.qpid.management.Names; import org.apache.qpid.management.configuration.BrokerAlreadyConnectedException; import org.apache.qpid.management.configuration.BrokerConnectionData; import org.apache.qpid.management.configuration.BrokerConnectionException; +import org.apache.qpid.management.configuration.Configuration; import org.apache.qpid.management.configuration.Configurator; import org.apache.qpid.management.domain.model.JmxService; import org.apache.qpid.transport.util.Logger; @@ -58,6 +62,7 @@ public class QMan extends NotificationBroadcasterSupport implements DynamicMBean private final List<ManagementClient> managementClients = new ArrayList<ManagementClient>(); private Configurator _configurator = new Configurator(); + private ThreadPoolExecutor _workManager; /** * Starts QMan. @@ -74,6 +79,8 @@ public class QMan extends NotificationBroadcasterSupport implements DynamicMBean _configurator.configure(); + configureWorkManager(); + LOGGER.info(Messages.QMAN_000019_QMAN_STARTED); } catch(Exception exception) { LOGGER.error(exception,Messages.QMAN_100018_UNABLE_TO_STARTUP_CORRECTLY ); @@ -143,6 +150,36 @@ public class QMan extends NotificationBroadcasterSupport implements DynamicMBean LOGGER.info(Messages.QMAN_000021_SHUT_DOWN); } + /** + * Creates a management client using the given data. + * + * @param brokerId the broker identifier. + * @param data the broker connection data. + */ + public void createManagementClient(UUID brokerId, BrokerConnectionData data) + { + try + { + ManagementClient client = new ManagementClient(brokerId,data); + client.estabilishFirstConnectionWithBroker(); + managementClients.add(client); + + LOGGER.info(Messages.QMAN_000004_MANAGEMENT_CLIENT_CONNECTED,brokerId); + } catch(StartupFailureException exception) { + LOGGER.error(exception, Messages.QMAN_100017_UNABLE_TO_CONNECT,brokerId,data); + } + } + + /** + * Returns the list of management clients currently handled by QMan. + * + * @return the list of management clients currently handled by QMan. + */ + public List<ManagementClient> getManagementClients() + { + return managementClients; + } + /** * Injects the configurator on this QMan instance. * That configutator later will be responsible to manage the configuration. @@ -330,13 +367,20 @@ public class QMan extends NotificationBroadcasterSupport implements DynamicMBean /** * Simply dispatches the incoming notification to registered listeners. + * Consider that the notification is sent asynchronously so the QMan current thread is not + * waiting for completion of receiver task. * * @param notification the incoming notification. * @param handback the context associated to this notification. */ - public void handleNotification(Notification notification, Object handback) + public void handleNotification(final Notification notification, Object handback) { - sendNotification(notification); + _workManager.execute(new Runnable(){ + public void run() + { + sendNotification(notification); + } + }); } /** @@ -352,33 +396,17 @@ public class QMan extends NotificationBroadcasterSupport implements DynamicMBean LOGGER.info(Messages.QMAN_000023_QMAN_REGISTERED_AS_MBEAN); } - /** - * Creates a management client using the given data. - * - * @param brokerId the broker identifier. - * @param data the broker connection data. - */ - public void createManagementClient(UUID brokerId, BrokerConnectionData data) - { - try - { - ManagementClient client = new ManagementClient(brokerId,data); - client.estabilishFirstConnectionWithBroker(); - managementClients.add(client); - - LOGGER.info(Messages.QMAN_000004_MANAGEMENT_CLIENT_CONNECTED,brokerId); - } catch(StartupFailureException exception) { - LOGGER.error(exception, Messages.QMAN_100017_UNABLE_TO_CONNECT,brokerId,data); - } - } - /** - * Returns the list of management clients currently handled by QMan. - * - * @return the list of management clients currently handled by QMan. + * Configures work manager component. */ - public List<ManagementClient> getManagementClients() - { - return managementClients; - } + private void configureWorkManager() + { + Configuration configuration = Configuration.getInstance(); + _workManager = new ThreadPoolExecutor( + configuration.getWorkerManagerPoolSize(), + configuration.getWorkerManagerMaxPoolSize(), + configuration.getWorkerManagerKeepAliveTime(), + TimeUnit.MILLISECONDS, + new ArrayBlockingQueue<Runnable>(30)); + } } diff --git a/qpid/java/management/client/src/main/java/org/apache/qpid/management/domain/services/QpidService.java b/qpid/java/management/client/src/main/java/org/apache/qpid/management/domain/services/QpidService.java index a12993d40e..ee41beaf50 100644 --- a/qpid/java/management/client/src/main/java/org/apache/qpid/management/domain/services/QpidService.java +++ b/qpid/java/management/client/src/main/java/org/apache/qpid/management/domain/services/QpidService.java @@ -86,6 +86,8 @@ public class QpidService implements SessionListener public void opened(Session ssn) {} + public void resumed(Session ssn) {} + public void message(Session ssn, MessageTransfer xfr) { MessagePartListenerAdapter l = _listeners.get(xfr.getDestination()); diff --git a/qpid/java/management/client/src/main/java/org/apache/qpid/management/web/action/BrokerModel.java b/qpid/java/management/client/src/main/java/org/apache/qpid/management/web/action/BrokerModel.java index 03e772b9b1..09b7309b96 100644 --- a/qpid/java/management/client/src/main/java/org/apache/qpid/management/web/action/BrokerModel.java +++ b/qpid/java/management/client/src/main/java/org/apache/qpid/management/web/action/BrokerModel.java @@ -30,12 +30,21 @@ import javax.management.ObjectName; import org.apache.qpid.management.Names;
+/**
+ * Value Object encapsulating a broker management domain model.
+ *
+ * @author Andrea Gazzarini
+ */
public class BrokerModel
{
- private Map<String, List<ObjectName>> objectsByType = new HashMap<String, List<ObjectName>>();
-
- private String id;
+ private Map<String, List<ObjectName>> _objectsByType = new HashMap<String, List<ObjectName>>();
+ private String _id;
+ /**
+ * Adds a new object to this domain model.
+ *
+ * @param name the object name of the JMX entity.
+ */
void addObject(ObjectName name)
{
String packageName = name.getKeyProperty(Names.PACKAGE);
@@ -44,37 +53,48 @@ public class BrokerModel {
String fqn = packageName+"."+className;
- List<ObjectName> objects = objectsByType.get(fqn);
+ List<ObjectName> objects = _objectsByType.get(fqn);
if (objects == null)
{
objects = new ArrayList<ObjectName>();
- objectsByType.put(fqn,objects);
+ _objectsByType.put(fqn,objects);
}
objects.add(name);
}
}
+ /**
+ * Gets the identifier of the owner of this model.
+ *
+ * @return the identifier of the owner of this model.
+ */
public String getId()
{
- return id;
+ return _id;
}
+ /**
+ * Sets the identifier of the owner of this model.
+ *
+ * @param id the identifier of the owner of this model.
+ */
public void setId(String id)
{
- this.id = id;
+ this._id = id;
}
- public Set<String> getCategoryNames(){
- return objectsByType.keySet();
+ public Set<String> getCategoryNames()
+ {
+ return _objectsByType.keySet();
}
public List<ObjectName> getCategory(String name)
{
- return objectsByType.get(name);
+ return _objectsByType.get(name);
}
public int getCategoryCount()
{
- return objectsByType.keySet().size();
+ return _objectsByType.keySet().size();
}
}
\ No newline at end of file diff --git a/qpid/java/management/client/src/main/java/org/apache/qpid/management/web/action/BrokersManagementAction.java b/qpid/java/management/client/src/main/java/org/apache/qpid/management/web/action/BrokersManagementAction.java index ae886767e2..509c86c08b 100644 --- a/qpid/java/management/client/src/main/java/org/apache/qpid/management/web/action/BrokersManagementAction.java +++ b/qpid/java/management/client/src/main/java/org/apache/qpid/management/web/action/BrokersManagementAction.java @@ -42,9 +42,10 @@ import org.apache.qpid.management.domain.services.QMan; * This controller is responsible to :
*
* <ul>
- * <li> prepare data for the page that is showing all connected brokers.</li>.
- * </li> connect QMan with a broker on demand.
+ * <li> prepare data for the page that is showing all connected brokers.</li>.
+ * </li> connect QMan with a broker on demand.
* </ul>
+ *
* @author Andrea Gazzarini
*/
public class BrokersManagementAction extends HttpServlet
@@ -54,6 +55,11 @@ public class BrokersManagementAction extends HttpServlet /**
* Retrieves all connected brokers (their connection data) and prepare the model that
* is then forwarded to the appropriate view page.
+ *
+ * @param request the http request.
+ * @param response the http response.
+ * @throws ServletException in case of failure while forwarding to the view component.
+ * @throws IOException in case of failure while forwarding to the view component.
*/
@SuppressWarnings("unchecked")
@Override
@@ -87,7 +93,13 @@ public class BrokersManagementAction extends HttpServlet }
/**
- * Connects QMan with a new broker.
+ * Connects QMan with a new broker and forwards to
+ * the brokers list view page.
+ *
+ * @param request the http request.
+ * @param response the http response.
+ * @throws ServletException in case of failure while forwarding to the view component.
+ * @throws IOException in case of failure while forwarding to the view component.
*/
@SuppressWarnings("unchecked")
@Override
@@ -123,28 +135,32 @@ public class BrokersManagementAction extends HttpServlet errors.add("Invalid value for \"virtualHost\" attribute. Must be not null.");
}
- try{
+ try
+ {
port = Integer.parseInt(portString);
} catch(Exception exception)
{
errors.add("Invalid value for \"port\" attribute. Must be not null and must be a number.");
}
- try{
+ try
+ {
initialPoolCapacity = Integer.parseInt(initialCapacityString);
} catch(Exception exception)
{
errors.add("Invalid value for \"Initial Pool Capacity\" attribute. Must be not null and must be a number.");
}
- try{
+ try
+ {
maxPoolCapacity = Integer.parseInt(maxCapacityString);
} catch(Exception exception)
{
errors.add("Invalid value for \"Max Pool Capacity\" attribute. Must be not null and must be a number.");
}
- try{
+ try
+ {
maxWaitTimeout = Long.parseLong(maxWaitTimeoutString);
} catch(Exception exception)
{
diff --git a/qpid/java/management/client/src/main/java/org/apache/qpid/management/web/action/WsdmPropertiesPerspectiveAction.java b/qpid/java/management/client/src/main/java/org/apache/qpid/management/web/action/WsdmPropertiesPerspectiveAction.java index de479a00d6..e3a8eb50d7 100644 --- a/qpid/java/management/client/src/main/java/org/apache/qpid/management/web/action/WsdmPropertiesPerspectiveAction.java +++ b/qpid/java/management/client/src/main/java/org/apache/qpid/management/web/action/WsdmPropertiesPerspectiveAction.java @@ -43,15 +43,12 @@ import javax.xml.namespace.QName; import org.apache.muse.core.proxy.ProxyHandler;
import org.apache.muse.core.proxy.ReflectionProxyHandler;
import org.apache.muse.ws.addressing.EndpointReference;
-import org.apache.muse.ws.resource.remote.WsResourceClient;
import org.apache.qpid.management.Names;
import org.w3c.dom.Element;
public class WsdmPropertiesPerspectiveAction extends HttpServlet
{
private static final long serialVersionUID = -2411413147821629363L;
- private static final Object [] WSDL_DIALECT = new Object[]{"http://schemas.xmlsoap.org/wsdl/"};
- private static final Object [] RMD_DIALECT = new Object[]{"http://docs.oasis-open.org/wsrf/rmd-1"};
private ProxyHandler proxyHandler;
diff --git a/qpid/java/management/client/src/main/java/org/apache/qpid/management/web/action/WsdmRmdPerspectiveAction.java b/qpid/java/management/client/src/main/java/org/apache/qpid/management/web/action/WsdmRmdPerspectiveAction.java index bafdc06633..b4c488e97c 100644 --- a/qpid/java/management/client/src/main/java/org/apache/qpid/management/web/action/WsdmRmdPerspectiveAction.java +++ b/qpid/java/management/client/src/main/java/org/apache/qpid/management/web/action/WsdmRmdPerspectiveAction.java @@ -35,6 +35,8 @@ import org.apache.muse.core.proxy.ProxyHandler; import org.apache.muse.core.proxy.ReflectionProxyHandler;
import org.apache.muse.util.xml.XmlUtils;
import org.apache.muse.ws.addressing.EndpointReference;
+import org.apache.muse.ws.metadata.WsxConstants;
+import org.apache.muse.ws.resource.metadata.WsrmdConstants;
import org.apache.muse.ws.resource.remote.WsResourceClient;
import org.apache.qpid.management.Names;
import org.w3c.dom.Element;
@@ -42,7 +44,7 @@ import org.w3c.dom.Element; public class WsdmRmdPerspectiveAction extends HttpServlet
{
private static final long serialVersionUID = -2411413147821629363L;
- private static final Object [] DIALECT = new Object[]{"http://docs.oasis-open.org/wsrf/rmd-1"};
+ private static final Object [] RMD_DIALECT = new Object[]{WsrmdConstants.NAMESPACE_URI};
private ProxyHandler proxyHandler;
@@ -52,10 +54,14 @@ public class WsdmRmdPerspectiveAction extends HttpServlet public void init() throws ServletException
{
proxyHandler = new ReflectionProxyHandler();
- proxyHandler.setAction("http://schemas.xmlsoap.org/ws/2004/09/mex/GetMetadata");
- proxyHandler.setRequestName(new QName("http://schemas.xmlsoap.org/ws/2004/09/mex", "GetMetadata", Names.PREFIX));
- proxyHandler.setRequestParameterNames(new QName[]{new QName("http://schemas.xmlsoap.org/ws/2004/09/mex", "Dialect", Names.PREFIX)});
- proxyHandler.setResponseName(new QName("http://schemas.xmlsoap.org/ws/2004/09/mex", "Metadata", Names.PREFIX));
+ proxyHandler.setAction(WsxConstants.GET_METADATA_URI);
+ proxyHandler.setRequestName(WsxConstants.GET_METADATA_QNAME);
+ proxyHandler.setRequestParameterNames(new QName[]{
+ new QName(
+ WsxConstants.NAMESPACE_URI,
+ WsxConstants.DIALECT,
+ WsxConstants.PREFIX)});
+ proxyHandler.setResponseName(WsxConstants.METADATA_QNAME);
proxyHandler.setReturnType(Element[].class);
}
@@ -65,29 +71,49 @@ public class WsdmRmdPerspectiveAction extends HttpServlet {
try
{
-// String resourceId = request.getParameter("resourceId");
-// ObjectName objectName = new ObjectName(resourceId);
-//
-// String wsresourceid = objectName.getKeyProperty(Names.OBJECT_ID);
-// EndpointReference resourceEndpointReference = new EndpointReference(getURI(request));
-// resourceEndpointReference.addParameter(
-// Names.RESOURCE_ID_QNAME,
-// wsresourceid);
-//
-// WsResourceClient resourceClient = new WsResourceClient(resourceEndpointReference);
-// Element rmd = ((Element[])resourceClient.invoke(proxyHandler,DIALECT))[0];
-//
-// String output = XmlUtils.toString(rmd);
-//
-// String [] keyProperties = objectName.getKeyPropertyListString().split(",");
-//
-// request.setAttribute("resourceId", objectName);
-// request.setAttribute("nameAttributes",keyProperties);
-// request.setAttribute("rmd",output);
- RequestDispatcher dispatcher = request.getRequestDispatcher("/tbd.jsp");
+ String resourceId = request.getParameter("resourceId");
+ ObjectName objectName = new ObjectName(resourceId);
+
+ String wsresourceid = objectName.getKeyProperty(Names.OBJECT_ID);
+ EndpointReference resourceEndpointReference = new EndpointReference(getURI(request));
+
+ resourceEndpointReference.addParameter(
+ Names.RESOURCE_ID_QNAME,
+ wsresourceid);
+
+ WsResourceClient resourceClient = new WsResourceClient(resourceEndpointReference);
+ Element rmd = ((Element[])resourceClient.invoke(proxyHandler,RMD_DIALECT))[0];
+
+// NodeList nodelist = wsdl.getChildNodes();
+// Element definitions = null;
+// for (int i = 0; i < nodelist.getLength(); i++)
+// {
+// Node node = nodelist.item(i);
+// switch (node.getNodeType())
+// {
+// case Node.ELEMENT_NODE:
+// {
+// Element element = (Element) node;
+// if (element.getNodeName().indexOf("definitions") != -1)
+// {
+// definitions = element;
+// break;
+// }
+// }
+// }
+// }
+
+ String output = XmlUtils.toString(rmd);
+
+ String [] keyProperties = objectName.getKeyPropertyListString().split(",");
+
+ request.setAttribute("resourceId", resourceId);
+ request.setAttribute("nameAttributes",keyProperties);
+ request.setAttribute("rmd",output);
+ RequestDispatcher dispatcher = request.getRequestDispatcher("/wsdm_rmd_perspective.jsp");
dispatcher.forward(request,response);
} catch(Exception exception)
- {
+ {
request.setAttribute("errorMessage","Unable to detect the exact cause Please look at the reported stack trace below.");
request.setAttribute("exception",exception);
RequestDispatcher dispatcher = request.getRequestDispatcher("/error_page.jsp");
diff --git a/qpid/java/management/client/src/main/java/org/apache/qpid/management/web/action/WsdmWsdlPerspectiveAction.java b/qpid/java/management/client/src/main/java/org/apache/qpid/management/web/action/WsdmWsdlPerspectiveAction.java index 9b47fe95b9..77a5237037 100644 --- a/qpid/java/management/client/src/main/java/org/apache/qpid/management/web/action/WsdmWsdlPerspectiveAction.java +++ b/qpid/java/management/client/src/main/java/org/apache/qpid/management/web/action/WsdmWsdlPerspectiveAction.java @@ -35,6 +35,7 @@ import org.apache.muse.core.proxy.ProxyHandler; import org.apache.muse.core.proxy.ReflectionProxyHandler;
import org.apache.muse.util.xml.XmlUtils;
import org.apache.muse.ws.addressing.EndpointReference;
+import org.apache.muse.ws.metadata.WsxConstants;
import org.apache.muse.ws.resource.remote.WsResourceClient;
import org.apache.qpid.management.Names;
import org.w3c.dom.Element;
@@ -44,7 +45,7 @@ import org.w3c.dom.NodeList; public class WsdmWsdlPerspectiveAction extends HttpServlet
{
private static final long serialVersionUID = -2411413147821629363L;
- private static final Object [] WSDL_DIALECT = new Object[]{"http://schemas.xmlsoap.org/wsdl/"};
+ private static final Object [] WSDL_DIALECT = new Object[]{WsxConstants.WSDL_DIALECT};
private ProxyHandler proxyHandler;
@@ -54,10 +55,14 @@ public class WsdmWsdlPerspectiveAction extends HttpServlet public void init() throws ServletException
{
proxyHandler = new ReflectionProxyHandler();
- proxyHandler.setAction("http://schemas.xmlsoap.org/ws/2004/09/mex/GetMetadata");
- proxyHandler.setRequestName(new QName("http://schemas.xmlsoap.org/ws/2004/09/mex", "GetMetadata", Names.PREFIX));
- proxyHandler.setRequestParameterNames(new QName[]{new QName("http://schemas.xmlsoap.org/ws/2004/09/mex", "Dialect", Names.PREFIX)});
- proxyHandler.setResponseName(new QName("http://schemas.xmlsoap.org/ws/2004/09/mex", "Metadata", Names.PREFIX));
+ proxyHandler.setAction(WsxConstants.GET_METADATA_URI);
+ proxyHandler.setRequestName(WsxConstants.GET_METADATA_QNAME);
+ proxyHandler.setRequestParameterNames(new QName[]{
+ new QName(
+ WsxConstants.NAMESPACE_URI,
+ WsxConstants.DIALECT,
+ WsxConstants.PREFIX)});
+ proxyHandler.setResponseName(WsxConstants.METADATA_QNAME);
proxyHandler.setReturnType(Element[].class);
}
@@ -72,6 +77,7 @@ public class WsdmWsdlPerspectiveAction extends HttpServlet String wsresourceid = objectName.getKeyProperty(Names.OBJECT_ID);
EndpointReference resourceEndpointReference = new EndpointReference(getURI(request));
+
resourceEndpointReference.addParameter(
Names.RESOURCE_ID_QNAME,
wsresourceid);
diff --git a/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/QEmuInitializer.java b/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/QEmuInitializer.java index 545e587f79..47aa4ea681 100644 --- a/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/QEmuInitializer.java +++ b/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/QEmuInitializer.java @@ -57,7 +57,9 @@ public class QEmuInitializer extends HttpServlet Names.QPID_EMULATOR_OBJECT_NAME);
} catch(Exception exception)
{
- LOGGER.warn(exception,Messages.QMAN_300005_QEMU_INITIALIZATION_FAILURE);
+ LOGGER.warn(
+ exception,
+ Messages.QMAN_300005_QEMU_INITIALIZATION_FAILURE);
throw new ServletException(exception);
}
}
@@ -84,8 +86,8 @@ public class QEmuInitializer extends HttpServlet {
try
{
- ManagementFactory.getPlatformMBeanServer()
- .unregisterMBean(Names.QPID_EMULATOR_OBJECT_NAME);
+ ManagementFactory.getPlatformMBeanServer().unregisterMBean(
+ Names.QPID_EMULATOR_OBJECT_NAME);
} catch (Exception exception)
{
}
diff --git a/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/Constants.java b/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/Constants.java new file mode 100644 index 0000000000..59a5801505 --- /dev/null +++ b/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/Constants.java @@ -0,0 +1,44 @@ +/*
+ *
+ * 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.qpid.management.wsdm.capabilities;
+
+import javax.xml.XMLConstants;
+import javax.xml.namespace.QName;
+
+public interface Constants
+{
+ String WSRP_PROPERTIES_XPATH = "/wsdl:definitions/wsdl:types/xsd:schema[" +
+ "@targetNamespace='http://amqp.apache.org/qpid/management/qman']" +
+ "/xsd:element[@name='QManWsResourceProperties']/xsd:complexType/xsd:sequence";
+
+ String SERVICE_LOCATION_XPATH = "/wsdl:definitions/wsdl:service/wsdl:port/wsdl-soap:address/@location";
+ String QMAN_SCHEMA_XPATH = "/wsdl:definitions/wsdl:types/xsd:schema[@targetNamespace='http://amqp.apache.org/qpid/management/qman']";
+
+ String MIN_OCCURS = "minOccurs";
+ String REF_ATTRIBUTE = "ref";
+ String NAME_ATTRIBUTE = "name";
+ String TYPE_ATTRIBUTE ="type";
+
+ QName XSD_ELEMENT_QNAME = new QName(XMLConstants.W3C_XML_SCHEMA_NS_URI,"element","xsd");
+ QName XSD_COMPLEX_TYPE_QNAME = new QName(XMLConstants.W3C_XML_SCHEMA_NS_URI,"complexType","xsd");
+ QName XSD_SEQUENCE_QNAME = new QName(XMLConstants.W3C_XML_SCHEMA_NS_URI,"sequence","xsd");
+
+}
\ No newline at end of file diff --git a/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/ConsumerCapability.java b/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/ConsumerCapability.java index dd5eb523c1..bde98092a0 100644 --- a/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/ConsumerCapability.java +++ b/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/ConsumerCapability.java @@ -29,6 +29,8 @@ import org.apache.muse.ws.notification.WsnConstants; /**
* WS-Notifications consumer capability.
+ * At the moment QMan is not a consumer of itself so this capability is here only
+ * for test purposes.
*
* @author Andrea Gazzarini
*/
diff --git a/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/DummyCapabilityBuilder.java b/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/DummyCapabilityBuilder.java index 0676b4ac49..370cf3086d 100644 --- a/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/DummyCapabilityBuilder.java +++ b/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/DummyCapabilityBuilder.java @@ -29,32 +29,57 @@ import org.apache.muse.core.Environment; /**
* Dummy capability builder used for avoid duplicated builds for the
* same class.
+ * Basically it acts likes a Null Object when the target capability class has been
+ * already built.
*
* @author Andrea Gazzarini
*/
public class DummyCapabilityBuilder implements IArtifactBuilder
{
-
- public void begin(ObjectName objectName) throws BuilderException
+ /**
+ * Director callback.
+ * Do nothing here (see class comments above.)
+ */
+ public void begin(ObjectName objectName)
{
}
- public void endAttributes() throws BuilderException
+ /**
+ * Director callback.
+ * Do nothing here (see class comments above.)
+ */
+ public void endAttributes()
{
}
- public void endOperations() throws BuilderException
+ /**
+ * Director callback.
+ * Do nothing here (see class comments above.)
+ */
+ public void endOperations()
{
}
- public void onAttribute(MBeanAttributeInfo attributeMetadata) throws BuilderException
+ /**
+ * Director callback.
+ * Do nothing here (see class comments above.)
+ */
+ public void onAttribute(MBeanAttributeInfo attributeMetadata)
{
}
- public void onOperation(MBeanOperationInfo operationMetadata) throws BuilderException
+ /**
+ * Director callback.
+ * Do nothing here (see class comments above.)
+ */
+ public void onOperation(MBeanOperationInfo operationMetadata)
{
}
+ /**
+ * Director callback.
+ * Do nothing here (see class comments above.)
+ */
public void setEnvironment(Environment environment)
{
}
diff --git a/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/MBeanCapability.java b/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/MBeanCapability.java index 82d8e97d37..37ecc0c031 100644 --- a/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/MBeanCapability.java +++ b/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/MBeanCapability.java @@ -179,12 +179,8 @@ public abstract class MBeanCapability extends AbstractWsResourceCapability params,
signature);
- Result result = new Result(
- output.getReturnCode(),
- output.getStatusText(),
- output.getOutputSection());
-
- return result;
+ return new Result(output.getOutputSection());
+
} catch (InstanceNotFoundException exception)
{
throw new EntityInstanceNotFoundFault(
diff --git a/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/MBeanCapabilityBuilder.java b/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/MBeanCapabilityBuilder.java index ea623138a4..ea67bdf9e1 100644 --- a/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/MBeanCapabilityBuilder.java +++ b/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/MBeanCapabilityBuilder.java @@ -178,6 +178,14 @@ public class MBeanCapabilityBuilder implements IArtifactBuilder{ }
}
+ /**
+ * Director callback.
+ * All attributes have been notified.
+ *
+ * This builder is using this callback in order to create the initial
+ * properties QNames declaration.
+ *
+ */
public void endAttributes() throws BuilderException
{
_endAttributeHandler.endAttributes();
diff --git a/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/QManMetadataExchangeCapability.java b/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/QManMetadataExchangeCapability.java index 7e58992540..d6255d0bed 100644 --- a/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/QManMetadataExchangeCapability.java +++ b/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/QManMetadataExchangeCapability.java @@ -21,6 +21,10 @@ package org.apache.qpid.management.wsdm.capabilities;
import org.apache.muse.util.xml.XmlUtils;
+import org.apache.muse.ws.metadata.WsxConstants;
+import org.apache.muse.ws.resource.WsResource;
+import org.apache.muse.ws.resource.metadata.MetadataDescriptor;
+import org.apache.muse.ws.resource.metadata.WsrmdConstants;
import org.apache.muse.ws.resource.metadata.ext.WsrfMetadataExchange;
import org.apache.muse.ws.wsdl.WsdlUtils;
import org.apache.qpid.management.wsdm.muse.resources.QManWsResource;
@@ -60,4 +64,36 @@ public class QManMetadataExchangeCapability extends WsrfMetadataExchange return wsdl;
}
+
+ /**
+ * Returns the resource metadata descriptor associated with the owenr
+ * resource of thi capability.
+ *
+ * @return the resource metadata descriptor.
+ */
+ protected Element getResourceMetadataDescriptor()
+ {
+ WsResource resource = (WsResource)getResource();
+ MetadataDescriptor metadataDescriptor = resource.getPropertyCollection().getMetadata();
+ return metadataDescriptor.toXML();
+ }
+
+ public Element[] getMetadata(String dialect)
+ {
+ if (dialect == null)
+ {
+ return new Element[]{
+ getResourceMetadataDescriptor(),
+ getWSDL()};
+ } else {
+ if (WsrmdConstants.NAMESPACE_URI.equals(dialect))
+ {
+ return new Element[]{getResourceMetadataDescriptor()};
+ } else if (WsxConstants.WSDL_DIALECT.equals(dialect))
+ {
+ return new Element[]{getWSDL()};
+ }
+ }
+ return super.getMetadata(dialect);
+ }
}
\ No newline at end of file diff --git a/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/Result.java b/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/Result.java index b8e22b4bc7..a00d2665ae 100644 --- a/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/Result.java +++ b/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/Result.java @@ -29,11 +29,9 @@ import java.util.*; *
* @author Andrea Gazzarini
*/
-public class Result
+public final class Result
{
- private long _statusCode;
- private String _statusText;
- private Map<String,Object> _outputParameters;
+ private final Map<String,Object> _outputParameters;
/**
* Builds a new result DTO with the given parameters.
@@ -42,53 +40,11 @@ public class Result * @param statusText the status message.
* @param outputParameters the output parameters.
*/
- public Result(long statusCode, String statusText,Map<String, Object> outputParameters)
+ public Result(Map<String, Object> outputParameters)
{
- this._statusCode = statusCode;
- this._statusText = statusText;
this._outputParameters = outputParameters;
}
-
- /**
- * Returns the status code.
- *
- * @return the status code.
- */
- public long getStatusCode()
- {
- return _statusCode;
- }
-
- /**
- * Sets the status code.
- *
- * @param statusCode the status code.
- */
- void setStatusCode(long statusCode)
- {
- this._statusCode = statusCode;
- }
-
- /**
- * Returns the status text.
- *
- * @return the status text.
- */
- public String getStatusText()
- {
- return _statusText;
- }
-
- /**
- * Sets the status text.
- *
- * @param statusText the status text.
- */
- void setStatusText(String statusText)
- {
- this._statusText = statusText;
- }
-
+
/**
* Returns the output parameterss.
*
@@ -98,14 +54,4 @@ public class Result {
return _outputParameters;
}
-
- /**
- * Sets the output parameters.
- *
- * @param outputParameters the output parameters.
- */
- void setOutputParameters(Map<String, Object> outputParameters)
- {
- this._outputParameters = outputParameters;
- }
-}
+}
\ No newline at end of file diff --git a/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/RmdBuilder.java b/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/RmdBuilder.java index 86aba0e5bb..c1678eb43f 100644 --- a/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/RmdBuilder.java +++ b/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/RmdBuilder.java @@ -128,7 +128,8 @@ class RmdBuilder implements IArtifactBuilder */
public Element[] getResourceMetadataDescriptor()
{
- Element [] properties = _metadataDescriptor.toArray(new Element[0]);
+ Element [] properties = _metadataDescriptor.toArray(
+ new Element[_metadataDescriptor.size()]);
return properties;
}
}
\ No newline at end of file diff --git a/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/WSDMArtifactsDirector.java b/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/WSDMArtifactsDirector.java index c9ffd5eac0..35a919c295 100644 --- a/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/WSDMArtifactsDirector.java +++ b/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/WSDMArtifactsDirector.java @@ -35,7 +35,7 @@ import org.w3c.dom.Element; *
* @author Andrea Gazzarini
*/
-class WSDMArtifactsDirector
+final class WSDMArtifactsDirector
{
private final ObjectName _eventSourceObjectName;
private final MBeanInfo _metadata;
@@ -189,7 +189,8 @@ class WSDMArtifactsDirector *
* @param resource the ws resource.
*/
- public void setResource(Resource resource) {
+ public void setResource(Resource resource)
+ {
_wsdlBuilder.setWsdlPath(resource.getWsdlPath());
}
}
\ No newline at end of file diff --git a/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/WsArtifactsFactory.java b/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/WsArtifactsFactory.java index 2a1bf059c3..94505d28f7 100644 --- a/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/WsArtifactsFactory.java +++ b/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/WsArtifactsFactory.java @@ -105,13 +105,18 @@ class WsArtifactsFactory _cache.put(searchKey, result);
- LOGGER.debug(Messages.QMAN_200040_WS_ARTIFACTS_CACHED,searchKey);
+ LOGGER.debug(
+ Messages.QMAN_200040_WS_ARTIFACTS_CACHED,
+ searchKey);
}
return result;
} catch(Exception exception)
{
- throw new ArtifactsNotAvailableException(result,exception,objectName);
+ throw new ArtifactsNotAvailableException(
+ result,
+ exception,
+ objectName);
}
}
diff --git a/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/WsdlBuilder.java b/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/WsdlBuilder.java index 02b25eb02f..6bfccda1ce 100644 --- a/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/WsdlBuilder.java +++ b/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/capabilities/WsdlBuilder.java @@ -23,20 +23,22 @@ package org.apache.qpid.management.wsdm.capabilities; import java.net.InetAddress;
import java.util.HashMap;
import java.util.Map;
+import java.util.UUID;
import javax.management.MBeanAttributeInfo;
import javax.management.MBeanOperationInfo;
import javax.management.MBeanParameterInfo;
import javax.management.ObjectName;
-import javax.xml.XMLConstants;
-import javax.xml.namespace.QName;
+import javax.xml.transform.TransformerException;
import org.apache.muse.core.Environment;
+import org.apache.muse.core.serializer.SerializerRegistry;
import org.apache.muse.util.ReflectUtils;
import org.apache.muse.util.xml.XmlUtils;
import org.apache.muse.ws.wsdl.WsdlUtils;
import org.apache.qpid.management.Messages;
import org.apache.qpid.management.Names;
+import org.apache.qpid.management.wsdm.muse.engine.WSDMAdapterEnvironment;
import org.apache.qpid.management.wsdm.muse.serializer.ObjectSerializer;
import org.apache.qpid.qman.debug.WsdlDebugger;
import org.apache.qpid.transport.util.Logger;
@@ -49,126 +51,61 @@ import org.w3c.dom.Element; *
* @author Andrea Gazzarini
*/
-class WsdlBuilder implements IArtifactBuilder {
+class WsdlBuilder implements IArtifactBuilder,Constants {
private final static Logger LOGGER = Logger.get(WsdlBuilder.class);
- private Environment _environment;
+ private WSDMAdapterEnvironment _environment;
private Document _document;
private Element schema;
-
- private ObjectSerializer serializer = new ObjectSerializer();
-
+ private Element _wsrpProperties;
+ private ObjectSerializer _serializer;
private ObjectName _objectName;
-
- private boolean mapTypeHasBeenDeclared;
- private boolean uuidTypeHasBeenDeclared;
private Map<String, String> arrayTypesAlreadyDeclared = new HashMap<String, String>();
+ private Element _arrayComplexType;
+ private Element _nestedArrayType;
+
+ /**
+ * For each attibute the corresponding xml type definition must be inserted on the QMan
+ * schema related section.
+ * After that, a reference to that definition must be declared on the wsrp element .
+ *
+ * @param attributeMetadata the attribute metadata.
+ * @throws BuilderException only if this builder wasn't able to get a reference (via XPath)
+ * to QMan schema section.
+ */
public void onAttribute(MBeanAttributeInfo attributeMetadata) throws BuilderException
{
try
{
- /*
- <xs:element name='accountAttributes'>
- <xs:complexType>
- <xs:sequence>
- <xs:element maxOccurs='unbounded' minOccurs='0' name='entry'>
- <xs:complexType>
- <xs:sequence>
- <xs:element minOccurs='0' name='key' type='xs:string'/>
- <xs:element minOccurs='0' name='value' type='xs:anyType'/>
- </xs:sequence>
- </xs:complexType>
- </xs:element>
- </xs:sequence>
- </xs:complexType>
- </xs:element>
-*/
- schema.appendChild(defineSchemaFor(attributeMetadata.getType(), attributeMetadata.getName()));
- Element wsrpProperties = (Element) XPathAPI.selectSingleNode(
- _document,
- "/wsdl:definitions/wsdl:types/xsd:schema[" +
- "@targetNamespace='http://amqp.apache.org/qpid/management/qman']" +
- "/xsd:element[@name='QManWsResourceProperties']/xsd:complexType/xsd:sequence");
+ String attributeName = attributeMetadata.getName();
+ schema.appendChild(defineSchemaFor(attributeMetadata.getType(), attributeName));
Element propertyRef= XmlUtils.createElement(_document, XSD_ELEMENT_QNAME);
+ propertyRef.setAttribute(MIN_OCCURS, "0");
propertyRef.setAttribute(
- "ref",
- Names.PREFIX+":"+attributeMetadata.getName());
- propertyRef.setAttribute("minOccurs", "0");
- wsrpProperties.appendChild(propertyRef);
-
+ REF_ATTRIBUTE,
+ Names.PREFIX+":"+attributeName);
+
+ _wsrpProperties.appendChild(propertyRef);
} catch(Exception exception)
{
throw new BuilderException(exception);
}
}
- private final static QName XSD_ELEMENT_QNAME = new QName(XMLConstants.W3C_XML_SCHEMA_NS_URI,"element","xsd");
- private final static QName XSD_COMPLEX_TYPE_QNAME = new QName(XMLConstants.W3C_XML_SCHEMA_NS_URI,"complexType","xsd");
- private final static QName XSD_SEQUENCE_QNAME = new QName(XMLConstants.W3C_XML_SCHEMA_NS_URI,"sequence","xsd");
-
@SuppressWarnings("unchecked")
private Element defineSchemaFor(String type, String attributeName) throws Exception
{
- if (type.equals("java.util.Map"))
+ Element propertyDeclaration = XmlUtils.createElement(_document, XSD_ELEMENT_QNAME);
+ String xmlType = null;
+ if (type.equals(Map.class.getName()))
{
- if (!mapTypeHasBeenDeclared)
- {
- Element complexType = XmlUtils.createElement(_document, XSD_COMPLEX_TYPE_QNAME);
- complexType.setAttribute("name","map");
- Element sequence = XmlUtils.createElement(_document, XSD_SEQUENCE_QNAME);
-
- Element entry = XmlUtils.createElement(_document, XSD_ELEMENT_QNAME);
- entry.setAttribute("name", "entry");
- entry.setAttribute("minOccurs", "0");
- entry.setAttribute("maxOccurs", "unbounded");
-
- Element complexType2 = XmlUtils.createElement(_document, XSD_COMPLEX_TYPE_QNAME);
- Element sequence2 = XmlUtils.createElement(_document, XSD_SEQUENCE_QNAME);
-
- Element key = XmlUtils.createElement(_document, XSD_ELEMENT_QNAME);
- key.setAttribute("name", "key");
- key.setAttribute("type", "xsd:string");
-
- Element value = XmlUtils.createElement(_document, XSD_ELEMENT_QNAME);
- value.setAttribute("name", "value");
- value.setAttribute("type", "xsd:anyType");
-
- sequence2.appendChild(key);
- sequence2.appendChild(value);
- complexType2.appendChild(sequence2);
- entry.appendChild(complexType2);
- sequence.appendChild(entry);
- complexType.appendChild(sequence);
- schema.appendChild(complexType);
- mapTypeHasBeenDeclared = true;
- }
- Element propertyDeclaration = XmlUtils.createElement(_document, XSD_ELEMENT_QNAME);
- propertyDeclaration.setAttribute("name",attributeName);
- propertyDeclaration.setAttribute("type", "qman:map");
- return propertyDeclaration;
-
- } else if ("java.util.UUID".equals(type))
- {
- if (!uuidTypeHasBeenDeclared)
- {
- Element complexType = XmlUtils.createElement(_document, XSD_COMPLEX_TYPE_QNAME);
- complexType.setAttribute("name", "uuid");
- Element sequence = XmlUtils.createElement(_document, XSD_SEQUENCE_QNAME);
- Element uuid = XmlUtils.createElement(_document, XSD_ELEMENT_QNAME);
- uuid.setAttribute("name", "uuid");
- uuid.setAttribute("type", "xsd:string");
- sequence.appendChild(uuid);
- complexType.appendChild(sequence);
- schema.appendChild(complexType);
- uuidTypeHasBeenDeclared = true;
- }
- Element propertyDeclaration = XmlUtils.createElement(_document, XSD_ELEMENT_QNAME);
- propertyDeclaration.setAttribute("name",attributeName);
- propertyDeclaration.setAttribute("type", "qman:uuid");
- return propertyDeclaration;
+ xmlType="qman:map";
+ } else if (UUID.class.getName().equals(type))
+ {
+ xmlType = "qman:uuid";
} else if (type.startsWith("["))
{
Class arrayClass = Class.forName(type);
@@ -177,143 +114,40 @@ class WsdlBuilder implements IArtifactBuilder { arrayType = Character.toUpperCase(arrayType.charAt(0))+arrayType.substring(1);
if (!arrayTypesAlreadyDeclared.containsKey(type))
{
- Element complexType = XmlUtils.createElement(_document, XSD_COMPLEX_TYPE_QNAME);
- complexType.setAttribute("name", "arrayOf"+arrayType);
- Element sequence = XmlUtils.createElement(_document, XSD_SEQUENCE_QNAME);
- Element entry = XmlUtils.createElement(_document, XSD_ELEMENT_QNAME);
- entry.setAttribute("name", "entry");
- entry.setAttribute("type", serializer.getXmlType(clazz));
- sequence.appendChild(entry);
- complexType.appendChild(sequence);
- schema.appendChild(complexType);
+ _arrayComplexType.setAttribute(NAME_ATTRIBUTE, "arrayOf"+arrayType);
+ _nestedArrayType.setAttribute(TYPE_ATTRIBUTE, _serializer.getXmlType(clazz));
+ schema.appendChild(_arrayComplexType);
arrayTypesAlreadyDeclared.put(type, arrayType);
}
- Element propertyDeclaration = XmlUtils.createElement(_document, XSD_ELEMENT_QNAME);
- propertyDeclaration.setAttribute("name",attributeName);
- propertyDeclaration.setAttribute("type", "qman:arrayOf"+arrayTypesAlreadyDeclared.get(type));
- return propertyDeclaration;
+ xmlType = "qman:arrayOf"+arrayTypesAlreadyDeclared.get(type);
}
- else {
- Element propertyDeclaration = XmlUtils.createElement(_document, XSD_ELEMENT_QNAME);
- propertyDeclaration.setAttribute("name",attributeName);
- propertyDeclaration.setAttribute("type", serializer.getXmlType(Class.forName(type)));
-
- return propertyDeclaration;
+ else
+ {
+ xmlType = _serializer.getXmlType(Class.forName(type));
}
+ propertyDeclaration.setAttribute(NAME_ATTRIBUTE,attributeName);
+ propertyDeclaration.setAttribute(TYPE_ATTRIBUTE, xmlType);
+ return propertyDeclaration;
}
-
+
+ /**
+ * Initializes this builder.
+ *
+ * @param objectName the name of the current JMX entity.
+ * @throws BuilderException when it's not possible to proceed with the initialization.
+ */
public void begin(ObjectName objectName) throws BuilderException
{
this._objectName = objectName;
- try
- {
- Attr location = (Attr) XPathAPI.selectSingleNode(
- _document,
- "/wsdl:definitions/wsdl:service/wsdl:port/wsdl-soap:address/@location");
-
- StringBuilder builder = new StringBuilder("http://")
- .append(InetAddress.getLocalHost().getHostName())
- .append(':')
- .append(System.getProperty(Names.ADAPTER_PORT_PROPERTY_NAME,"8080"))
- .append('/')
- .append("qman")
- .append('/')
- .append("services/QManWsResource");
- location.setValue(builder.toString());
- } catch(Exception exception)
- {
- LOGGER.error(
- exception,
- Messages.QMAN_100026_SOAP_ADDRESS_REPLACEMENT_FAILURE);
- throw new BuilderException(exception);
- }
-
- try
- {
- schema = (Element) XPathAPI.selectSingleNode(
- _document.getDocumentElement(),
- "/wsdl:definitions/wsdl:types/xsd:schema[@targetNamespace='http://amqp.apache.org/qpid/management/qman']");
- } catch(Exception exception)
- {
- LOGGER.error(
- exception,
- Messages.QMAN_100034_WSDL_SCHEMA_SECTION_NOT_FOUND);
- throw new BuilderException(exception);
- }
-/*
- <xs:complexType name='InvocationResult'>
- <xs:sequence>
- <xs:element name='statusCode' type="xsd:long" />
- <xs:element name='statusText' type="xsd:string" />
- <xs:element name='outputParameters'>
- <xs:complexType>
- <xs:sequence>
-
- <xs:element maxOccurs='unbounded' minOccurs='0' name='entry'>
-
- <xs:complexType>
- <xs:sequence>
- <xs:element minOccurs='0' name="name' type='xs:string'/>
- <xs:element minOccurs='0' name="value" type='xs:anyType'/>
- </xs:sequence>
- </xs:complexType>
- </xs:element>
- </xs:sequence>
- </xs:complexType>
- </xs:element>
- </xs:sequence>
- </xs:complexType>
-*/
- Element complexTypeResult = _document.createElement("xsd:complexType");
- complexTypeResult.setAttribute("name", "result");
- Element sequence = _document.createElement("xsd:sequence");
- complexTypeResult.appendChild(sequence);
-
- Element statusCode = _document.createElement("xsd:element");
- statusCode.setAttribute("name", "statusCode");
- statusCode.setAttribute("type", "xsd:long");
-
- Element statusText = _document.createElement("xsd:element");
- statusText.setAttribute("name", "statusText");
- statusText.setAttribute("type", "xsd:string");
-
- sequence.appendChild(statusCode);
- sequence.appendChild(statusText);
-
- Element outputParams = _document.createElement("xsd:complexType");
- outputParams.setAttribute("name", "outputParameters");
- sequence.appendChild(outputParams);
-
- Element complexTypeOutput = _document.createElement("xsd:complexType");
- Element outputSequence = _document.createElement("xsd:sequence");
+ this._serializer = (ObjectSerializer) SerializerRegistry.getInstance().getSerializer(Object.class);
- outputParams.appendChild(complexTypeOutput);
- complexTypeOutput.appendChild(outputSequence);
+ createWsrpPropertiesElement();
- Element entry = _document.createElement("xsd:element");
- entry.setAttribute("maxOccurs", "unbounded");
- entry.setAttribute("minOccurs", "0");
- entry.setAttribute("name", "entry");
+ createReusableArrayComplextType();
- outputSequence.appendChild(entry);
+ replaceDummyServiceLocationOnWsdl();
- Element entryComplexType = _document.createElement("xsd:complexType");
- Element entrySequence = _document.createElement("xsd:sequence");
- entryComplexType.appendChild(entrySequence);
- entry.appendChild(entryComplexType);
-
- Element name = _document.createElement("xsd:name");
- name.setAttribute("name", "key");
- name.setAttribute("type", "xsd:string");
-
- Element value = _document.createElement("xsd:element");
- value.setAttribute("name", "value");
- value.setAttribute("type", "xsd:anyType");
-
- entrySequence.appendChild(name);
- entrySequence.appendChild(value);
-
- schema.appendChild(complexTypeResult);
+ createSchemaElement();
}
public void onOperation(MBeanOperationInfo operationMetadata) throws BuilderException
@@ -350,9 +184,9 @@ class WsdlBuilder implements IArtifactBuilder { <xs:sequence />
</xs:complexType>
*/
+
try
{
- // <xs:element name='purgeRequest' type='qman:purgeRequest' />
// <xsd:element xmlns="" name="purgeRequest" type="qman:purgeRequest"/>
Element methodRequestElement= _document.createElement("xsd:element");
@@ -361,13 +195,13 @@ class WsdlBuilder implements IArtifactBuilder { methodRequestElement.setAttribute("type", "qman:"+methodNameRequest);
// <xs:element name='purgeResponse' type='qman:purgeResponse' />
- Element methodResponseElement= _document.createElement("xsd:element");
+// Element methodResponseElement= _document.createElement("xsd:element");
String methodNameResponse= operationMetadata.getName()+"Response";
- methodResponseElement.setAttribute("name", methodNameResponse);
- methodResponseElement.setAttribute("type", "qman:"+methodNameResponse);
+// methodResponseElement.setAttribute("name", methodNameResponse);
+// methodResponseElement.setAttribute("type", "qman:result");//+methodNameResponse);
schema.appendChild(methodRequestElement);
- schema.appendChild(methodResponseElement);
+// schema.appendChild(methodResponseElement);
/*
<xs:complexType name='purgeRequest'>
@@ -391,19 +225,6 @@ class WsdlBuilder implements IArtifactBuilder { methodNameRequestComplexType.appendChild(methodNameRequestComplexTypeSequence);
schema.appendChild(methodNameRequestComplexType);
- Element methodNameResponseComplexType = _document.createElement("xsd:complexType");
- methodNameResponseComplexType.setAttribute("name", methodNameResponse);
-
- Element methodNameResponseSequence = _document.createElement("xsd:sequence");
- methodNameResponseComplexType.appendChild(methodNameResponseSequence);
-
- Element result = _document.createElement("xsd:element");
- result.setAttribute("name", "result");
- result.setAttribute("type", "qman:result");
- methodNameResponseSequence.appendChild(result);
-
- schema.appendChild(methodNameResponseComplexType);
-
/*
<message name="purgeResponseMessage">
<part element='qman:purgeResponse' name='purgeResponse'></part>
@@ -428,7 +249,7 @@ class WsdlBuilder implements IArtifactBuilder { Element responseMessage = _document.createElement("wsdl:message");
responseMessage.setAttribute("name", responseMessageName);
Element responsePart = _document.createElement("wsdl:part");
- responsePart.setAttribute("element", "qman:"+methodNameResponse);
+ responsePart.setAttribute("element", "qman:result");//+methodNameResponse);
responsePart.setAttribute("name", methodNameResponse);
responseMessage.appendChild(responsePart);
@@ -506,29 +327,134 @@ class WsdlBuilder implements IArtifactBuilder { }
}
+ /**
+ * Director callback : all attributes have been notified.
+ * Nothing to do here.
+ */
public void endAttributes()
{
// N.A.
}
+ /**
+ * Director callback : all operations have been notified.
+ * Nothing to do here.
+ */
public void endOperations()
{
-
+ // N.A.
}
+ /**
+ * Returns the WSDL built by this builder.
+ *
+ * @return the WSDL built by this builder.
+ */
public Document getWsdl()
{
WsdlDebugger.debug(_objectName,_document);
return _document;
}
+ /**
+ * Injects the application context environment
+ * on this builder.
+ *
+ * @param environment the application context environment.
+ */
public void setEnvironment(Environment environment)
{
- this._environment = environment;
+ this._environment = (WSDMAdapterEnvironment)environment;
}
+ /**
+ * Injects the path of the wsdl document.
+ *
+ * @param wsdlPath the path of the wsdl document.
+ */
public void setWsdlPath(String wsdlPath)
{
_document = WsdlUtils.createWSDL(_environment, wsdlPath, true);
}
-}
+
+ /**
+ * Create a reference to the WSRP properties element.
+ *
+ * @throws BuilderException in case of XPath evaluation problem.
+ */
+ private void createWsrpPropertiesElement() throws BuilderException
+ {
+ try
+ {
+ _wsrpProperties = (Element) XPathAPI.selectSingleNode(
+ _document,
+ WSRP_PROPERTIES_XPATH);
+ } catch (TransformerException exception)
+ {
+ LOGGER.error(Messages.QMAN_100040_UNABLE_TO_LOCATE_WSRP_PROPERTIES);
+ throw new BuilderException(exception);
+ }
+ }
+
+ /**
+ * Creates a template element that will be used for array
+ * type schema declaration(s).
+ */
+ private void createReusableArrayComplextType()
+ {
+ _arrayComplexType = XmlUtils.createElement(_document, XSD_COMPLEX_TYPE_QNAME);
+ Element sequence = XmlUtils.createElement(_document, XSD_SEQUENCE_QNAME);
+ _nestedArrayType = XmlUtils.createElement(_document, XSD_ELEMENT_QNAME);
+ _nestedArrayType.setAttribute(NAME_ATTRIBUTE, "entry");
+ sequence.appendChild(_nestedArrayType);
+ _arrayComplexType.appendChild(sequence);
+ }
+
+ private void createSchemaElement() throws BuilderException
+ {
+ try
+ {
+ schema = (Element) XPathAPI.selectSingleNode(
+ _document.getDocumentElement(),
+ QMAN_SCHEMA_XPATH);
+ } catch(Exception exception)
+ {
+ LOGGER.error(
+ exception,
+ Messages.QMAN_100034_WSDL_SCHEMA_SECTION_NOT_FOUND);
+ throw new BuilderException(exception);
+ }
+ }
+
+ /**
+ * The template WSDL contains a dummy URL as service location that
+ * needs to be replaced with the real service address.
+ *
+ * @throws BuilderException when replacement fails (XPath problem).
+ */
+ private void replaceDummyServiceLocationOnWsdl() throws BuilderException
+ {
+ try
+ {
+ Attr location = (Attr) XPathAPI.selectSingleNode(
+ _document,
+ SERVICE_LOCATION_XPATH);
+
+ StringBuilder builder = new StringBuilder("http://")
+ .append(InetAddress.getLocalHost().getHostName())
+ .append(':')
+ .append(System.getProperty(Names.ADAPTER_PORT_PROPERTY_NAME,"8080"))
+ .append('/')
+ .append(_environment.getContextPath())
+ .append('/')
+ .append("services/QManWsResource");
+ location.setValue(builder.toString());
+ } catch(Exception exception)
+ {
+ LOGGER.error(
+ exception,
+ Messages.QMAN_100026_SOAP_ADDRESS_REPLACEMENT_FAILURE);
+ throw new BuilderException(exception);
+ }
+ }
+}
\ No newline at end of file diff --git a/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/common/EntityInstanceNotFoundFault.java b/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/common/EntityInstanceNotFoundFault.java index 25bb871e75..116d74727a 100644 --- a/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/common/EntityInstanceNotFoundFault.java +++ b/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/common/EntityInstanceNotFoundFault.java @@ -50,6 +50,9 @@ public class EntityInstanceNotFoundFault extends QManFault */
public EntityInstanceNotFoundFault(EndpointReference endpointReference, ObjectName targetEntityName)
{
- super(endpointReference,EXCEPTION_QNAME, targetEntityName.getCanonicalName());
+ super(
+ endpointReference,
+ EXCEPTION_QNAME,
+ targetEntityName.getCanonicalName());
}
}
\ No newline at end of file diff --git a/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/common/ThreadSession.java b/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/common/ThreadSession.java index bc214b8b25..588879b951 100644 --- a/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/common/ThreadSession.java +++ b/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/common/ThreadSession.java @@ -25,7 +25,6 @@ import javax.management.ObjectName; import org.w3c.dom.Document; import org.w3c.dom.Element; - /** * Thread-scoped session. * @@ -35,7 +34,8 @@ public class ThreadSession { private ObjectName _objectName; private Document _wsdl; - private Element [] additionalProperties; + private Element [] _wsrmdProperties; + /** * Empty constructor. */ @@ -90,7 +90,7 @@ public class ThreadSession */ public Element[] getResourceMetadataDescriptor() { - return additionalProperties; + return _wsrmdProperties; } /** @@ -100,6 +100,6 @@ public class ThreadSession */ public void setResourceMetadataDescriptor(Element[] rmd) { - this.additionalProperties = rmd; + this._wsrmdProperties = rmd; } }
\ No newline at end of file diff --git a/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/muse/engine/WSDMAdapterEnvironment.java b/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/muse/engine/WSDMAdapterEnvironment.java index f47a587830..b5d978e0e5 100644 --- a/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/muse/engine/WSDMAdapterEnvironment.java +++ b/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/muse/engine/WSDMAdapterEnvironment.java @@ -64,6 +64,11 @@ public class WSDMAdapterEnvironment extends AbstractEnvironment return _realDirectory;
}
+ /**
+ * Returns the default endpoint reference URI.
+ *
+ * @return the default endpoint reference URI.
+ */
public String getDefaultURIPrefix()
{
return new StringBuilder()
@@ -79,4 +84,14 @@ public class WSDMAdapterEnvironment extends AbstractEnvironment .append("/services/")
.toString();
}
+
+ /**
+ * Returns the context path name of QMan application.
+ *
+ * @return the context path name of QMan application.
+ */
+ public String getContextPath()
+ {
+ return _servletContext.getContextPath();
+ }
}
\ No newline at end of file diff --git a/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/muse/serializer/InvocationResultSerializer.java b/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/muse/serializer/InvocationResultSerializer.java index 0af570eacf..b819d52ad1 100644 --- a/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/muse/serializer/InvocationResultSerializer.java +++ b/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/muse/serializer/InvocationResultSerializer.java @@ -38,8 +38,6 @@ import org.w3c.dom.Element; */
public class InvocationResultSerializer implements Serializer
{
- private Serializer _longSerializer = SerializerRegistry.getInstance().getSerializer(long.class);
- private Serializer _stringSerializer = SerializerRegistry.getInstance().getSerializer(String.class);
private Serializer _mapSerializer = SerializerRegistry.getInstance().getSerializer(Map.class);
/**
@@ -51,26 +49,8 @@ public class InvocationResultSerializer implements Serializer @SuppressWarnings("unchecked")
public Object fromXML(Element elementData) throws SoapFault
{
- long statusCode = 0;
- String statusText = null;
- Map<String, Object> outputSection = null;
-
- Element[] elements = XmlUtils.getAllElements(elementData);
- for (Element element : elements)
- {
- if ("statusCode".equals(element.getNodeName()))
- {
- statusCode = (Long) _longSerializer.fromXML(element);
- } else if ("statusText".equals(element.getNodeName()))
- {
- statusText = (String) _stringSerializer.fromXML(element);
- } else if ("outputParameters".equals(element.getNodeName()))
- {
- outputSection = (Map<String, Object>) _mapSerializer.fromXML(element);
- }
- }
-
- return new Result(statusCode,statusText,outputSection);
+ Element outputParameters = XmlUtils.getFirstElement(elementData);
+ return new Result((Map<String, Object>) _mapSerializer.fromXML(outputParameters));
}
/**
@@ -95,17 +75,11 @@ public class InvocationResultSerializer implements Serializer {
Result result = (Result) obj;
Element root = XmlUtils.createElement(qname);
- Element statusCode = SerializerRegistry.getInstance().getSerializer(long.class).toXML(result.getStatusCode(), new QName("statusCode"));
- Element statusText = SerializerRegistry.getInstance().getSerializer(String.class).toXML(result.getStatusText(), new QName("statusText"));
-
- root.appendChild(statusCode);
- root.appendChild(statusText);
if (result.getOutputParameters() != null)
{
Element outputSection = SerializerRegistry.getInstance().getSerializer(Map.class).toXML(result.getOutputParameters(), new QName("outputParameters"));
root.appendChild(outputSection);
}
- return root;
-
+ return root;
}
}
\ No newline at end of file diff --git a/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/muse/serializer/MapSerializer.java b/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/muse/serializer/MapSerializer.java index 1d0d02c669..07e1dfdc56 100644 --- a/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/muse/serializer/MapSerializer.java +++ b/qpid/java/management/client/src/main/java/org/apache/qpid/management/wsdm/muse/serializer/MapSerializer.java @@ -62,25 +62,29 @@ public class MapSerializer implements Serializer public Object fromXML(Element xml) throws SoapFault
{
Map<Object,Object> result = new HashMap<Object,Object>();
- Element[] children = XmlUtils.getAllElements(xml);
- Serializer objectDeserializer = SerializerRegistry.getInstance().getSerializer(Object.class);
- for (Element entry : children)
+ if (xml != null)
{
- Element[] keysAndValues = XmlUtils.getAllElements(entry);
- Object key = null;
- Object value = null;
- for (Element element : keysAndValues)
+ Element[] children = XmlUtils.getAllElements(xml);
+ Serializer objectDeserializer = SerializerRegistry.getInstance().getSerializer(Object.class);
+
+ for (Element entry : children)
{
- if (Names.KEY.equals(element.getLocalName()))
- {
- key = _stringSerializer.fromXML(element);
- } else if (Names.VALUE.equals(element.getLocalName()))
+ Element[] keysAndValues = XmlUtils.getAllElements(entry);
+ Object key = null;
+ Object value = null;
+ for (Element element : keysAndValues)
{
- value = objectDeserializer.fromXML(element);
+ if (Names.KEY.equals(element.getLocalName()))
+ {
+ key = _stringSerializer.fromXML(element);
+ } else if (Names.VALUE.equals(element.getLocalName()))
+ {
+ value = objectDeserializer.fromXML(element);
+ }
}
+ result.put(key, value);
}
- result.put(key, value);
}
return result;
}
|