diff options
author | jsdelfino <jsdelfino@13f79535-47bb-0310-9956-ffa450edef68> | 2009-11-16 06:23:13 +0000 |
---|---|---|
committer | jsdelfino <jsdelfino@13f79535-47bb-0310-9956-ffa450edef68> | 2009-11-16 06:23:13 +0000 |
commit | 8759a126a1bb9eec550c37b5b14642b0cfeb797b (patch) | |
tree | bc4744f903d38710e61a9e8ca6766132e5926201 /sca-cpp/branches/cpp-M1/sca/doc/WSEntrypoint.txt | |
parent | fd1aa20dd751f242e2df5ee61c84dfbd7c0ebb83 (diff) |
Cleaning up SVN structure, moving branch under sca-cpp/branches.
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@880612 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'sca-cpp/branches/cpp-M1/sca/doc/WSEntrypoint.txt')
-rw-r--r-- | sca-cpp/branches/cpp-M1/sca/doc/WSEntrypoint.txt | 272 |
1 files changed, 272 insertions, 0 deletions
diff --git a/sca-cpp/branches/cpp-M1/sca/doc/WSEntrypoint.txt b/sca-cpp/branches/cpp-M1/sca/doc/WSEntrypoint.txt new file mode 100644 index 0000000000..7e59008cae --- /dev/null +++ b/sca-cpp/branches/cpp-M1/sca/doc/WSEntrypoint.txt @@ -0,0 +1,272 @@ +Web Services EntryPoint +======================= + +This section of the document describes the use of the Web Service EntryPoint +(WS EntryPoint) support in the Apache Tuscany SCA C++ runtime. + +The WS EntryPoint code is based on Apache Axis2C version 0.92 +(http://ws.apache.org/axis2/c) and allows SCA components to be invoked via Web +Service calls. + +WS EntryPoint currently supports Document/literal Wrapped style Web Services +only. There are also restrictions about the parameter and return types of the +operations in SCA components that can be exposed as Web Services, see below +for more details. + + +Defining and deploying an SCA Module with a WS EntryPoint +========================================================= + +In this section we will use the Calculator sample as a worked example. +The Calculator code and files can be found at sca/samples/Calculator. + +Pre-requisites: + + o A working component within a module and subsystem, with SCAGEN generated + Proxy and Wrapper classes and a DLL or SO library compiled from these and + the component class files. The sca.module, *.componentType, *.fragment and + sca.subsystem files must also be available and working + +1. Create the WSDL that defines the interface of your SCA component. See the +table "XML Schema Type to C++ Type Mapping" and "Notes on creating WSDL" below +for mapping the parameters and return types of the component operations to XML +schema types in the WSDL. This file needs to be accessible from the component, +so place it in the same directory as the component or in a subdirectory. + +See the sca/samples/Calculator/CalculatorModule/Calculator.wsdl file as an +example. + + +2. Add an EntryPoint definition to the sca.module file, setting the +interface.wsdl interface attribute to the WSDL file defined above, the +reference element to the name of the component to be invoked and the binding.ws +port attribute to the namespace, service and port name specified in the +WSDL, in the form: "<namespace>#wsdl.endpoint(<service-name>/<port-name>)". +Also give the EntryPoint a name and set the multiplicity. + +E.g. for the Calculator component, based on the Calculator.wsdl file: + +<!-- Expose as a web service --> +<entryPoint name="WSCalculatorEntrypoint" multiplicity="1..1"> + <interface.wsdl interface="Calculator.wsdl" /> + <binding.ws port="tuscany/c/Calculator#wsdl.endpoint(CalculatorService/CalculatorServicePort)"/> + <reference>CalculatorServiceComponent</reference> +</entryPoint> + + +3. Create a file named Tuscany-model.config in the same directory as your +component. This file defines which WSDL and XML Schema files to include in the +Tuscany runtime environment for this module. Set the contents of the file +using the example below and use the path and name of the WSDL file created +above. + +E.g. for the Calculator component + +<?xml version="1.0" encoding="utf-8" ?> +<tuscany-model xmlns="http://org.apache.tuscany/xmlns/cpp/1.0"> + <wsdl> + <file name="Calculator.wsdl"/> + </wsdl> +</tuscany-model> + + + +These changes are all that are required in the Tuscany runtime environment to +expose a component as a Web Service; the following steps detail how to add the +Web Service to the list of Axis2C services. + + +4. Create a new directory within the Axis2C services directory. The name of +this directory defines the URL of your service. For example, if you create a +directory named "CalcWebService", the URL of the service will be +http://localhost:9090/axis2/services/CalcWebService + + +5. Create a file named services.xml within the new directory. This file defines +the library to use that contains the service code and the operations that the +service exposes. For the Tuscany WS EntryPoint, you also need to add some +Tuscany specific parameters to identify the Tuscany System Root directory and +the EntryPoint that will be invoked. + +The TuscanySystemRoot parameter requires the full path to your system root +directory - this is the directory that contains the "modules" and "subsystem" +directories; which in turn contain your modules and subsystems. + +The TuscanyEntryPoint parameter is of the form +"<subsystem-name>/<service-name>/<entrypoint-name>", with the subsystem and +service names defined in your sca.subsystem file and the EntryPoint name +defined in the EntryPoint definition you added to your sca.module file above. + +Set the ServiceClass parameter to "tuscany_sca_ws_service" as this library +(tuscany_sca_ws_service.dll on Windows and libtuscany_sca_ws_service.so on +Linux) contains the service code that will invoke your component. + +Finally, add all of the operations that your component defines that you want +to expose as Web Service operations. + +E.g. for the Calculator WS EntryPoint, +axis2c/services/CalcWebService/services.xml contains: + +<service name="CalcWebService"> + + <parameter name="ServiceClass" locked="xsd:false">tuscany_sca_ws_service</parameter> + <parameter name="TuscanySystemRoot" locked="xsd:false">C:/tuscany/cpp/sca/samples/runtime</parameter> + <parameter name="TuscanyEntryPoint" locked="xsd:false">CalculatorSubsystem/CalculatorService/WSCalculatorEntrypoint</parameter> + + <operation name="add"/> + <operation name="sub"/> + <operation name="mul"/> + <operation name="div"/> + +</service> + + +6. Copy the tuscany_sca_ws_service.dll file (or the +libtuscany_sca_ws_service.so file, if on Linux) to the new service directory +you created above. This library contains the code that Axis2C requires to call +a service implementation and links to the tuscany_sca.dll library (or +libtuscany_sca.so on Linux) which manages the invocation of your component. + + +7. Ensure the TUSCANY_SCACPP, TUSCANY_SDOCPP, AXIS2C_HOME and PATH environment +variables are correctly set + +E.g. on Windows run the following commands with the correct directories: +set TUSCANY_SCACPP=C:/path_to_tuscany/sca/deploy +set TUSCANY_SDOCPP=C:/path_to_tuscany/sdo/deploy +set AXIS2C_HOME=C:/path_to_axis2c0.92 +set PATH=%PATH%;C:/path_to_tuscany/sca/deploy/bin;C:/path_to_tuscany/sdo/deploy/bin;C:/path_to_axis2c0.92/lib + + +8. Optionally, enable logging in Tuscany by setting the TUSCANY_SCACPP_LOGGING +environment variable with the level you wish to log at (0 for minimal +logging, up to 9 for more detailed logging) and the TUSCANY_SCACPP_LOG +environment variable to define the file to log to (if this is not set, logging +will go to the console) + +E.g. on Windows run the following commands: +set TUSCANY_SCACPP_LOGGING=5 +set TUSCANY_SCACPP_LOG=C:/tuscany/mylogfile.txt + +Additionally, Axis2C automatically writes logging files to the Axis2C logs +directory (e.g. C:/path_to_axis2c0.92/logs). In particular the Axis2.log file +may contain useful information about your service. + + +9. Start the Simple Axis server, or your Apache HTTP server if you have +deployed Axis2C to Apache. + +E.g. on Windows run the following commands: +cd C:/path_to_axis2c0.92/bin +./axis2_http_server.exe + + +Your component should now be exposed as an Axis2C Web Service, via the WS +EntryPoint you created. See the Axis2C documentation for writing clients to +invoke the Web Service, or you can use any other Web Service client platform +(e.g. Axis2 for Java: http://ws.apache.org/axis2), or you can invoke your +component from another Tuscany runtime by using Tuscany's WS External Service +support. + + + +XML Schema Type to C++ Type Mapping +=================================== + +To help define the WSDL that describes the interface of your component, the +table below lists how incoming XML data in Web Service messages is mapped to +C++ types used in the parameters and return types of your component operations. + +This lists the only C++ types that can currently be used on the operations of a +component exposed as a Web Service. For other types, use an SDO DataObject to +wrap the data, and define that wrapping as a complexType in the WSDL. See the +SDO specifications (available from the Tuscany website) for the C++ types that +SDO supports. + + + XML Schema Type | C++ Type +------------------------------------------------------------- + | + string | char* + | + int | long + | + integer | long + | + short | short + | + float | float + | + double | long double + | + boolean | bool + | + hexBinary | char* + | + base64Binary | char* + | + byte | char + | + complexType | SDO DataObjectPtr + | + any | SDO DataObjectPtr with OpenDataObjectType + + + +Notes on creating WSDL +====================== + + o Currently only Document/literal Wrapped style Web Services are supported by + WS EntryPoint, support for RPC style Web Services is planned for future + releases. + + See the article at http://www.ibm.com/developerworks/webservices/library/ws-whichwsdl/ + for an explanation of Document/literal Wrapped style WSDL and Web Services + + o Operation parameter and return messages that are defined in the WSDL must be + XML Schema elements containing a complexType - there is currently no + support for simpleTypes or single-level elements. Also, Document/literal + Wrapped services require that the operation name is used as the name of the + incoming element that wraps the operation parameters. + + For example, a component operation defined in C++ as: + + long myOperation(char* arg1, short arg2, DataObjectPtr arg3); + + will need to be described in WSDL with messages like: + + <wsdl:message name="myOperationRequestMsg"> + <wsdl:part element="tns:myOperation" name="myOperationRequestPart"/> + </wsdl:message> + <wsdl:message name="myOperationResponseMsg"> + <wsdl:part element="tns:myOperationResponse" name="myOperationResponsePart"/> + </wsdl:message> + + and will need an XML schema to define the types like: + + <xsd:element name="myOperation"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="arg1" type="xsd:string" minOccurs="1"/> + <xsd:element name="arg2" type="xsd:short" minOccurs="1"/> + <xsd:element name="arg3" minOccurs="1"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="dataObjectFloatData" type="xsd:float"/> + <xsd:element name="dataObjectStringData" type="xsd:string"/> + <xsd:element name="dataObjectIntData" type="xsd:int"/> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + + <xsd:element name="myOperationResponse"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="result" type="xsd:int" minOccurs="1"/> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + |