1.引入Jar包
?
?
2.Web.xml中添加信息
?
<servlet>
<servlet-name>SOAPMonitorService</servlet-name>
<servlet-class>org.apache.axis.monitor.SOAPMonitorService</servlet-class>
<init-param>
<param-name>SOAPMonitorPort</param-name>
<param-value>5001</param-value>
</init-param>
<load-on-startup>100</load-on-startup>
</servlet>
<servlet>
<servlet-name>AdminServlet</servlet-name>
<servlet-class>org.apache.axis.transport.http.AdminServlet</servlet-class>
<load-on-startup>100</load-on-startup>
</servlet>
<servlet>
<servlet-name>AxisServlet</servlet-name>
<servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SOAPMonitorService</servlet-name>
<url-pattern>/SOAPMonitor</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>AdminServlet</servlet-name>
<url-pattern>/servlet/AdminServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/servlet/AxisServlet/</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>*.jws</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
<listener>
<listener-class>
org.apache.axis.transport.http.AxisHTTPSessionListener
</listener-class>
</listener>
?
3.創建Service類
package net.hello.soap;
public class HelloService {
public Person sayHello(String username, Toy toy) {
System.out.println("接收:" + username + ",Toy:" + toy.toString());
Person person = new Person();
person.createPerson(username);
System.out.println("自動生成Person:" + person.toString());
person.setToy(toy);
System.out.println("加入Toy的Person:" + person.toString());
return person;
}
}
?
4.其他參數類
Person:
package net.hello.soap;
import java.io.Serializable;
import java.util.Arrays;
import java.util.Date;
public class Person implements Serializable {
private static final long serialVersionUID = -4109457804756865917L;
private String name;
private int xynum;
private Date birthday;
private String[] aihao;
private static long index = 1;
private Toy toy;
public void createPerson(String name) {
if (name != null && !name.trim().equals("")) {
this.name = name.trim();
} else {
this.name = "Person" + index++;
}
birthday = new Date();
xynum = Math.round(index);
aihao = new String[] { "aihao1", "aihao2", "aihao3", "愛好4", "愛好5" };
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getXynum() {
return xynum;
}
public void setXynum(int xynum) {
this.xynum = xynum;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String[] getAihao() {
return aihao;
}
public void setAihao(String[] aihao) {
this.aihao = aihao;
}
public static long getIndex() {
return index;
}
public static void setIndex(long index) {
Person.index = index;
}
public Toy getToy() {
return toy;
}
public void setToy(Toy toy) {
this.toy = toy;
}
@Override
public String toString() {
return "Person [name=" + name + ", xynum=" + xynum + ", birthday=" + birthday + ", aihao=" + Arrays.toString(aihao) + ", toy=" + toy + "]";
}
}
?
Toy:
package net.hello.soap;
import java.io.Serializable;
public class Toy implements Serializable {
private static final long serialVersionUID = -724430347070233459L;
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Toy [name=" + name + ", age=" + age + "]";
}
}
?
5.WEB-INF下創建server-config.wsdd
<?xml version="1.0" encoding="UTF-8"?>
<deployment xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"
xmlns:handler="http://xml.apache.org/axis/wsdd/providers/handler"
xmlns="http://xml.apache.org/axis/wsdd/">
<globalConfiguration name="defaultClientConfig">
<requestFlow name="RequestFlow1" type="">
<handler name="Handler1" type="java:org.apache.axis.handlers.JWSHandler">
<parameter name="scope" value="session" />
</handler>
<handler name="Handler2" type="java:org.apache.axis.handlers.JWSHandler">
<parameter name="scope" value="request" />
<parameter name="extension" value=".jwr" />
</handler>
</requestFlow>
</globalConfiguration>
<handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper" />
<handler name="LocalResponder"
type="java:org.apache.axis.transport.local.LocalResponder" />
<handler name="Authenticate"
type="java:org.apache.axis.handlers.SimpleAuthenticationHandler" />
<transport name="http" type="">
<requestFlow name="RequestFlow1" type="">
<handler name="Handler1" type="URLMapper" />
<handler name="Handler2"
type="java:org.apache.axis.handlers.http.HTTPAuthHandler" />
</requestFlow>
</transport>
<transport name="local" type="">
<responseFlow name="ResponseFlow1" type="">
<handler name="Handler1" type="LocalResponder" />
</responseFlow>
</transport>
<service name="AdminService" type="" provider="java:MSG">
<parameter name="allowedMethods" value="AdminService" />
<parameter name="enableRemoteAdmin" value="false" />
<parameter name="className" value="org.apache.axis.utils.Admin" />
<namespace>http://xml.apache.org/axis/wsdd/</namespace>
</service>
<service name="Version" type="" provider="java:RPC">
<parameter name="allowedMethods" value="getVersion" />
<parameter name="className" value="org.apache.axis.Version" />
</service>
<service name="helloService" provider="java:RPC">
<parameter name="className" value="net.hello.soap.HelloService" />
<parameter name="allowedMethods" value="sayHello" />
<typeMapping xmlns:ns="urn:Toy" qname="ns:Toy"
type="java:net.hello.soap.Toy" serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
<typeMapping xmlns:ns="urn:Person" qname="ns:Person"
type="java:net.hello.soap.Person" serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
</service>
</deployment>
?
6.客戶端
?
package net.hello.soap.test;
import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;
import net.hello.soap.Toy;
import net.hello.soap.Person;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
public class Test {
public static void main(String[] args) {
try {
String username = "Guest";
String url = "http://localhost:8099/hellonet/services/helloService";
Service service = new Service();
Toy toy = new Toy();
toy.setName("Toy1");
toy.setAge(1);
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(new URL(url));
call.setOperationName(new QName("helloService", "sayHello"));
QName toyQn = new QName("ns:Toy");
QName personQn = new QName("ns:Person");
call.registerTypeMapping(Person.class,
personQn, // typeMapping注冊,包含序列化和反序列化的操作
new org.apache.axis.encoding.ser.BeanSerializerFactory(Person.class, personQn),
new org.apache.axis.encoding.ser.BeanDeserializerFactory(Person.class, personQn));
call.registerTypeMapping(Toy.class,
toyQn, // typeMapping注冊,包含序列化和反序列化的操作
new org.apache.axis.encoding.ser.BeanSerializerFactory(Toy.class, toyQn),
new org.apache.axis.encoding.ser.BeanDeserializerFactory(Toy.class, toyQn));
call.addParameter("username", XMLType.XSD_STRING, ParameterMode.IN);
call.addParameter("toy2", toyQn, ParameterMode.IN);
call.setReturnType(personQn, Person.class);
Person person = (Person) call.invoke(new Object[] { username, toy });
System.out.println(person);
} catch (Exception e) {
e.printStackTrace();
}
}
}
?
7.數組這樣寫
WSDD文件中:
<typeMapping xmlns:ns="urn:array" qname="ns:array"
type="java:test.Person[]"
serializer="org.apache.axis.encoding.ser.ArraySerializerFactory"
deserializer="org.apache.axis.encoding.ser.ArrayDeserializerFactory"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
?
客戶端:
QName arrQn = new QName("ns:array");
call.registerTypeMapping(Person[].class, arrQn,
new org.apache.axis.encoding.ser.ArraySerializerFactory(Person[].class, arrQn),
new org.apache.axis.encoding.ser.ArrayDeserializerFactory(arrQn));
?
8.運行輸出
?運行服務器,訪問
http://localhost:8099/hellonet/servlet/AxisServlet/
,頁面顯示:
?
訪問:
http://localhost:8099/hellonet/services/helloService?wsdl
,頁面顯示:
<wsdl:definitions targetNamespace="http://localhost:8099/hellonet/services/helloService"><!--WSDL created by Apache Axis version: 1.4
Built on Apr 22, 2006 (06:55:48 PDT)--><wsdl:types><schema targetNamespace="urn:Toy"><import namespace="http://localhost:8099/hellonet/services/helloService"/><import namespace="urn:Person"/><import namespace="http://schemas.xmlsoap.org/soap/encoding/"/><complexType name="Toy"><sequence><element name="age" type="xsd:int"/><element name="name" nillable="true" type="soapenc:string"/></sequence></complexType></schema><schema targetNamespace="http://localhost:8099/hellonet/services/helloService"><import namespace="urn:Toy"/><import namespace="urn:Person"/><import namespace="http://schemas.xmlsoap.org/soap/encoding/"/><complexType name="ArrayOf_soapenc_string"><complexContent><restriction base="soapenc:Array"><attribute ref="soapenc:arrayType" wsdl:arrayType="soapenc:string[]"/></restriction></complexContent></complexType></schema><schema targetNamespace="urn:Person"><import namespace="urn:Toy"/><import namespace="http://localhost:8099/hellonet/services/helloService"/><import namespace="http://schemas.xmlsoap.org/soap/encoding/"/><complexType name="Person"><sequence><element name="aihao" nillable="true" type="impl:ArrayOf_soapenc_string"/><element name="birthday" nillable="true" type="xsd:dateTime"/><element name="name" nillable="true" type="soapenc:string"/><element name="toy" nillable="true" type="tns1:Toy"/><element name="xynum" type="xsd:int"/></sequence></complexType></schema></wsdl:types><wsdl:message name="sayHelloResponse"><wsdl:part name="sayHelloReturn" type="tns2:Person">
</wsdl:part></wsdl:message><wsdl:message name="sayHelloRequest"><wsdl:part name="username" type="soapenc:string">
</wsdl:part><wsdl:part name="toy" type="tns1:Toy">
</wsdl:part></wsdl:message><wsdl:portType name="HelloService"><wsdl:operation name="sayHello" parameterOrder="username toy"><wsdl:input message="impl:sayHelloRequest" name="sayHelloRequest">
</wsdl:input><wsdl:output message="impl:sayHelloResponse" name="sayHelloResponse">
</wsdl:output></wsdl:operation></wsdl:portType><wsdl:binding name="helloServiceSoapBinding" type="impl:HelloService"><wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/><wsdl:operation name="sayHello"><wsdlsoap:operation soapAction=""/><wsdl:input name="sayHelloRequest"><wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://soap.hello.net" use="encoded"/></wsdl:input><wsdl:output name="sayHelloResponse"><wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://localhost:8099/hellonet/services/helloService" use="encoded"/></wsdl:output></wsdl:operation></wsdl:binding><wsdl:service name="HelloServiceService"><wsdl:port binding="impl:helloServiceSoapBinding" name="helloService"><wsdlsoap:address location="http://localhost:8099/hellonet/services/helloService"/></wsdl:port></wsdl:service></wsdl:definitions>
?
運行客戶端:
客戶端輸出:
Person [name=Guest, xynum=1, birthday=Mon Jul 28 14:41:13 CST 2014, aihao=[aihao1, aihao2, aihao3, 愛好4, 愛好5], toy=Toy [name=Toy1, age=1]]
服務端輸出:
接收:Guest,Toy:Toy [name=Toy1, age=1]
自動生成Person:Person [name=Guest, xynum=1, birthday=Mon Jul 28 14:41:13 CST 2014, aihao=[aihao1, aihao2, aihao3, 愛好4, 愛好5], toy=null]
加入Toy的Person:Person [name=Guest, xynum=1, birthday=Mon Jul 28 14:41:13 CST 2014, aihao=[aihao1, aihao2, aihao3, 愛好4, 愛好5], toy=Toy [name=Toy1, age=1]]
?
?