Deploying web service with Java and Axis
In this article we see how can we deploy a web service, you need to have apache, tomcat and axis up and running.
To publish a simple webservice:
Create a simple text file, for example “Somma.jws” like this
1 2 3 4 5 |
public class Somma { public int somma(int a, int b) { return a+b; } } |
Put this file in the axis directory, for example: /usr/local/apache-tomcat-6.0.13/webapps/axis
the web service is already available at: http://localhost:8080/axis/Somma.jws
the WSDL: http://localhost:8080/axis/Somma.jws?wsdl
direct invocation via query string: http://localhost:8080/axis/Somma.jws?method=somma&a=2&b=3
This is a very interesting feature, you can call the web service via simple web request, for example via javascript, without the complicated stuff needed for invoking a web service .
The jws web service is simple and fast, but they support only standard type String, int and so on.
For a more complex web service you have to deploy it from the java source code, and a wsdd (Web Service Deployment Descriptor) text file:
Example:
1 2 3 4 5 6 |
package com.server; public class Company { public int companyID; public String companyName; public String[ ] employeeNames; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
package com.server; public class CompanyService{ /** * @return company object */ public Company getCompanyData(){ Company company = new Company(); String [] employeeNames = new String[] { "Balaji", "LSMS" , "LLQ" }; company.companyID = 2311; company.companyName = "Test"; company.employeeNames = employeeNames; return company; } } |
1 2 3 4 5 6 7 |
<deployment xmlns="http://xml.apache.org/axis/wsdd/"> xmlns:java="http://xml.apache.org/axis/wsdd/providers/java" xmlns:myNS="http://www.synaptica.info" > <service name="CompanyRepository" provider="java:RPC"></service></deployment> <parameter name="className" value="com.server.CompanyService"></parameter> <parameter name="allowedMethods" value="getCompanyData"></parameter> <parameter name="wsdlTargetNamespace" value="CompanyService"></parameter> <beanmapping qname="myNS:Company" languagespecifictype="java:com.server.Company"></beanmapping></deployment> |
Run (you can do it via the eclipse run dialog)
java org.apache.axis.client.AdminClient deployCompanyWS.wsdd
You have deployed your WS.
try it http://localhost:8080/axis/services/CompanyRepository?method=getCompanyData
note how the Company class is serialized through xml
1 2 3 4 5 6 7 8 9 |
<?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <getCompanyDataResponse soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <getCompanyDataReturn href="#id0"/> </getCompanyDataResponse> <multiRef id="id0" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns1:Company" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns1="http://www.synaptica.info"> <companyID href="#id1"/> <companyName xsi:type="soapenc:string">Test</companyName> <employeeNames xsi:type="soapenc:string">Balaji</employeeNames> <employeeNames xsi:type="soapenc:string">LSMS</employeeNames> <employeeNames xsi:type="soapenc:string">LLQ</employeeNames> </multiRef><multiRef id="id1" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="xsd:int" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">2311 </multiRef> </soapenv:Body> </soapenv:Envelope> |
to undeploy
1 2 3 4 5 |
<undeployment> xmlns="http://xml.apache.org/axis/wsdd/"> <!-- Services from SommaService WSDL service --> <service name="CompanyRepository"> </service></undeployment> |
java org.apache.axis.client.AdminClient undeploy.wsdd
To create Java Helper class to call the web service just created:
java org.apache.axis.wsdl.WSDL2Java http://localhost:8080/axis/services/CompanyRepository?wsdl
Una risposta.
[…] this article to test your fresh installation with some custom […]