Accessing through the Webservice
Odysseus provides a webservice interface that is part of the core feature (therefore it is always part of Odysseus).
Typically, the webservice can be found at: http://localhost:9669/odysseus where also a WSDL is provided at http://localhost:9669/odysseus?wsdl. If the web service port is not free (e.g. because another Odysseus instance is running) it will be incremented, until a free port is found.
The default webservice port is configured with: WebService.Port
The default endpoint (odysseus) is configured with: WebService.Endpoint2
The max port that should be used is confiured with: WebService.MaxPort (default 10000)
This webservice provides methods from the executor, thus you can use addQuery to run new queries or you can obtain all installed sources.
General Usage Process
If you use the webservice, you have first to run the login operation where you have to pass your username and password. If the login is sucessful, the webservice returns a securitytoken. This token is valid for your session. Now you can, for example, add new queries by invoking the addQuery (or what ever you want to do) operation - there you have to use the securitytoken for authentication as a parameter.
How to access
There are two possiblities for accessing the server through the webservice interface:
1. Access by using the existing webservice client
You need the following bundles in your own client
and the following libraries:
- com.google.guava (http://code.google.com/p/guava-libraries/)
- com.rits.cloning (http://code.google.com/p/cloning/)
2. Access via generating your own webservice client
If you are not using Java (e.g. .NET) or you can not use the existing webservice bundle, you can import the webservice declaration by yourself.
For this, you have to start Odysseus so that the webservice is published.
Then you normally can use a WSDL-Importer (e.g. wsimport for Java) to import and generate a webservice client by using the WSDL that is provided at http://localhost:9669/odysseus?wsdl (or configured)
How Features and Bundles are Interacting
The feature de.uniol.inf.is.odysseus.planmanagement.executor.webservice.client.feature encapsulates an executor over the webservice.
For this, it contains the bundle de.uniol.inf.is.odysseus.planmanagement.executor.webservice.client that provides an executor through the IExecutor service binding.This executor uses the webservice.client that is provided by de.uniol.inf.is.odysseus.webservice.client. Thus, if the feature is enabled, all calls of the executor is passed from the webservice-executor-client throgh the webservice to the endpoint http://localhost:9669/odysseus. This endpoint is published by de.uniol.inf.is.odysseus.planmanagement.executor.webservice.server which takes the webservice-calls and forwards them to the standard-executor.
Summarized, an application can use the de.uniol.inf.is.odysseus.planmanagement.executor.webservice.client.feature to provide an executor as the client part which calls the executor that is provided by de.uniol.inf.is.odysseus.planmanagement.executor.webservice.server as the server part. Thus, this two/three bundles allows the client-server architecture!
The feature de.uniol.inf.is.odysseus.webservice.feature is not needed anymore since the webserice interface (the server part) is now part of the core. Threfore, it was deleted!
Extending the Webservice Executor
Sometimes (and this should be very seldom) it is necessary to extend the executor and therefore the webservice interface too. For this, you have to update/extend two parts: the server and the client.
To extend the server part, you have to implement your new method into WebserviceServer.java of the bundle called de.uniol.inf.is.odysseus.planmanagement.executor.webservice.server. there are all methods that are provided by the webservice. Look, for example, at the method "removeQuery", how to use the webservice executor and how to pass calls to the standard executor. Pay attention that you also use the securitytoken as a parameter to guarantee some authentication. You can use the method "loginWithSecurityToken" which will throw a WebserviceException if the login fails.
The second part is to update the webservice client that is provided by the bundle de.uniol.inf.is.odysseus.webservice.client. For this, you have to start Odysseus as a server (so that the Webservice is published).
If you extending the web service inside odysseus: Simply run the build.xml Ant Script to create a valid bundle.
You can use the wsimport tool to import the webservice. This tool is provided by the Java JDK and is located in the bin folder. For example, the following command is used within the root-folder of the bundle de.uniol.inf.is.odysseus.webservice.client and the wsimport tool is provided by the JDK 1.7.0_04 (which you potentially have to adapt to your system / jdk installation):
E:\Odysseus\trunk\core\webservice.client>"c:\Program Files\Java\jdk1.7.0_04\bin\wsimport.exe" -d bin -keep -s src -p de.uniol.inf.is.odysseus.webservice.client http://localhost:9669/odysseus?wsdl
Now, the client should be updated.