The information and software
presented on this web site are
intended for educational use
only by OpenVMS application developers
and OpenVMS system attendants.Table of Contents
| e-Business Product Name Confusion | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Product | Description/Notes | ||||||||||||
| ANT | Another Neat Tool (an Apache scripting tool meant to replace various OS script interpreters) | ||||||||||||
| Apache HTTPd | Hyper Text Transport Protocol daemon is a standalone product which operates on TCP/IP ports 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. | ||||||||||||
| - CSWS_JAVA | HP's name for Apache Tomcat (requires Java) | ||||||||||||
| - CSWS_PERL | HP's name for a module which enables Apache HTTPd to access Perl (requires Perl) | ||||||||||||
| - CSWS_PHP | HP's name for a module which provides Apache HTTPd with a PHP Interpreter | ||||||||||||
| Apache Tomcat | A standalone Java-based web server product which operates on
TCP/IP port 8080 by default (configure the connector kit to facilitate back channels between HTTPd and Tomcat) Confusingly, the Compaq/HP Tomcat module for OpenVMS is named CSWS_JAVA |
||||||||||||
| - Jakarta | Apache's umbrella name for Java projects | ||||||||||||
| - Catalina | Name of Tomcat's Servlet Container Technology | ||||||||||||
| - Coyote | Tomcat's Java-based HTTPd server | ||||||||||||
| - Jasper | Tomcat's JSP (Java Server Page) technology | ||||||||||||
| GNV | GNU Not VMS (Unix-like command interpreter for OpenVMS which includes BASH) | ||||||||||||
| Java | Standalone product required by Tomcat.
You want the
development kit (because of the JIT compiler), not the run-time kit.
|
||||||||||||
| OpenSSL | Secure Sockets
Layer standalone product (not used by Apache HTTPd which has its own
built-in SSL 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 | ||||||||||||
| SSL | Secure Sockets
Layer standalone product (not used by Apache HTTPd which has its own
built-in SSL 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) |
||||||||||||
| WSIT | Web Services Integration Toolkit (technology for accessing web services from high level languages) | ||||||||||||
| UDDI | Universal Description Discovery and
Integration is another Web
Services component (this technology has not lived up to original expectations) |
||||||||||||
| gSOAP |
generated SOAP. A third-party SOAP engine supporting code written in
either C or 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/Java | SOAP Toolkit 2.x | Y | http://en.wikipedia.org/wiki/Apache_Axis | Java |
| SOAP 1.1 and 1.2 | Apache AXIS2/Java | Axis2 | Y | http://en.wikipedia.org/wiki/Apache_Axis2 | Java |
| SOAP 1.1 and 1.2 | gSOAP | N | http://www.cs.fsu.edu/~engelen/soap.html | C/C++ |
Notes:
<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 : AAA_help.TXT
author : Neil Rieck
date : 2010.07.21
purpose : A "Simple Service" demo for Apache Axis2 on OpenVMS-8.3
reference: http://people.apache.org/~ruchithf/hw-axis2/
notes : 1. the original steps have been modified for use on OpenVMS
: 2. case is important for directories
: 3. AXIS2 will not deploy a service unless the extension is ".aar"
: 4. my DCL script "SENS" will toggle process case-sensitivity
: 5. some variable and method names have been changed to assist in WSDL + XSD hacking
==============================================================================================
step1 -------------------------------------------------------------------------
$ create SimpleService.java
...using these contents (which I modified from the source)
/**
* The service implementation class
*/
public class SimpleService {
/**
* The ssAdd method will be exposed as operation ssAdd
*
* note: the "ss" prefix means "simple service"
*/
public int ssAdd(int ssValue1, ssValue2) {
return ssValue1 + ssValue2;
}
/**
* The ssSubtract method will be exposed as operation ssSubtract
*/
public int ssSubtract(int ssValue1, ssValue2) {
return ssValue1 - ssValue2;
}
/**
* The ssEcho method will be exposed as operation ssEcho
*/
public String ssEcho(String ssValue3) {
return ssValue3;
}
}
step2 -------------------------------------------------------------------------
$ cre/dir [.TEMP]
$ cre/dir [.TEMP.META-INF]
$ create [.TEMP.META-INF]services.xml
...using these contents (which I modified from the source)
<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" <--- optional
class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
</operation>
<operation name="ssSubtract">
<messageReceiver
mep="http://www.w3.org/2004/08/wsdl/in-out" <--- optional
class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
</operation>
<operation name="ssEcho">
<messageReceiver
mep="http://www.w3.org/2004/08/wsdl/in-out" <--- optional
class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
</operation>
</service>
step3 -------------------------------------------------------------------------
$ javac "SimpleService.java" -d TEMP/ (doublequote to to preserve case)
step4 -------------------------------------------------------------------------
$ jar "cvf" "SimpleService.aar" "-C" TEMP/ "META-INF/services.xml"
$ jar "uvf" "SimpleService.aar" "-C" TEMP/ "SimpleService.class"
step5 -------------------------------------------------------------------------
test the archive like so:
$ unzip -l SimpleService.aar
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
step6 -------------------------------------------------------------------------
put into production:
$ 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=Hello
http://yada.net:8080/axis2/services/SimpleService/ssAdd?param0=34¶m1=12
http://yada.net:8080/axis2/services/SimpleService/ssSubtract?param0=34¶m1=12
| 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"/> <--- notice this syntax (you can change it)
<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"/> <--- notice this syntax (you can change it)
<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"/> <--- notice this syntax (you can change it)
<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>
legend: <sr> = system response
<ur> = user response
--------------------------------------------------------------------------------------------------------------------
<sr> $ <--- my 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
<wsdl:definitions xmlns:tns="http://yada.com/bl"
...
$ soapcpp2 "-c" "-S" -1 yada.h ! only generate "c" code, only generate Server code, only support soap1.1
$ SET PROC/CASE=SENS/PARSE=EXTENDED
$ soapcpp2 -c -S -1 yada.h ! only generate "c" code, only generate Server code, only support soap1.1
$ SET PROC/CASE=BLIND/PARSE=TRADITION
Overview (Implements the PUSH-PUSH model)
Flow #1 (Company 1 to 2) 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) 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 | +---------------+ +---------------+
Back
to OpenVMS
Back
to Home