Examples
This chapter describes how to create the server programs ECHOSTRING, ECHOSDL, ECHOFDL (services with the same input and output) as Tmax web services and the client using Axis 1.4, and execute them.
1. Service Generation
1.1. Server Program
The ECHO service returns the buffer that is the same as the input buffer.
The files required for creating the server program are the server source (sample.c), sdl definition (demo.s), and the fdl definition (demo.f) files.
<sample.c>
#include <stdio.h>
#include <usrinc/atmi.h>
#include <usrinc/fbuf.h>
#include "../sdl/demo_sdl.h"
ECHOSTRING(TPSVCINFO *msg)
{
printf("client message : %s \n", msg->data );
tpreturn(TPSUCCESS, 0, (char *)msg->data, msg->len, 0);
}
ECHOSDL(TPSVCINFO *msg)
{
struct echo_s *rcvbuffer;
struct echo_s test;
struct echo_s test_s;
rcvbuffer = (struct echo_s *)msg->data;
printf("rcvbuffer\n");
printf("char : [%d] \n"
"short : [%d] \n"
"int : [%d] \n"
"float: [%f] \n"
"double: [%lf] \n"
"string: [%s] \n",
rcvbuffer->charvalue,
rcvbuffer->shortvalue,
rcvbuffer->intvalue,
rcvbuffer->floatvalue,
rcvbuffer->doublevalue,
rcvbuffer->stringvalue
);
tpreturn(TPSUCCESS, 0, (char *)msg->data, msg->len,0);
}
ECHOFDL(TPSVCINFO *msg)
{
fbprint((FBUF *)msg->data);
tpreturn(TPSUCCESS,0,(char *)msg->data, msg->len,0);
}
<demo.s>
The following is an sdl definition file that can be built with sdlc.
struct echo_s{
char charvalue;
short shortvalue;
int intvalue;
float floatvalue;
double doublevalue;
char stringvalue[20];
};
<demo.f>
The following is an fdl definition file that can be built with fdlc.
CHARVALUE 2100 char SHORTVALUE 2101 short INTVALUE 2102 int FLOATVALUE 2104 float DOUBLEVALUE 2105 double STRINGVALUE 2106 string
2. Web Service Configuration
2.1. Creating a Service Information File
<sample.txt>
sample.txt SERVICE
name = echostring
tmaxname = ECHOSTRING
intype = STRING
outtype = STRING
REQUEST
name = req
type = string
restriction = maxLength="19"
RESPONSE
name = result
type = string
restriction = maxLength="19"
SERVICE
name = echosdl
tmaxname = ECHOSDL
intype = STRUCT
outtype = STRUCT
instruct = echo_s
outstruct = echo_s
REQUEST
name = charvalue
type = char
name = shortvalue
type = short
name = intvalue
type = int
name = floatvalue
type = float
name = doublevalue
type = double
name = stringvalue
type = string
restriction = maxLength="19"
RESPONSE
name = charvalue
type = char
name = shortvalue
type = short
name = intvalue
type = int
name = floatvalue
type = float
name = doublevalue
type = double
name = stringvalue
type = string
restriction = maxLength="19"
SERVICE
name = echofdl
tmaxname = ECHOFDL
intype = FDL
outtype = FDL
instruct = echofdlRequestFDL
outstruct = echofdlResponseFDL
REQUEST
name = CHARVALUE
type = char
maxoccurs = 50
name = SHORTVALUE
type = short
maxoccurs = 50
name = INTVALUE
type = int
maxoccurs = 50
name = FLOATVALUE
type = float
maxoccurs = 50
name = DOUBLEVALUE
type = double
maxoccurs = 50
name = STRINGVALUE
type = string
maxoccurs = 50
RESPONSE
name = CHARVALUE
type = char
maxoccurs = 50
name = SHORTVALUE
type = short
maxoccurs = 50
name = INTVALUE
type = int
maxoccurs = 50
name = FLOATVALUE
type = float
maxoccurs = 50
name = DOUBLEVALUE
type = double
maxoccurs = 50
name = STRINGVALUE
type = string
maxoccurs = 50
Place the <sample.txt> file in the $TMAXDIR/config directory and create the service information binary file using tmmbfgen.
tmmbfgen –r sample.txt –o sample
2.2. Creating a WebService Gateway Configuration File
<sample.xml>
Enter the address to display externally in $endpoint (e.g., 192.168.1.2:80). Place the file in the $TMAXDIR/config directory.
<?xml version="1.0" encoding="UTF-8"?>
<Configuration xmlns="http://www.tmax.co.kr/twsp/twsgwconfig/">
<Servicelist id="TmaxSampleECHO" >
<Service name="echostring" />
<Service name="echosdl" />
<Service name="echofdl" />
</Servicelist>
<GWInstance>
<HTTP address="$endpoint"/>
</GWInstance>
</Configuration>
3. Tmax Configuration File
The following code is an example of the Tmax environment configuration file. Enter the machine name in $NODENAME, and enter the Tmax installation path in $TMAXDIR.
*DOMAIN
domain SHMKEY = 77521, MINCLH = 1, MAXCLH = 2,
TPORTNO = 15000, BLOCKTIME = 30, MAXSACALL=1024, MAXCACALL=1024
*NODE
$NODENAME TMAXDIR = "$TMAXDIR",
APPDIR = "$TMAXDIR/appbin",
PATHDIR = "$TMAXDIR/path",
TLOGDIR = "$TMAXDIR/log/tlog",
ULOGDIR = "$TMAXDIR/log/ulog",
SLOGDIR = "$TMAXDIR/log/slog",
MAXCPC=2000, MAXGWCPC=300
*SVRGROUP
svg1 NODENAME = $NODENAME
*SERVER
sample SVGNAME = svg1
*SERVICE
ECHOSTRING SVRNAME=sample
ECHOSDL SVRNAME=sample
ECHOFDL SVRNAME=sample
*GATEWAY
WSGW1 GWTYPE=WSGW,
CLOPT="-csample.xml -msample",
NODENAME=$NODENAME,
DIRECTION=IN,
PORTNO=80
4. Creating an Axis1.4 Client Program
4.1. Creating the WSDL File
Create the wsdl file using the xwsdlgen utility.
xwsdlgen –m sample –g sample.xml –o sample.wsdl
4.2. Creating a Stub
The <sample.wsdl> file created on the server is needed to create a Stub.
Configure the required jar file in AXIS_CLASS_PATH as follows:
java –cp $AXIS_CLASS_PATH;. org.apache.axis.wsdl.WSDL2Java sample.wsdl –p echosamplesrpc
When the previous command is executed, the files required for creating a client are created in the echosamplesrpc folder. Use this package to create the following client.
|
For more information on wsdl2java, refer to the apache site |
<echoclient.java>
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
public class EchoClient
{
public static void main(String[] args){
String url = "HTTP://192.168.1.2:80";
EchoClientWithRPC client_r = new EchoClientWithRPC(url);
client_r.test();
}
}
class EchoClientWithRPC
{
private echosamplesrpc.TmaxSampleECHOLocator service;
private echosamplesrpc.TmaxSampleECHOPortType port;
public EchoClientWithRPC(String url)
{
try
{
service = new echosamplesrpc.TmaxSampleECHOLocator();
service.setEndpointAddress(service.getTmaxSampleECHOPortWSDDServiceName(),
url);
port = service.getTmaxSampleECHOPort();
}
catch(ServiceException e)
{
e.printStackTrace();
}
}
private void echostring()
{
try
{
String req = "abc";
String response = port.echostring(req);
System.out.println("echostring result > " + response);
}catch(RemoteException e)
{
System.out.println(e.getMessage());
}
}
private void echosdl()
{
try
{
echosamplesrpc.Echo_s req = new echosamplesrpc.Echo_s();
req.setCharvalue((byte)49);
req.setShortvalue((short)2);
req.setIntvalue(3);
req.setFloatvalue(5.1f);
req.setDoublevalue(6.1);
req.setStringvalue("abc");
echosamplesrpc.Echo_s response = port.echosdl(req);
System.out.println("echosdl result >");
System.out.println("char value > " + response.getCharvalue() +
\nshort value > "+ response.getShortvalue() +
"\nint value > " + response.getIntvalue() +
"\nfloat value > " + response.getFloatvalue() +
"\ndouble value > " + response.getDoublevalue() +
"\nstring value > " + response.getStringvalue());
}catch(RemoteException e)
{
e.printStackTrace();
}
}
private void echofdl()
{
try
{
echosamplesrpc.EchofdlRequestFDL echofdlRequestFDL =
new echosamplesrpc.EchofdlRequestFDL();
echofdlRequestFDL.setCHARVALUE(new byte[]{(byte)49});
echofdlRequestFDL.setSHORTVALUE(new short[]{(short)2});
echofdlRequestFDL.setINTVALUE(new int[]{3});
echofdlRequestFDL.setFLOATVALUE(new float[]{5.1f});
echofdlRequestFDL.setDOUBLEVALUE(new double[]{6.1});
echofdlRequestFDL.setSTRINGVALUE(new String[]{"abc"});
echosamplesrpc.EchofdlResponseFDL response = port.echofdl(echofdlRequestFDL);
System.out.println("echofdl result >");
System.out.println("char value > " + response.getCHARVALUE()[0] +
"\nshort value > " + response.getSHORTVALUE()[0] +
"\nint value > " + response.getINTVALUE()[0] +
"\nfloat value > " + response.getFLOATVALUE()[0] +
"\ndouble value > " + response.getDOUBLEVALUE()[0] +
"\nstring value > " + response.getSTRINGVALUE()[0]);
}catch(RemoteException e)
{
e.printStackTrace();
}
}
public void test()
{
echostring();
echosdl();
echofdl();
}
}