| Product | Description/Notes | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ANT | Another Neat Tool (an Apache script interpreter) | ||||||||||||
| Apache HTTPd | Hyper Text Transport Protocol daemon
is
a standalone product which operates on TCP/IP port 80 (http) and 443 (https) by default. When OpenVMS was owned by Compaq,
this product was called CSWS (Compaq Secure Web Sever) pronounced "C-Swiss". Since HP bought (err,
merged with) Compaq, I have heard HP engineers refer to this product as "Swiss" but the downloadable modules still have a
"CSWS" prefix.
|
||||||||||||
| Apache Tomcat | A standalone Java-based web server product which operates on TCP/IP port 8080 by default (configure the connector kit to facilitate server back channels between HTTPd and Tomcat) Confusingly, the Compaq/HP Tomcat product for OpenVMS is named CSWS_JAVA
|
||||||||||||
| GNV | GNU Not VMS (Unix command interpreter for OpenVMS which includes BASH) | ||||||||||||
| Java | Standalone product is required by Tomcat. You need the development kit (has a JIT compiler), not the run-time
kit.
JAVA 6 comes up as version 1.6 JAVA 8 comes up as version 1.8 |
||||||||||||
| OpenSSL | Open Secure Sockets Layer "standalone product" (not used by Apache HTTPd which has its own built-in OpenSSL routines) Question: So why would you ever use it? Answer: to support encryption in client apps or standalone server apps Required by OpenVMS 8.x (used to validate HP patch kits) | ||||||||||||
| Perl | Standalone product (required by CSWS_PERL) | ||||||||||||
| SOAP Toolkit 1.1 | SOAP 1.0 - based upon Apache SOAP 2.31 - Apache's proof of concept SOAP offering (now obsolete) | ||||||||||||
| SOAP Toolkit 2.0 | SOAP 1.1 - based upon Apache AXIS/Java - Apache's first production SOAP engine (now obsolete) | ||||||||||||
| AXIS2 | SOAP 1.2 - based upon Apache AXIS2/Java - Apache's second production SOAP engine (served up by Tomcat) | ||||||||||||
| WSIT | Web Services Integration Toolkit (technology for accessing high level language routines from Java-based web services) | ||||||||||||
| UDDI | Universal Description Discovery and Integration is another Web Services component (this technology has not lived up to original expectations) | ||||||||||||
| gSOAP | generated SOAP. Third-party SOAP engine supporting SOAP code based upon C/C++ (this looks like a very promising alternative to AXIS2/c which is not available on OpenVMS unless you are willing to do your own build from Apache sources) |
||||||||||||
| SOAP Technology |
Original Product Name |
Official VMS Name |
Requires Tomcat? |
Document Links | Language |
|---|---|---|---|---|---|
| SOAP 1.0 | Apache SOAP | SOAP Toolkit 1.x | Y | http://www.w3.org/TR/soap/ | Java |
| SOAP 1.1 | Apache AXIS | SOAP Toolkit 2.x | Y | https://en.wikipedia.org/wiki/Apache_Axis | Java |
| SOAP 1.1 and 1.2 | Apache AXIS2 | Axis2 | Y | https://en.wikipedia.org/wiki/Apache_Axis2 | Java |
| SOAP 1.1 and 1.2 | gSOAP | N | http://www.cs.fsu.edu/~engelen/soap.html | C or C++ |
Notes:
$!
$! change your DCL session to case-sensitive $!
$ SET PROC/CASE=SENS/PARSE=EXTENDED
$!
$! copy with rename
$! $ COPY AXIS2$ROOT:[openvms]AXIS2.WAR APACHE$COMMON:[JAKARTA.TOMCAT.webapps]axis2.war
$!
$! revert your DCL session back to case-insensitive $! $ SET PROC/CASE=SENS/PARSE=TRADITIONAL
<ns:getVersionResponse>Caveat: what you will see depends upon your browser:
<ns:return> Hello I am Axis2 version service, My version is 1.3 </ns:return>
</ns:getVersionResponse>
| IE 8 | displays the full XML page |
| Firefox 3.6 | only displays a small fraction. Do a "view page source" to see more. |
| Google Chrome 5.0 | display almost nothing until you issue "view page source" |
| All Browsers | if you do not see this first line: <?xml version="1.0" encoding="UTF-8" ?> ...then you must issue a "view page source" command |
$backup/log/ignore=interlock -
AXIS$ROOT:[AXIS-1_1.webapps.axis...]*.* - apache$common:[jakarta.tomcat.webapps.axis...]*.*
AXIS$ROOT:[AXIS-1_1.openvms.com]soap_toolkit-2_0_util.comyou will notice a fourth menu command which is disabled in a couple of places. If it was enabled, it would execute an unfinished sub-routine which would perform the backup command which I have just documented.
======================================================================================== title : axis2_service_demo_axp.txt author : Neil Rieck created : 2010.07.21 purpose : A "Simple Service" demo for Apache Axis2 on OpenVMS-8.3 reference 1: Book "Quickstart Apache Axis2" by Deepal Jayasinghe reference 2: http://people.apache.org/~ruchithf/hw-axis2/ notes :
1. case is important for files as well as directories (folders) 2. AXIS2 will not deploy a service unless the extension is ".aar" (axis archive) 3. SET PROC/CASE=SENS/PARSE=EXTENDED ! change VMS session to case-sensitive SET PROC/CASE=BLIND/PARSE=TRADITIONAL ! restore VMS sessions to default 4. here, the "ss" prefix means "simple service" ======================================================================================== $ SET PROC/CASE=SENS/PARSE=EXTENDED ! change your DCL session case-sensitive $ create SimpleService.java ! create a new file with this name /* * The service implementation class */ public class SimpleService { /* * method: ssAdd */ public int ssAdd(int ssValue1, ssValue2) { return ssValue1 + ssValue2; } /* * method: ssSubtract */ public int ssSubtract(int ssValue1, ssValue2) { return ssValue1 - ssValue2; } /* * method: ssEcho */ public String ssEcho(String ssValue3) { return "You sent: "+ ssValue3; } } <<<---- hit CTRL-Z here to close the "create" command $ cre/dir [.TEMP] $ cre/dir [.TEMP.META-INF] $ create [.TEMP.META-INF]services.xml <service name="SimpleService"> <description> Simple Service Hack </description> <parameter name="ServiceClass" locked="false">SimpleService</parameter> <operation name="ssAdd"> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/> </operation> <operation name="ssSubtract"> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/> </operation> <operation name="ssEcho"> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/> </operation> </service> <<<---- hit CTRL-Z here to close the "create" command $ javac "SimpleService.java" -d TEMP/ $ jar cvf SimpleService.aar -C TEMP/ META-INF/services.xml $ jar uvf SimpleService.aar -C TEMP/ SimpleService.class $ unzip -l SimpleService.aar ! test the archive like so Archive: AXIS2$ROOT:[000000.NEIL.SS]SimpleService.aar;21 Length Date Time Name -------- ---- ---- ---- 0 08-10-10 13:41 META-INF/ 70 08-10-10 13:41 META-INF/MANIFEST.MF 572 08-10-10 13:40 META-INF/services.xml 585 08-10-10 13:41 SimpleService.class -------- ------- 1227 4 files $ copy SimpleService.aar - APACHE$COMMON:[JAKARTA.TOMCAT.webapps.axis2.WEB-INF.services] $! step 7 ------------------------------------------------------------------------- Probe the service with IE8: http://yada.net:8080/axis2/services/listServices view the available services http://yada.net:8080/axis2/services/SimpleService?xsd view the associated xsd http://yada.net:8080/axis2/services/SimpleService?wsdl view the associated wsdl http://yada.net:8080/axis2/services/SimpleService?wsdl2 view the associated wsdl2 Test the service methods with IE8: http://yada.net:8080/axis2/services/SimpleService/ssEcho?param0=This is a test http://yada.net:8080/axis2/services/SimpleService/ssAdd?param0=34¶m1=12 http://yada.net:8080/axis2/services/SimpleService/ssSubtract?param0=34¶m1=12 Caveat: this kind of testing only works if you have include support for the HTTP GET
method (usually there with AXIS2; optional with gSOAP; not supported on OpenVMS where
the Apache module 'mod_gsoap.exe' blocks all HTTP GET operations except for '?wsdl')
| IE 8 | displays the full XML page |
| Firefox 3.6 | only displays a small fraction. Do a "view page source" to see more. |
| Google Chrome 5.0 | display almost nothing until you issue "view page source" |
| Common | if you do not see this first line: <?xml version="1.0" encoding="UTF-8" ?> ...then you must issue a "view page source" command |
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
xmlns:ns0="http://ws.apache.org/axis2"
xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
xmlns:ns1="http://org.apache.axis2/xsd"
xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
targetNamespace="http://ws.apache.org/axis2">
<wsdl:documentation>SimpleService</wsdl:documentation>
<wsdl:types>
<xs:schema xmlns:ns="http://ws.apache.org/axis2"
attributeFormDefault="qualified"
elementFormDefault="qualified"
targetNamespace="http://ws.apache.org/axis2">
<xs:element name="ssAdd">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="param0" type="xs:int"/>
<xs:element minOccurs="0" name="param1" type="xs:int"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="ssAddResponse">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="return" type="xs:int"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="ssSubtract">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="param0" type="xs:int"/>
<xs:element minOccurs="0" name="param1" type="xs:int"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="ssSubtractResponse">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="return" type="xs:int"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="ssEcho">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="param0" nillable="true" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="ssEchoResponse">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="return" nillable="true" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
</wsdl:types>
<wsdl:message name="ssSubtractRequest">
<wsdl:part name="parameters" element="ns0:ssSubtract"/>
</wsdl:message>
<wsdl:message name="ssSubtractResponse">
<wsdl:part name="parameters" element="ns0:ssSubtractResponse"/>
</wsdl:message>
<wsdl:message name="ssEchoRequest">
<wsdl:part name="parameters" element="ns0:ssEcho"/>
</wsdl:message>
<wsdl:message name="ssEchoResponse">
<wsdl:part name="parameters" element="ns0:ssEchoResponse"/>
</wsdl:message>
<wsdl:message name="ssAddRequest">
<wsdl:part name="parameters" element="ns0:ssAdd"/>
</wsdl:message>
<wsdl:message name="ssAddResponse">
<wsdl:part name="parameters" element="ns0:ssAddResponse"/>
</wsdl:message>
<wsdl:portType name="SimpleServicePortType">
<wsdl:operation name="ssSubtract">
<wsdl:input message="ns0:ssSubtractRequest" wsaw:Action="urn:ssSubtract"/>
<wsdl:output message="ns0:ssSubtractResponse" wsaw:Action="urn:ssSubtractResponse"/>
</wsdl:operation>
<wsdl:operation name="ssEcho">
<wsdl:input message="ns0:ssEchoRequest" wsaw:Action="urn:ssEcho"/>
<wsdl:output message="ns0:ssEchoResponse" wsaw:Action="urn:ssEchoResponse"/>
</wsdl:operation>
<wsdl:operation name="ssAdd">
<wsdl:input message="ns0:ssAddRequest" wsaw:Action="urn:ssAdd"/>
<wsdl:output message="ns0:ssAddResponse" wsaw:Action="urn:ssAddResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="SimpleServiceSOAP11Binding" type="ns0:SimpleServicePortType">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
<wsdl:operation name="ssSubtract">
<soap:operation soapAction="urn:ssSubtract" style="document"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="ssEcho">
<soap:operation soapAction="urn:ssEcho" style="document"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="ssAdd">
<soap:operation soapAction="urn:ssAdd" style="document"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:binding name="SimpleServiceSOAP12Binding" type="ns0:SimpleServicePortType">
<soap12:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
<wsdl:operation name="ssSubtract">
<soap12:operation soapAction="urn:ssSubtract" style="document"/>
<wsdl:input>
<soap12:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap12:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="ssEcho">
<soap12:operation soapAction="urn:ssEcho" style="document"/>
<wsdl:input>
<soap12:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap12:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="ssAdd">
<soap12:operation soapAction="urn:ssAdd" style="document"/>
<wsdl:input>
<soap12:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap12:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:binding name="SimpleServiceHttpBinding" type="ns0:SimpleServicePortType">
<http:binding verb="POST"/>
<wsdl:operation name="ssSubtract">
<http:operation location="SimpleService/ssSubtract"/>
<wsdl:input>
<mime:content type="text/xml" part="ssSubtract"/>
</wsdl:input>
<wsdl:output>
<mime:content type="text/xml" part="ssSubtract"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="ssEcho">
<http:operation location="SimpleService/ssEcho"/>
<wsdl:input>
<mime:content type="text/xml" part="ssEcho"/>
</wsdl:input>
<wsdl:output>
<mime:content type="text/xml" part="ssEcho"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="ssAdd">
<http:operation location="SimpleService/ssAdd"/>
<wsdl:input>
<mime:content type="text/xml" part="ssAdd"/>
</wsdl:input>
<wsdl:output>
<mime:content type="text/xml" part="ssAdd"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="SimpleService">
<wsdl:port name="SimpleServiceSOAP11port_http" binding="ns0:SimpleServiceSOAP11Binding">
<soap:address location="http://kawc09.on.bell.ca:8080/axis2/services/SimpleService"/>
</wsdl:port>
<wsdl:port name="SimpleServiceSOAP12port_http" binding="ns0:SimpleServiceSOAP12Binding">
<soap12:address location="http://kawc09.on.bell.ca:8080/axis2/services/SimpleService"/>
</wsdl:port>
<wsdl:port name="SimpleServiceHttpport" binding="ns0:SimpleServiceHttpBinding">
<http:address location="http://kawc09.on.bell.ca:8080/axis2/services/SimpleService"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
Home page of Brett Cameron & John Apps
| VMS Pkg | gSOAP | Links | |
|---|---|---|---|
| 12 | 2.8.3 | https://drive.google.com/file/d/0B8fhl85GHPz2bFpheEJzUXFTSFE https://drive.google.com/file/d/0B8fhl85GHPz2RWtlM0E4eEFxODg https://drive.google.com/file/d/0B8fhl85GHPz2UC0zSVNNS3JTV1E |
I64 AXP Notes |
Two Flavors (client and server)
One tiny little problem with the plugin
legend: <sr> = system response
<ur> = user response
-------------------------------------------------------------------------
<sr> $ <--- my DCL prompt
<ur> telnet www.bellics.com 80 <--- use telnet to connect to port 80
<sr> %TCPWARE_TELNET-I-TRYING, trying bellics.com,http (207.35.137.66,80) ...
%TCPWARE_TELNET-I-ESCCHR, escape (attention) character is "^\"
<ur> GET /bsttv10?wsdl HTTP/1.0 <--- HTTP-GET (request WSDL from service "bsttv10")
<--- blank line signifies end of HTTP header
<sr> HTTP/1.1 200 OK <--- start of HTTP Response
Date: Sat, 28 Jul 2012 13:29:37 GMT
Server: Apache/2.0.63 (OpenVMS) mod_ssl/2.0.52 OpenSSL/0.9.8o
Connection: close
Content-Type: text/xml
<--- blank line signifies end of HTTP header
<?xml version="1.0" encoding="UTF-8"?> <--- start of WSDL (an XML document)
<wsdl:definitions xmlns:tns="http://yada.com/bl"
...
Case Sensitivity
gSOAP sample apps were originally written for use in a case-sensitive environment (UNIX/Linux). So now you've got several options:
$ soapcpp2 "-c" "-S" -1 yada.h ! only generate "c" code $ ! only generate Server code $ ! only support soap1.1
$ SET PROC/CASE=SENS/PARSE=EXTENDED ! switch your DCL session to case-sensitive
$ soapcpp2 -c -S -1 yada.h ! only generate "c" code $ ! only generate Server code $ ! only support soap1.1
$ SET PROC/CASE=BLIND/PARSE=TRADITION ! revert your DCL session back to case-insensitive
Overview of gSOAP code development in C
#======================================================================= # experimental stuff for gSOAP (root) # required so I can use a browser to look at docs specific to this stack #=======================================================================file: [.conf]ssl.conf
# DCL: $define/sys/trans=conc "gsoap$root" "DISK$USER1:[gsoap.]" Alias /gsoap/ "/gsoap$root/000000/" Alias /GSOAP/ "/gsoap$root/000000/" <Directory "/gsoap$root/000000/"> Options Indexes MultiViews IndexOptions NameWidth=* AllowOverride None Order allow,deny Allow from all </Directory> # # this plugin module is required for gSOAP to work # LoadModule gsoap_module modules/mod_gsoap.exe # # enabled gSOAP services # 1. only enable the stuff we need because more stuff seems to take a toll) # 2. SOAPLibrary must point to a valid gSOAP executable (or Apache won't start) #=============================== # service: calc demo # logical: $def/sys gsoap_calc_server CSMIS$ROOT3:[DVLP._GSOAP_SAMPLES.CALC-NSR]calcserver.EXE # <Location /gsoap_calc_server> # lowercase name (also enable in SSL.CONF if HTTPS support is desired) SetHandler gsoap-handler SOAPLibrary GSOAP_CALC_SERVER # this system-level logical name points to the executable </Location> #=============================== # service: current-time demo # logical: $def/sys gsoap_current_time CSMIS$ROOT3:[DVLP._GSOAP_CURRENT_TIME]GSOAP_CURRENT_TIME.EXE # <Location /gsoap_current_time> # lowercase name (also enable in SSL.CONF if HTTPS support is desired) SetHandler gsoap-handler SOAPLibrary GSOAP_CURRENT_TIME # this system-level logical name points to the executable </Location> #===============================
<VirtualHost 142.180.39.16:443> #=============================== # service: calc service demo # logical: $def/sys gsoap_calc_server CSMIS$ROOT3:[DVLP._GSOAP_SAMPLES.CALC-NSR]calcserver.EXE # <Location /gsoap_calc_server> # lowercase name (also enable in HTTPD.CONF if HTTP support is desired) SetHandler gsoap-handler SOAPLibrary GSOAP_CALC_SERVER # this system-level logical name points to the executable </Location> #=============================== # # service: current-time demo (not used here) # logical: $def/sys gsoap_current_time CSMIS$ROOT3:[DVLP._GSOAP_CURRENT_TIME]GSOAP_CURRENT_TIME.EXE # #<Location /gsoap_current_time> # lowercase name (also enable in HTTPD.CONF if HTTP support is desired) # SetHandler gsoap-handler # SOAPLibrary GSOAP_CURRENT_TIME # this system-level logical name points to the executable #</Location> #=============================== </VirtualHost>
Overview (Implements the PUSH-PUSH model)
Note: Due to a corporate security directive, all transmissions are encrypted via OpenSSL.
Flow #1 (Company 1 to 2 with response back) Company #1 Company #2 SOAP Client SOAP Server +-------+ +---------------+ +---------------+ +------+ | Human +->| create ticket +-- HTTP POST ->| Queue Msg/Job +->| db + | | Event | | update ticket |<- Status:200 -+ HTTP response | | code | +-------+ +---------------+ +---------------+ +--+---+ SOAP Server SOAP Client | +---------------+ +---------------+ | | Queue Msg/Job |<- HTTP POST --+ Action: Reply |<----+ | HTTP Response +- Status:200 ->| within 60 sec | +---------------+ +---------------+ Flow #2 (Company 2 to 1 with response back) Company #1 Company #2 SOAP Server SOAP Client +------+ +---------------+ +---------------+ +-------+ | db + |<-+ Queue Msg/Job |<- HTTP POST --+ Update Ticket |<-+ Human | | code | | HTTP response +- Status:200 ->| Close Ticket | | Event | +--+---+ +---------------+ +---------------+ +-------+ | SOAP Client SOAP Server | +---------------+ +---------------+ +----->| Action: Reply +-- HTTP POST ->| Queue Msg/Job | | within 60 sec |<- Status:200 -+ HTTP Response | +---------------+ +---------------+
One of the things I like about gSOAP is that it is constantly being improved then rereleased. However, this caused me to waste an hour (totally my own fault) when I casually attempted to use demo client program calcclient.c from gSOAP-2.8.15 with demo server program calcserver.c from gSOAP-2.8.3 which caused the client to always display a result of '0' with no error messages. This was caused by the fact that file calc.h had changed between releases which affected generated code, wsdl, and data.
| ver | calc.h | calc_add_req.xml |
|---|---|---|
| 2.8.3 (old) |
//gsoap ns service name: calc //gsoap ns service style: document //gsoap ns service encoding: literal //gsoap ns service namespace: http://websrv.cs.fsu.edu/~engelen/calc.wsdl //gsoap ns service location: http://websrv.cs.fsu.edu/~engelen/calcserver.cgi //gsoap ns schema namespace: urn:calc int ns__add(double a, double b, double *result); int ns__sub(double a, double b, double *result); int ns__mul(double a, double b, double *result); int ns__div(double a, double b, double *result); int ns__pow(double a, double b, double *result); |
<?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns="urn:calc"> <SOAP-ENV:Body> <ns:add> <ns:a>0.0</ns:a> <ns:b>0.0</ns:b> </ns:add> </SOAP-ENV:Body> </SOAP-ENV:Envelope> |
| 2.8.15 (new) |
//gsoap ns service name: calc Simple calculator service //gsoap ns service protocol: SOAP //gsoap ns service style: rpc //gsoap ns service encoding: encoded //gsoap ns service namespace: http://websrv.cs.fsu.edu/~engelen/calc.wsdl //gsoap ns service location: http://websrv.cs.fsu.edu/~engelen/calcserver.cgi //gsoap ns schema namespace: urn:calc //gsoap ns service method-documentation: add Sums two values int ns__add(double a, double b, double *result); //gsoap ns service method-documentation: sub Subtracts two values int ns__sub(double a, double b, double *result); //gsoap ns service method-documentation: mul Multiplies two values int ns__mul(double a, double b, double *result); //gsoap ns service method-documentation: div Divides two values int ns__div(double a, double b, double *result); //gsoap ns service method-documentation: pow Raises a to b int ns__pow(double a, double b, double *result); |
<?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns="urn:calc"> <SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <ns:add> <a>0.0</a> <b>0.0</b> </ns:add> </SOAP-ENV:Body> </SOAP-ENV:Envelope> |
To diagnose problems (without resorting to a packet sniffer) you might wish to insert these 3-4 lines into your server or client program. Remember that you must link against "gsoapdbg.olb" rather than "gsoap.olb".
soap_init(&soap); // initialize (this line will already be present) soap_set_recv_logfile(&soap, "server-recv.log"); // -+ soap_set_sent_logfile(&soap, "server-sent.log"); // -+- usually written to the Apache logging area soap_set_test_logfile(&soap, "server-test.log"); // -+ soap_set_mode(&soap, SOAP_XML_STRICT); // tell gSOAP to reject bad SOAP transactions (will throw an error) soap_serve(&soap); // serve as a CGI application (this line will already be present)
$! make your DCL session case-sensitive
$ SET PROC/CASE=SENS/PARSE=EXTENDED
$! copy with rename $ COPY AXIS2$ROOT:[openvms]AXIS2.WAR APACHE$COMMON:[JAKARTA.TOMCAT.webapps]axis2.war
$! back to case-insensitive $ SET PROC/CASE=SENS/PARSE=TRADITIONAL
============================================================================================== title : axis2_service_demo_i64.txt author : Neil Rieck created : 2018.01.09 purpose : A "Simple Service" demo for Apache Axis2 on OpenVMS-8.3 reference 1: Book "Quickstart Apache Axis2" by Deepal Jayasinghe reference 2: http://people.apache.org/~ruchithf/hw-axis2/ notes : 1. case is important for files as well as directories (folders) : 2. AXIS2 will not deploy a service unless the extension is ".aar" : 3. SET PROC/CASE=SENS/PARSE=EXTENDED ! change VMS session to case-sensitive : SET PROC/CASE=BLIND/PARSE=TRADITIONAL ! restore VMS sessions to default : 4. the "ss" prefix means "simple service" ============================================================================================== $ SET PROC/CASE=SENS/PARSE=EXTENDED ! make your DCL session case-sensitive $ create SimpleService.java ! create a new file with this name // // The service implementation class // public class SimpleService { // // method: ssAdd // public int ssAdd(int ssValue1, ssValue2) { return ssValue1 + ssValue2; } // // method: ssSubtract // public int ssSubtract(int ssValue1, ssValue2) { return ssValue1 - ssValue2; } // // method: ssEcho // public String ssEcho(String ssValue3) { return "You sent: "+ ssValue3; } } <<<---- hit CTRL-Z here to close the "create" command $! $! this next bit is important because the structure will be copied into the AAR file $! $ cre/dir [.TEMP] $ cre/dir [.TEMP.META-INF] $ create [.TEMP.META-INF]services.xml <service name="SimpleService"> <description> Simple Service Hack </description> <parameter name="ServiceClass" locked="false">SimpleService</parameter> <operation name="ssAdd"> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/> </operation> <operation name="ssSubtract"> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/> </operation> <operation name="ssEcho"> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/> </operation> </service> <<<---- hit CTRL-Z here to close the "create" command $! $! for case-insensitive DCL sessions we double-quote to preserve case $! $ javac SimpleService.java -d TEMP/ $ jar cvf SimpleService.aar -C TEMP/ META-INF/services.xml $ jar uvf SimpleService.aar -C TEMP/ SimpleService.class $ unzip -l SimpleService.aar ! test the archive like so Archive: AXIS2$ROOT:[000000.NEIL.SS]SimpleService.aar;21 Length Date Time Name -------- ---- ---- ---- 0 01-09-18 13:41 META-INF/ 70 01-09-18 13:41 META-INF/MANIFEST.MF 572 01-09-18 13:40 META-INF/services.xml 585 01-09-18 13:41 SimpleService.class -------- ------- 1227 4 files $ copy SimpleService.aar - APACHE$COMMON:[JAKARTA.TOMCAT.webapps.axis2.WEB-INF.services] $! --- step 7 ------------------------------------------------------------- Probe the service with any browser: http://yada.net:8080/axis2/services/listServices view the available services http://yada.net:8080/axis2/services/SimpleService?xsd view the associated xsd http://yada.net:8080/axis2/services/SimpleService?wsdl view the associated wsdl http://yada.net:8080/axis2/services/SimpleService?wsdl2 view the associated wsdl2 Test the service methods with any browser: http://yada.net:8080/axis2/services/SimpleService/ssEcho?param0=This is a test http://yada.net:8080/axis2/services/SimpleService/ssAdd?param0=34¶m1=12 http://yada.net:8080/axis2/services/SimpleService/ssSubtract?param0=34¶m1=12 Caveat: this kind of testing only works if you have include support for the HTTP GET method (usually there with AXIS2; optional with gSOAP; not supported on OpenVMS where the Apache module 'mod_gsoap.exe' blocks all HTTP GET operations except for '?wsdl')
Back to Home