From ec5d9a187792278d58012def6cd4fa204008a422 Mon Sep 17 00:00:00 2001 From: Andrea Gazzarini Date: Tue, 27 Jan 2009 10:11:10 +0000 Subject: QPID-1606 : QMan WS-DM examples git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@738045 13f79535-47bb-0310-9956-ffa450edef68 --- .../management/example/AbstractQManExample.java | 140 ++++++++++ .../GetMultipleResourcePropertiesExample.java | 189 +++++++++++++ .../example/GetQManResourceMembersExample.java | 93 +++++++ .../GetResourceMetadataDescriptorExample.java | 156 +++++++++++ .../GetResourcePropertyDocumentExample.java | 112 ++++++++ .../example/GetResourcePropertyExample.java | 172 ++++++++++++ .../management/example/GetWSDLMetadataExample.java | 156 +++++++++++ .../example/SetResourcePropertyExample.java | 306 +++++++++++++++++++++ 8 files changed, 1324 insertions(+) create mode 100644 java/management/client/src/example/org/apache/qpid/management/example/AbstractQManExample.java create mode 100644 java/management/client/src/example/org/apache/qpid/management/example/GetMultipleResourcePropertiesExample.java create mode 100644 java/management/client/src/example/org/apache/qpid/management/example/GetQManResourceMembersExample.java create mode 100644 java/management/client/src/example/org/apache/qpid/management/example/GetResourceMetadataDescriptorExample.java create mode 100644 java/management/client/src/example/org/apache/qpid/management/example/GetResourcePropertyDocumentExample.java create mode 100644 java/management/client/src/example/org/apache/qpid/management/example/GetResourcePropertyExample.java create mode 100644 java/management/client/src/example/org/apache/qpid/management/example/GetWSDLMetadataExample.java create mode 100644 java/management/client/src/example/org/apache/qpid/management/example/SetResourcePropertyExample.java (limited to 'java/management/client/src/example/org') diff --git a/java/management/client/src/example/org/apache/qpid/management/example/AbstractQManExample.java b/java/management/client/src/example/org/apache/qpid/management/example/AbstractQManExample.java new file mode 100644 index 0000000000..ad05548f12 --- /dev/null +++ b/java/management/client/src/example/org/apache/qpid/management/example/AbstractQManExample.java @@ -0,0 +1,140 @@ +/* + * + * 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.example; + +import java.io.IOException; +import java.net.URI; + +import org.apache.muse.ws.addressing.EndpointReference; + +/** + * Common interface for all QMan related examples. + * + * @author Andrea Gazzarini + */ +public abstract class AbstractQManExample +{ + private final static String LINE_SEPARATOR = System.getProperty("line.separator","\n"); + protected final static String PREFIX = "qman"; + + /** + * Prints out the expected command line of this sample and after that exits. + */ + static void printUsageAndExit(String reason) + { + StringBuilder builder = new StringBuilder(); + builder.append("WARNING! Unable to run this sample : ") + .append(reason) + .append(LINE_SEPARATOR) + .append("-------------------------------------------------------------") + .append(LINE_SEPARATOR) + .append("Expected command line args for this sample are :") + .append(LINE_SEPARATOR) + .append(LINE_SEPARATOR) + .append("1) host : ip or host name where QMan is running.") + .append(LINE_SEPARATOR) + .append("2) port : port number where QMan is running.") + .append(LINE_SEPARATOR) + .append("------------------------------------------------------------"); + System.out.println(builder); + System.exit(1); + } + + /** + * Prints out a description of this example. + */ + abstract void printOutExampleDescription(); + + /** + * Executes this example. + * Note that this is just a template method used to avoid code duplication + * (printOutExampleDescription() line) so in order to see how the example + * works you should have a look at the concrete implementation of + * executeExample(String host, int port). + * + * @param host the host where QMan is running. + * @param port the port where QMan is running. + */ + void execute(String [] arguments) + { + if (arguments.length != 2){ + printUsageAndExit("invalid command line was given."); + } + + try + { + // 1) Parses command line arguments... + String host = arguments[0]; + int port = Integer.parseInt(arguments[1]); + + printOutExampleDescription(); + + waitForUserInput("Type enter to proceed..."); + + executeExample(host, port); + + } catch(NumberFormatException exception) + { + printUsageAndExit("port number must be a number."); + } catch(Exception exception) + { + System.out.println("-----------------------EXAMPLE FAILURE-----------"); + System.out.println("Not well-defined exception was detected while"); + System.out.println("running the example."); + exception.printStackTrace(System.out); + System.out.println("--------------------------------------------------------"); + } + } + + private void waitForUserInput(String message) throws IOException { + System.out.println(message); + System.in.read(); + } + + /** + * Each concrete implementor must define here how the example works. + * So, on top of that, user who wants to see how to use a specific feature + * should have a look at the concrete implementation of this method.. + * + * @param host the host where QMan is running. + * @param port the port where QMan is running. + * @throws Exception when the example fails (not at application level). + */ + abstract void executeExample(String host, int port) throws Exception; + + /** + * Returns the endpoint reference of the adapter service. + * + * @param host ip or host name where the service is running. + * @param port the port number of the server where the service is running. + * @return the endpoint reference of the adapter service. + */ + EndpointReference getAdapterEndpointReference(String host, int port) + { + URI address = URI.create( + "http://"+ + host+ + ":"+ + port+ + "/qman/services/adapter"); + return new EndpointReference(address); + } +} \ No newline at end of file diff --git a/java/management/client/src/example/org/apache/qpid/management/example/GetMultipleResourcePropertiesExample.java b/java/management/client/src/example/org/apache/qpid/management/example/GetMultipleResourcePropertiesExample.java new file mode 100644 index 0000000000..607ae32cab --- /dev/null +++ b/java/management/client/src/example/org/apache/qpid/management/example/GetMultipleResourcePropertiesExample.java @@ -0,0 +1,189 @@ +/* + * + * 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.example; + +import java.util.ArrayList; +import java.util.List; + +import javax.xml.namespace.QName; + +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.resource.remote.WsResourceClient; +import org.apache.muse.ws.resource.sg.remote.ServiceGroupClient; +import org.w3c.dom.Element; + +/** + * This example shows how to get properties from a WS-Resource using one request. + * First of all a request is send to WS-DM in order to get all registered WS-Resources. + * If the returned list is not empty then a GetMetadataRequest is sent to the + * first child. + * The result metadata descriptor contains all properties names of the target WS-Resource. + * Those names are then used for retrieving the corresponding values. + * + * @author Andrea Gazzarini + */ +public class GetMultipleResourcePropertiesExample extends AbstractQManExample +{ + + /** + * First of all a request is send to WS-DM in order to get all registered WS-Resources. + * If the returned list is not empty then a GetMetadataRequest is sent to the + * first child. + * The result metadata descriptor contains all properties names of the target WS-Resource. + * Those names are then used for retrieving the corresponding values. + * + * @param host the host where QMan is running. + * @param port the port where QMan is running. + * @throws Exception when the example fails (not at application level). + */ + void executeExample(String host, int port) throws Exception + { + + // 1) Creates an endpoint reference of the adapter service... + EndpointReference adapterEndpointReference = getAdapterEndpointReference(host, port); + + // 2) Creates the Adapter service client... + ServiceGroupClient adapterClient = new ServiceGroupClient(adapterEndpointReference); + adapterClient.setTrace(true); + + // 3) Retrieves the all registered members (QMan WS-Resources) + WsResourceClient [] resources = adapterClient.getMembers(); + + // Sanity check : we cannot proceed if there are no WS-Resources. + if (resources.length == 0) + { + System.out.println("----------------------------WARNING---------------------------"); + System.out.println("Cannot proceed with the example... it seems"); + System.out.println("that there are no managed WS-Resources on QMan."); + System.out.println("Please check QMan in order to see that it is really"); + System.out.println("connected with a broker."); + System.out.println("-------------------------------------------------------------------"); + System.exit(0); + } + + // 4) Creates a proxy handler for service invocation. + ProxyHandler metadataProxyHandler = createProxyHandler(); + + // 5) ..and invokes the GetMetadata on the first member. + WsResourceClient wsResourceClient = resources[0]; + wsResourceClient.setTrace(true); + + // Dialect is RDM for this example + String dialect = "http://docs.oasis-open.org/wsrf/rmd-1"; + Object [] inputParameters = {dialect}; + + // RDM is the first element of the returned array. + // The first element is a wsx:Metadata containing all resource properties. + Element [] metadata = (Element[]) wsResourceClient.invoke(metadataProxyHandler, inputParameters); + Element resourceMetadataDescriptor = metadata[0]; + + // 6) using XPath navigates xml in order to get the list of all properties. + Element [] properties = XmlUtils.findInSubTree( + resourceMetadataDescriptor, + new QName("http://docs.oasis-open.org/wsrf/rmd-1","Property","wsrmd")); + List names = new ArrayList(); + + for (Element property : properties) + { + + String attributeName = property.getAttribute("name"); // = qman: + + // For this example we are only interested on qman namespace related properties... + if (attributeName.startsWith("qman")) + { + String attributeNameWithoutPrefix = attributeName.replaceFirst("qman:", ""); // = + + names.add(new QName( + "http://amqp.apache.org/qpid/management/qman", + attributeNameWithoutPrefix, + "qman")); + } + } + + QName [] qnames = names.toArray(new QName[names.size()]); + + // 7) Send a GetMultipleResourcePropertiesRequest. + // We do nothing with the returned value(s) because it / they + // has / have already printed out (wsResourceClient.setTrace(true)) + @SuppressWarnings("unused") + Element [] values = wsResourceClient.getMultipleResourceProperties(qnames); + } + + /** + * Prints out a description of this example. + */ + void printOutExampleDescription() + { + /* + * * This example shows how to get properties from a WS-Resource using one request. + * First of all a request is send to WS-DM in order to get all registered WS-Resources. + * If the returned list is not empty then a GetMetadataRequest is sent to the + * first child. + * The result metadata descriptor contains all properties names of the target WS-Resource. + * Those names are then used for retrieving the corresponding values. + * + */ + + System.out.println(" "+getClass().getSimpleName()+" "); + System.out.println("-------------------------------------------------------------------"); + System.out.println(); + System.out.println("This example shows how to get properties from a"); + System.out.println("WS-Resource using one request. "); + System.out.println("First of all a request is send to WS-DM in order to get"); + System.out.println("all registered WS-Resources."); + System.out.println("If the returned list is not empty then a GetMetadataRequest"); + System.out.println("to the first child."); + System.out.println("The result metadata descriptor contains all property names of"); + System.out.println("the target WS-Resource."); + System.out.println("Those names are then used for retrieving the corresponding values"); + System.out.println("using the GetMultipleResourceProperties request."); + System.out.println(); + System.out.println("-------------------------------------------------------------------"); + System.out.println(); + } + + /** + * A proxy handler is a module needed in order to make a capability + * service invocation. + * It contains logic to serialize and deserialize request, response, input and + * output parameters during a web service invocation. + * + * @return a proxy handler. + */ + private ProxyHandler createProxyHandler() + { + ProxyHandler handler = new ReflectionProxyHandler(); + handler.setAction("http://schemas.xmlsoap.org/ws/2004/09/mex/GetMetadata"); + handler.setRequestName(new QName("http://schemas.xmlsoap.org/ws/2004/09/mex", "GetMetadata", PREFIX)); + handler.setRequestParameterNames(new QName[]{new QName("http://schemas.xmlsoap.org/ws/2004/09/mex", "Dialect", PREFIX)}); + handler.setResponseName(new QName("http://schemas.xmlsoap.org/ws/2004/09/mex", "Metadata", PREFIX)); + handler.setReturnType(Element[].class); + return handler; + } + + public static void main(String[] arguments) + { + new GetMultipleResourcePropertiesExample().execute(arguments); + } +} \ No newline at end of file diff --git a/java/management/client/src/example/org/apache/qpid/management/example/GetQManResourceMembersExample.java b/java/management/client/src/example/org/apache/qpid/management/example/GetQManResourceMembersExample.java new file mode 100644 index 0000000000..f74a44ab57 --- /dev/null +++ b/java/management/client/src/example/org/apache/qpid/management/example/GetQManResourceMembersExample.java @@ -0,0 +1,93 @@ +/* + * + * 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.example; + +import org.apache.muse.ws.addressing.EndpointReference; +import org.apache.muse.ws.resource.remote.WsResourceClient; +import org.apache.muse.ws.resource.sg.remote.ServiceGroupClient; + +/** + * An example demonstrating the usage of GetResourcePropertyRequest/Response on + * the WS-DM Adapter. + * + * @author Andrea Gazzarini + */ +public class GetQManResourceMembersExample extends AbstractQManExample +{ + /** + * Looks for memebers of QMan group requesting ws-rp:Entry property to + * WS-DM Adapter resource service. + * + * @param host the host where QMan is running. + * @param port the port where QMan is running. + * @throws Exception when the example fails (not at application level). + */ + void executeExample(String host, int port) throws Exception + { + // 1) Creates an endpoint reference of the adapter service... + EndpointReference serviceEndpointReference = getAdapterEndpointReference(host, port); + + // 2) Creates the Service client... + ServiceGroupClient adapterClient = new ServiceGroupClient(serviceEndpointReference); + adapterClient.setTrace(true); + + // 3) Invokes the service. + WsResourceClient [] resources = adapterClient.getMembers(); + + String result = (resources.length != 0) + ? ("QMan has at the moment "+resources.length+" registered resources.") + : "It seems that there are no managed resource on QMan side..."; + + System.out.println("--------------------------------------------------------------------------"); + System.out.println(result); + System.out.println("--------------------------------------------------------------------------"); + } + + /** + * Prints out a description of this example. + */ + void printOutExampleDescription() + { + System.out.println(" "+getClass().getSimpleName()+" "); + System.out.println("-------------------------------------------------------------------"); + System.out.println(); + System.out.println("This example shows the usage of WS-DM "); + System.out.println("GetResourcePropertyRequest / Response on a "); + System.out.println("Group service."); + System.out.println("The target resource is the WS-DM Adapter itself "); + System.out.println("and the requested property is \"wsrf-sg:Entry\"."); + System.out.println("WS-DM Adapter is a special WS-Resource (is a Group)"); + System.out.println("that acts as the main entry point for retrieving"); + System.out.println("all other managed resources."); + System.out.println("So clients that want to deal with QMan WS-Resources"); + System.out.println("must first get resource identifiers sending"); + System.out.println("a GetResourcePropertyRequest to WS-DM Adapter "); + System.out.println("with \"wsrf-sg:Entry\" as target target property."); + System.out.println(); + System.out.println("-------------------------------------------------------------------"); + System.out.println(); + } + + public static void main(String[] arguments) + { + new GetQManResourceMembersExample().execute(arguments); + } +} \ No newline at end of file diff --git a/java/management/client/src/example/org/apache/qpid/management/example/GetResourceMetadataDescriptorExample.java b/java/management/client/src/example/org/apache/qpid/management/example/GetResourceMetadataDescriptorExample.java new file mode 100644 index 0000000000..84befc01e4 --- /dev/null +++ b/java/management/client/src/example/org/apache/qpid/management/example/GetResourceMetadataDescriptorExample.java @@ -0,0 +1,156 @@ +/* + * + * 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.example; + +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.muse.ws.resource.sg.remote.ServiceGroupClient; +import org.w3c.dom.Element; + +/** + * This example shows how to get metadata from a WS-Resource. + * The service supports different kinds of metadata. + * User who wants to receive metadata of a WS-Resource must + * send a GetMetadataRequesta specifying the requested dialect. + * + * Supported metadata that could be requested are + * + *
    + *
  • + * WSDL : requested using "http://schemas.xmlsoap.org/wsdl/" as dialect.. + *
  • + *
  • + * RDM (Resource Metadata Descriptor) : requested using "http://docs.oasis-open.org/wsrf/rmd-1 "as dialect. + *
  • + *
+ * + * Note that this example focuses on RDM Metadata only; another example is dedicated to WSDL. + * + * @author Andrea Gazzarini + */ +public class GetResourceMetadataDescriptorExample extends AbstractQManExample +{ + + /** + * First, sends a request to WS-DM Adapter in order to get the list of managed resources. + * If the list is not empty, then takes the first member and sends it a GetMetadataRequest + * in order to get its RDM. + * + * @param host the host where QMan is running. + * @param port the port where QMan is running. + * @throws Exception when the example fails (not at application level). + */ + void executeExample(String host, int port) throws Exception + { + + // 1) Creates an endpoint reference of the adapter service... + EndpointReference adapterEndpointReference = getAdapterEndpointReference(host, port); + + // 2) Creates the Adapter service client... + ServiceGroupClient adapterClient = new ServiceGroupClient(adapterEndpointReference); + adapterClient.setTrace(true); + + // 3) Retrieves the all registered members (QMan WS-Resources) + WsResourceClient [] resources = adapterClient.getMembers(); + + // Sanity check : we cannot proceed if there are no WS-Resources. + if (resources.length == 0) + { + System.out.println("----------------------------WARNING---------------------------"); + System.out.println("Cannot proceed with the example... it seems"); + System.out.println("that there are no managed WS-Resources on QMan."); + System.out.println("Please check QMan in order to see that it is really"); + System.out.println("connected with a broker."); + System.out.println("-------------------------------------------------------------------"); + System.exit(0); + } + + // 4) Creates a proxy handler for service invocation. + ProxyHandler metadataProxyHandler = createProxyHandler(); + + // 5) ..and invokes the GetMetadata on the first member. + WsResourceClient firstMember = resources[0]; + firstMember.setTrace(true); + + // Dialect is RDM for this example + String dialect = "http://docs.oasis-open.org/wsrf/rmd-1"; + Object [] inputParameters = {dialect}; + + // WSDL is the first element of the returned array. We don't need to print out it here + // because at this point it should have been already printed out (line 96 : firstMember.setTrace(true)) + @SuppressWarnings("unused") + Element [] metadata = (Element[]) firstMember.invoke(metadataProxyHandler, inputParameters); + } + + /** + * Prints out a description of this example. + */ + void printOutExampleDescription() + { + System.out.println(" "+getClass().getSimpleName()+" "); + System.out.println("-------------------------------------------------------------------"); + System.out.println(); + System.out.println("The example shows how to get metadata from a"); + System.out.println("WS-Resource."); + System.out.println("A QMan WS-Resource has different kinds of metadata."); + System.out.println("(see below)"); + System.out.println("User who wants to receive metadata of a WS-Resource"); + System.out.println("must send a GetMetadataRequesta specifying the"); + System.out.println("associated dialect."); + System.out.println("Supported metadata that could be requested are : "); + System.out.println(); + System.out.println("- WSDL : in this case dialect is \"http://schemas.xmlsoap.org/wsdl/\";"); + System.out.println("- RDM (Resource Metadata Descriptor) : in this case dialect is \"http://docs.oasis-open.org/wsrf/rmd-1 \"."); + System.out.println(); + System.out.println("Note that this examples focuses on RDM Metadata only;"); + System.out.println("another one is dedicated to WSDL."); + System.out.println("-------------------------------------------------------------------"); + System.out.println(); + } + + /** + * A proxy handler is a module needed in order to make a capability + * service invocation. + * It contains logic to serialize and deserialize request, response, input and + * output parameters during a web service invocation. + * + * @return a proxy handler. + */ + private ProxyHandler createProxyHandler() + { + ProxyHandler handler = new ReflectionProxyHandler(); + handler.setAction("http://schemas.xmlsoap.org/ws/2004/09/mex/GetMetadata"); + handler.setRequestName(new QName("http://schemas.xmlsoap.org/ws/2004/09/mex", "GetMetadata", PREFIX)); + handler.setRequestParameterNames(new QName[]{new QName("http://schemas.xmlsoap.org/ws/2004/09/mex", "Dialect", PREFIX)}); + handler.setResponseName(new QName("http://schemas.xmlsoap.org/ws/2004/09/mex", "Metadata", PREFIX)); + handler.setReturnType(Element[].class); + return handler; + } + + public static void main(String[] arguments) + { + new GetResourceMetadataDescriptorExample().execute(arguments); + } +} \ No newline at end of file diff --git a/java/management/client/src/example/org/apache/qpid/management/example/GetResourcePropertyDocumentExample.java b/java/management/client/src/example/org/apache/qpid/management/example/GetResourcePropertyDocumentExample.java new file mode 100644 index 0000000000..838ca2ced7 --- /dev/null +++ b/java/management/client/src/example/org/apache/qpid/management/example/GetResourcePropertyDocumentExample.java @@ -0,0 +1,112 @@ +/* + * + * 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.example; + +import org.apache.muse.ws.addressing.EndpointReference; +import org.apache.muse.ws.resource.remote.WsResourceClient; +import org.apache.muse.ws.resource.sg.remote.ServiceGroupClient; +import org.w3c.dom.Element; + +/** + * This example shows how to get the whole property document from a WS-Resource. + * Resource property document represents a particular composed structural view of + * the resource properties of the WS-Resource. + * Let's say that It is a way to get all-in-once the state of the WS-Resource. + * + * First of all a request is send to WS-DM in order to get all registered WS-Resources. + * If the returned list is not empty then a GetResourcePropertyDocumentRequest is + * sent to the first child. + * + * @author Andrea Gazzarini + */ +public class GetResourcePropertyDocumentExample extends AbstractQManExample +{ + + /** + * First of all a request is send to WS-DM in order to get all registered WS-Resources. + * If the returned list is not empty then a GetResourcePropertyDocumentRequest is + * sent to the first child. + * + * @param host the host where QMan is running. + * @param port the port where QMan is running. + * @throws Exception when the example fails (not at application level). + */ + void executeExample(String host, int port) throws Exception + { + + // 1) Creates an endpoint reference of the adapter service... + EndpointReference adapterEndpointReference = getAdapterEndpointReference(host, port); + + // 2) Creates the Adapter service client... + ServiceGroupClient adapterClient = new ServiceGroupClient(adapterEndpointReference); + adapterClient.setTrace(true); + + // 3) Retrieves the all registered members (QMan WS-Resources) + WsResourceClient [] resources = adapterClient.getMembers(); + + // Sanity check : we cannot proceed if there are no WS-Resources. + if (resources.length == 0) + { + System.out.println("----------------------------WARNING---------------------------"); + System.out.println("Cannot proceed with the example... it seems"); + System.out.println("that there are no managed WS-Resources on QMan."); + System.out.println("Please check QMan in order to see that it is really"); + System.out.println("connected with a broker."); + System.out.println("-------------------------------------------------------------------"); + System.exit(0); + } + + // 4) ..and invokes the GetMetadata on the first member. + WsResourceClient wsResourceClient = resources[0]; + wsResourceClient.setTrace(true); + + @SuppressWarnings("unused") + Element resourcePropertyDocument = wsResourceClient.getResourcePropertyDocument(); + + } + /** + * Prints out a description of this example. + */ + void printOutExampleDescription() + { + System.out.println(" "+getClass().getSimpleName()+" "); + System.out.println("-------------------------------------------------------------------"); + System.out.println(); + System.out.println("This example shows how to get the whole property"); + System.out.println("document from a WS-Resource."); + System.out.println("Resource property document represents a particular "); + System.out.println("composed structural view of the resource properties"); + System.out.println("of the WS-Resource."); + System.out.println("First of all a request is send to WS-DM in order to get"); + System.out.println("all registered WS-Resources."); + System.out.println("the target WS-Resource."); + System.out.println("If the returned list is not empty then a"); + System.out.println("GetResourcePropertyDocumentRequest is sent to the first child."); + System.out.println(); + System.out.println("-------------------------------------------------------------------"); + System.out.println(); + } + + public static void main(String[] arguments) + { + new GetResourcePropertyDocumentExample().execute(arguments); + } +} \ No newline at end of file diff --git a/java/management/client/src/example/org/apache/qpid/management/example/GetResourcePropertyExample.java b/java/management/client/src/example/org/apache/qpid/management/example/GetResourcePropertyExample.java new file mode 100644 index 0000000000..28ed1c7925 --- /dev/null +++ b/java/management/client/src/example/org/apache/qpid/management/example/GetResourcePropertyExample.java @@ -0,0 +1,172 @@ +/* + * + * 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.example; + +import javax.xml.namespace.QName; + +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.resource.remote.WsResourceClient; +import org.apache.muse.ws.resource.sg.remote.ServiceGroupClient; +import org.w3c.dom.Element; + +/** + * This example shows how to get the property value from a WS-Resource. + * First of all a request is send to WS-DM in order to get all registered WS-Resources. + * If the returned list is not empty then a GetMetadataRequest is sent to the + * first child. + * The result metadata descriptor contains all properties of the target WS-Resource. + * For each of them a GetResourcePropertyRequest is sent in order to get its value. + * + * @author Andrea Gazzarini + */ +public class GetResourcePropertyExample extends AbstractQManExample +{ + + /** + * First, sends a request to WS-DM Adapter in order to get the list of managed resources. + * If the list is not empty, then takes the first member and sends it a GetMetadataRequest + * in order to get its WSDL. + * After that, for each property contained in ResourceMetadataDescriptorm (RDM) a + * GetResourcePropertyRequest is sent in order to get its value. + * + * @param host the host where QMan is running. + * @param port the port where QMan is running. + * @throws Exception when the example fails (not at application level). + */ + void executeExample(String host, int port) throws Exception + { + + // 1) Creates an endpoint reference of the adapter service... + EndpointReference adapterEndpointReference = getAdapterEndpointReference(host, port); + + // 2) Creates the Adapter service client... + ServiceGroupClient adapterClient = new ServiceGroupClient(adapterEndpointReference); + adapterClient.setTrace(true); + + // 3) Retrieves the all registered members (QMan WS-Resources) + WsResourceClient [] resources = adapterClient.getMembers(); + + // Sanity check : we cannot proceed if there are no WS-Resources. + if (resources.length == 0) + { + System.out.println("----------------------------WARNING---------------------------"); + System.out.println("Cannot proceed with the example... it seems"); + System.out.println("that there are no managed WS-Resources on QMan."); + System.out.println("Please check QMan in order to see that it is really"); + System.out.println("connected with a broker."); + System.out.println("-------------------------------------------------------------------"); + System.exit(0); + } + + // 4) Creates a proxy handler for service invocation. + ProxyHandler metadataProxyHandler = createProxyHandler(); + + // 5) ..and invokes the GetMetadata on the first member. + WsResourceClient wsResourceClient = resources[0]; + wsResourceClient.setTrace(true); + + // Dialect is RDM for this example + String dialect = "http://docs.oasis-open.org/wsrf/rmd-1"; + Object [] inputParameters = {dialect}; + + // RDM is the first element of the returned array. + // The first element is a wsx:Metadata containing all resource properties. + Element [] metadata = (Element[]) wsResourceClient.invoke(metadataProxyHandler, inputParameters); + Element resourceMetadataDescriptor = metadata[0]; + + // 6) using XPath navigates xml in order to get the list of all properties. + Element [] properties = XmlUtils.findInSubTree( + resourceMetadataDescriptor, + new QName("http://docs.oasis-open.org/wsrf/rmd-1","Property","wsrmd")); + + for (Element property : properties) + { + + String attributeName = property.getAttribute("name"); // = qman: + + // For this example we are only interested on qman namespace related properties... + if (attributeName.startsWith("qman")) + { + String attributeNameWithoutPrefix = attributeName.replaceFirst("qman:", ""); // = + + // 7) Send a GetResourcePropertyRequest for the given attribute. + // We do nothing with the returned value(s) because it / they + // has / have already printed out (wsResourceClient.setTrace(true)) + @SuppressWarnings("unused") + Element [] values = wsResourceClient.getResourceProperty( + new QName( + "http://amqp.apache.org/qpid/management/qman", + attributeNameWithoutPrefix, + "qman")); + } + } + } + + /** + * Prints out a description of this example. + */ + void printOutExampleDescription() + { + System.out.println(" "+getClass().getSimpleName()+" "); + System.out.println("-------------------------------------------------------------------"); + System.out.println(); + System.out.println("This example shows how to get the property value"); + System.out.println("from a WS-Resource."); + System.out.println("First of all a request is send to WS-DM in order to get"); + System.out.println("all registered WS-Resources."); + System.out.println("If the returned list is not empty then a GetMetadataRequest"); + System.out.println("to the first child."); + System.out.println("The result metadata descriptor contains all properties of"); + System.out.println("the target WS-Resource."); + System.out.println("For each of them a GetResourcePropertyRequest is sent"); + System.out.println(" in order to get its value."); + System.out.println(); + System.out.println("-------------------------------------------------------------------"); + System.out.println(); + } + + /** + * A proxy handler is a module needed in order to make a capability + * service invocation. + * It contains logic to serialize and deserialize request, response, input and + * output parameters during a web service invocation. + * + * @return a proxy handler. + */ + private ProxyHandler createProxyHandler() + { + ProxyHandler handler = new ReflectionProxyHandler(); + handler.setAction("http://schemas.xmlsoap.org/ws/2004/09/mex/GetMetadata"); + handler.setRequestName(new QName("http://schemas.xmlsoap.org/ws/2004/09/mex", "GetMetadata", PREFIX)); + handler.setRequestParameterNames(new QName[]{new QName("http://schemas.xmlsoap.org/ws/2004/09/mex", "Dialect", PREFIX)}); + handler.setResponseName(new QName("http://schemas.xmlsoap.org/ws/2004/09/mex", "Metadata", PREFIX)); + handler.setReturnType(Element[].class); + return handler; + } + + public static void main(String[] arguments) + { + new GetResourcePropertyExample().execute(arguments); + } +} \ No newline at end of file diff --git a/java/management/client/src/example/org/apache/qpid/management/example/GetWSDLMetadataExample.java b/java/management/client/src/example/org/apache/qpid/management/example/GetWSDLMetadataExample.java new file mode 100644 index 0000000000..ecda6e8fb1 --- /dev/null +++ b/java/management/client/src/example/org/apache/qpid/management/example/GetWSDLMetadataExample.java @@ -0,0 +1,156 @@ +/* + * + * 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.example; + +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.muse.ws.resource.sg.remote.ServiceGroupClient; +import org.w3c.dom.Element; + +/** + * This example shows how to get metadata from a WS-Resource. + * The service supports different kinds of metadata. + * User who wants to receive metadata of a WS-Resource must + * send a GetMetadataRequesta specifying the requested dialect. + * + * Supported metadata that could be requested are + * + *
    + *
  • + * WSDL : requested using "http://schemas.xmlsoap.org/wsdl/" as dialect.. + *
  • + *
  • + * RDM (Resource Metadata Descriptor) : requested using "http://docs.oasis-open.org/wsrf/rmd-1 "as dialect. + *
  • + *
+ * + * Note that this example focuses on WSDL Metadata only; another example is dedicated to RDM. + * + * @author Andrea Gazzarini + */ +public class GetWSDLMetadataExample extends AbstractQManExample +{ + + /** + * First, sends a request to WS-DM Adapter in order to get the list of managed resources. + * If the list is not empty, then takes the first member and sends it a GetMetadataRequest + * in order to get its WSDL. + * + * @param host the host where QMan is running. + * @param port the port where QMan is running. + * @throws Exception when the example fails (not at application level). + */ + void executeExample(String host, int port) throws Exception + { + + // 1) Creates an endpoint reference of the adapter service... + EndpointReference adapterEndpointReference = getAdapterEndpointReference(host, port); + + // 2) Creates the Adapter service client... + ServiceGroupClient adapterClient = new ServiceGroupClient(adapterEndpointReference); + adapterClient.setTrace(true); + + // 3) Retrieves the all registered members (QMan WS-Resources) + WsResourceClient [] resources = adapterClient.getMembers(); + + // Sanity check : we cannot proceed if there are no WS-Resources. + if (resources.length == 0) + { + System.out.println("----------------------------WARNING---------------------------"); + System.out.println("Cannot proceed with the example... it seems"); + System.out.println("that there are no managed WS-Resources on QMan."); + System.out.println("Please check QMan in order to see that it is really"); + System.out.println("connected with a broker."); + System.out.println("-------------------------------------------------------------------"); + System.exit(0); + } + + // 4) Creates a proxy handler for service invocation. + ProxyHandler metadataProxyHandler = createProxyHandler(); + + // 5) ..and invokes the GetMetadata on the first member. + WsResourceClient firstMember = resources[0]; + firstMember.setTrace(true); + + // Dialect is WSDL for this example + String dialect = "http://schemas.xmlsoap.org/wsdl/"; + Object [] inputParameters = {dialect}; + + // WSDL is the first element of the returned array. We don't need to print out it here + // because at this point it should have been already printed out (line 96 : firstMember.setTrace(true)) + @SuppressWarnings("unused") + Element [] metadata = (Element[]) firstMember.invoke(metadataProxyHandler, inputParameters); + } + + /** + * Prints out a description of this example. + */ + void printOutExampleDescription() + { + System.out.println(" "+getClass().getSimpleName()+" "); + System.out.println("-------------------------------------------------------------------"); + System.out.println(); + System.out.println("The example shows how to get metadata from a"); + System.out.println("WS-Resource."); + System.out.println("A QMan WS-Resource has different kinds of metadata."); + System.out.println("(see below)"); + System.out.println("User who wants to receive metadata of a WS-Resource"); + System.out.println("must send a GetMetadataRequesta specifying the"); + System.out.println("associated dialect."); + System.out.println("Supported metadata that could be requested are : "); + System.out.println(); + System.out.println("- WSDL : in this case dialect is \"http://schemas.xmlsoap.org/wsdl/\";"); + System.out.println("- RDM (Resource Metadata Descriptor) : in this case dialect is \"http://docs.oasis-open.org/wsrf/rmd-1 \"."); + System.out.println(); + System.out.println("Note that this examples focuses on WSDL Metadata only;"); + System.out.println("another one is dedicated to RDM."); + System.out.println("-------------------------------------------------------------------"); + System.out.println(); + } + + /** + * A proxy handler is a module needed in order to make a capability + * service invocation. + * It contains logic to serialize and deserialize request, response, input and + * output parameters during a web service invocation. + * + * @return a proxy handler. + */ + private ProxyHandler createProxyHandler() + { + ProxyHandler handler = new ReflectionProxyHandler(); + handler.setAction("http://schemas.xmlsoap.org/ws/2004/09/mex/GetMetadata"); + handler.setRequestName(new QName("http://schemas.xmlsoap.org/ws/2004/09/mex", "GetMetadata", PREFIX)); + handler.setRequestParameterNames(new QName[]{new QName("http://schemas.xmlsoap.org/ws/2004/09/mex", "Dialect", PREFIX)}); + handler.setResponseName(new QName("http://schemas.xmlsoap.org/ws/2004/09/mex", "Metadata", PREFIX)); + handler.setReturnType(Element[].class); + return handler; + } + + public static void main(String[] arguments) + { + new GetWSDLMetadataExample().execute(arguments); + } +} \ No newline at end of file diff --git a/java/management/client/src/example/org/apache/qpid/management/example/SetResourcePropertyExample.java b/java/management/client/src/example/org/apache/qpid/management/example/SetResourcePropertyExample.java new file mode 100644 index 0000000000..8aed3101ff --- /dev/null +++ b/java/management/client/src/example/org/apache/qpid/management/example/SetResourcePropertyExample.java @@ -0,0 +1,306 @@ +/* + * + * 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.example; + +import java.lang.reflect.Array; +import java.util.HashMap; +import java.util.Map; + +import javax.xml.namespace.QName; + +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.resource.remote.WsResourceClient; +import org.apache.muse.ws.resource.sg.remote.ServiceGroupClient; +import org.w3c.dom.Element; + +/** + * This example shows how to change the state of a WS-Resource. That means + * a SetResourcePropertyRequest is sent to that WS-Resource. + * First of all a request is send to WS-DM in order to get all registered WS-Resources. + * If the returned list is not empty then two GetMetadataRequests are sent to the + * first child (one for WSDL and one for RDM). + * The result metadata descriptors are the used to determine : + * + *
What are names of WS-Resouce properties + *
Their modifiability (read-only or read-write) + *
Their type + * + * So a SetResourcePropertyRequest can be sent in order to change the WS-Resource state. + * The example is looking for a property that has one of the following datatype : + * + *
    + *
  • String
  • + *
  • Long
  • + *
  • Integer
  • + *
  • Short
  • + *
  • Double
  • + *
  • Float
  • + *
+ * + * After the update / insert request has been sent, a GetResourcePropertiesRequest is made + * again in order to see if the state has changed correctly. + * + * @author Andrea Gazzarini + */ +public class SetResourcePropertyExample extends AbstractQManExample +{ + /** + * First of all a request is send to WS-DM in order to get all registered WS-Resources. + * If the returned list is not empty then two GetMetadataRequests are sent to the + * first child (one for WSDL and one for RDM). + * The result metadata descriptors are the used to determine : + * + *
What are names of WS-Resouce properties + *
Their modifiability (read-only or read-write) + *
Their type + * + * So a SetResourcePropertyRequest can be sent in order to change the WS-Resource state. + * The example is looking for a property that has one of the following datatype : + * + *
    + *
  • String
  • + *
  • Long
  • + *
  • Integer
  • + *
  • Short
  • + *
  • Double
  • + *
  • Float
  • + *
+ * + * After the update / insert request has been sent, a GetResourcePropertiesRequest is made + * again in order to see if the state has changed correctly. + * + * @param host the host where QMan is running. + * @param port the port where QMan is running. + * @throws Exception when the example fails (not at application level). + */ + void executeExample(String host, int port) throws Exception + { + // 1) Creates an endpoint reference of the adapter service... + EndpointReference adapterEndpointReference = getAdapterEndpointReference(host, port); + + // 2) Creates the Adapter service client... + ServiceGroupClient adapterClient = new ServiceGroupClient(adapterEndpointReference); + adapterClient.setTrace(false); + + // 3) Retrieves the all registered members (QMan WS-Resources) + WsResourceClient [] resources = adapterClient.getMembers(); + + // Sanity check : we cannot proceed if there are no WS-Resources. + if (resources.length == 0) + { + System.out.println("----------------------------WARNING---------------------------"); + System.out.println("Cannot proceed with the example... it seems"); + System.out.println("that there are no managed WS-Resources on QMan."); + System.out.println("Please check QMan in order to see that it is really"); + System.out.println("connected with a broker."); + System.out.println("-------------------------------------------------------------------"); + System.exit(0); + } + + // 4) Creates a proxy handler for service invocation. + ProxyHandler metadataProxyHandler = createProxyHandler(); + + // 5) ..and invokes the GetMetadata on the first member. + WsResourceClient wsResourceClient = resources[0]; + wsResourceClient.setTrace(true); + + // Resource Metadata Descriptor + String dialect = "http://docs.oasis-open.org/wsrf/rmd-1"; + Object [] inputParameters = {dialect}; + + // RDM is the first element of the returned array. + // The first element is a wsx:Metadata containing all resource properties. + Element [] metadata = (Element[]) wsResourceClient.invoke(metadataProxyHandler, inputParameters); + Element resourceMetadataDescriptor = metadata[0]; + + // 6) Now we need WSDL in order to catch datatypes + dialect = "http://schemas.xmlsoap.org/wsdl/"; + inputParameters = new Object[]{dialect}; + metadata = (Element[]) wsResourceClient.invoke(metadataProxyHandler, inputParameters); + Element wsdl = metadata[0]; + + //7) Defines sample values used for update property. + Map sampleValues = new HashMap(); + sampleValues.put("xsd:string","This is a string."); + sampleValues.put("xsd:integer",new Integer(12345)); + sampleValues.put("xsd:int",new Integer(54321)); + sampleValues.put("xsd:long",new Integer(12345)); + sampleValues.put("xsd:double",new Double(12345.6d)); + sampleValues.put("xsd:float",new Float(123.4f)); + sampleValues.put("xsd:short",new Short((short)12)); + + // 8) using XPath navigates xml in order to get the list of all properties. + Element [] properties = XmlUtils.findInSubTree( + resourceMetadataDescriptor, + new QName("http://docs.oasis-open.org/wsrf/rmd-1","Property","wsrmd")); + + Element [] wsdlElements = XmlUtils.findInSubTree( + wsdl, + new QName("http://www.w3.org/2001/XMLSchema","element","xsd")); + + // Did we find at least one writable property? + boolean atLeastOnePropertyHasBeenFound = false; + + for (Element property : properties) + { + // Sanity check : if the property is read-only then proceed with next + // property. + if (!"read-write".equals(property.getAttribute("modifiability"))) + { + continue; + } + + String attributeName = property.getAttribute("name"); // = qman: + + // For this example we are only interested on qman namespace related properties... + if (attributeName.startsWith("qman")) + { + String attributeNameWithoutPrefix = attributeName.replaceFirst("qman:", ""); // = + + for (Element wsdlElement : wsdlElements) + { + String name = wsdlElement.getAttribute("name"); + String type = wsdlElement.getAttribute("type"); + if ((name != null) && (attributeNameWithoutPrefix.equals(name)) && (type != null)) + { + Object newValue = sampleValues.get(type); + if (newValue != null) + { + atLeastOnePropertyHasBeenFound = true; + + inputParameters = new Object[] {newValue}; + + // 9) Makes a GetResourcePropertiesRequest in order to get the current value. + QName propertyQName = new QName( + "http://amqp.apache.org/qpid/management/qman", + name, + "qman"); + + // The returned value is really an array because property shoudl be a multi-value property. + // So in order to get its value we need to extract the first value. + Object currentValue = wsResourceClient.getPropertyAsObject(propertyQName,newValue.getClass()); + + // 10a) If the property is not set (value is null) then an "Insert" request must be sent. + if (currentValue == null || Array.getLength(currentValue) == 0) + { + wsResourceClient.insertResourceProperty(propertyQName,inputParameters); + } + // 10b) If the property is not null then an "Update" request must be sent. + else + { + wsResourceClient.updateResourceProperty(propertyQName,inputParameters); + } + + // 11) Let's query again the resource using GetResourceProperties in order to ensure the + // previous property has been properly updated. + currentValue = wsResourceClient.getPropertyAsObject(propertyQName,newValue.getClass()); + + String resultMessage = (newValue.equals(Array.get(currentValue, 0))) + ? "Resource has been correctly updated." + : "Something was wrong : resource seems not to be properly updated."; + + System.out.println("----------------------------------------------------------------------------------"); + System.out.println(resultMessage); + System.out.println("----------------------------------------------------------------------------------"); + + // Let's stop...one property is enough for this example :) + break; + } + } + } + if (!atLeastOnePropertyHasBeenFound) + { + System.out.println("----------------------------------------------------------------------------------"); + System.out.println("WARNING : This example wasn't able to run because no writable "); + System.out.println("property has been found on the target WS-Resource."); + System.out.println("----------------------------------------------------------------------------------"); + } + } + } + } + + /** + * Prints out a description of this example. + */ + void printOutExampleDescription() + { + System.out.println(" "+getClass().getSimpleName()+" "); + System.out.println("-------------------------------------------------------------------"); + System.out.println(); + System.out.println("This example shows how to change the state of a WS-Resource."); + System.out.println("That means a SetResourcePropertyRequest is sent to that"); + System.out.println("WS-Resource."); + System.out.println("First of all a request is send to WS-DM in order to get all"); + System.out.println("registered WS-Resources."); + System.out.println("If the returned list is not empty then two GetMetadataRequests"); + System.out.println("(one for WSDL and one for RDM) are sent to the first child."); + System.out.println("The result metadata descriptors are used for determine :"); + System.out.println(); + System.out.println("1) WS-Resource property names;"); + System.out.println("2) Modifiability (read-only, read-write"); + System.out.println("3) Datatype;"); + System.out.println("-------------------------------------------------------------------"); + System.out.println(); + System.out.println("So a SetResourcePropertyRequest can be sent in order"); + System.out.println("to change the WS-Resource state."); + System.out.println("The example is looking for a property that has one of the"); + System.out.println("following datatype :"); + System.out.println(); + System.out.println("1) String (xsd:string)"); + System.out.println("2) Long (xsd:long)"); + System.out.println("3) Integer (xsd:integer or xsd:int)"); + System.out.println("4) Double (xsd:double)"); + System.out.println("5) Float (xsd:float)"); + System.out.println("6) Short (xsd:short)"); + System.out.println(); + System.out.println("After the update / insert request has been sent, a "); + System.out.println("GetResourcePropertiesRequest is made again"); + System.out.println("in order to see if the state has changed correctly."); + System.out.println(); + } + + /** + * A proxy handler is a module needed in order to make a capability + * service invocation. + * It contains logic to serialize and deserialize request, response, input and + * output parameters during a web service invocation. + * + * @return a proxy handler. + */ + private ProxyHandler createProxyHandler() + { + ProxyHandler handler = new ReflectionProxyHandler(); + handler.setAction("http://schemas.xmlsoap.org/ws/2004/09/mex/GetMetadata"); + handler.setRequestName(new QName("http://schemas.xmlsoap.org/ws/2004/09/mex", "GetMetadata", PREFIX)); + handler.setRequestParameterNames(new QName[]{new QName("http://schemas.xmlsoap.org/ws/2004/09/mex", "Dialect", PREFIX)}); + handler.setResponseName(new QName("http://schemas.xmlsoap.org/ws/2004/09/mex", "Metadata", PREFIX)); + handler.setReturnType(Element[].class); + return handler; + } + + public static void main(String[] arguments) + { + new SetResourcePropertyExample().execute(arguments); + } +} \ No newline at end of file -- cgit v1.2.1