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')