axis1.4集成web项目简单应用

刚开始接触axis1.4,参考了一下网站上的例子,也是云里雾里,所以系统的记录下自己搭建axis项目及应用的全过程。

1.准备环境

      1)官网上下载axis-bin-1_4.zip,官网地址http://www.eu.apache.org/dist/axis/axis/java/1.4/

      2)下载完成后,解压,将解压文件放到磁盘目录中,我这里放置的目录为D:\software\

      3)配置环境变量

            AXIS_HOME=D:\software\axis-1_4

            AXIS_LIB=%AXIS_HOME%\lib

            AXISCLASSPATH=%AXIS_LIB%\axis.jar;%AXIS_LIB%\commons- discovery.jar;%AXIS_LIB%\commons-logging.jar;%AXIS_LIB%\jaxrpc.jar;%AXIS_LIB%\saaj.jar;%AXIS_LIB%\log4j-1.2.8.jar;

           注意检查AXISCLASSPATH中jar包的名字,看是否带有版本,名字一定要lib中的jar包名字对应上

2.构建web工程

      新建web工程,将%AXIS_HOME%\lib下的jar包引入到工程中,在web.xml中添加

<listener>

<listener-class>org.apache.axis.transport.http.AxisHTTPSessionListener</listener-class>

</listener>

<servlet>

<servlet-name>AxisServlet</servlet-name>

<display-name>Apache-Axis Servlet</display-name>

<servlet-class>

org.apache.axis.transport.http.AxisServlet

</servlet-class>

</servlet>

<servlet>

<servlet-name>AdminServlet</servlet-name>

<display-name>Axis Admin Servlet</display-name>

<servlet-class>

org.apache.axis.transport.http.AdminServlet

</servlet-class>

<load-on-startup>100</load-on-startup>

</servlet>

<servlet>

<servlet-name>SOAPMonitorService</servlet-name>

<display-name>SOAPMonitorService</display-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-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>

<servlet-mapping>

<servlet-name>SOAPMonitorService</servlet-name>

<url-pattern>/SOAPMonitor</url-pattern>

</servlet-mapping>

<session-config>

<session-timeout>5</session-timeout>

</session-config>

<mime-mapping>

<extension>wsdl</extension>

<mime-type>text/xml</mime-type>

</mime-mapping>

<mime-mapping>

<extension>xsd</extension>

<mime-type>text/xml</mime-type>

</mime-mapping>

    

3.编写服务端代码,这里贴上我写的代码

         两个实体类

Book.java:

package com.axis.serviceside.entity;

import java.io.Serializable;

public class Book implements Serializable{

private String bookName;

private float price;

public String getBookName() {

return bookName;

}

public void setBookName(String bookName) {

this.bookName = bookName;

}

public float getPrice() {

return price;

}

public void setPrice(float price) {

this.price = price;

}

}

*************************************************************************************************

Person.java:

package com.axis.serviceside.entity;

import java.io.Serializable;

public class Person implements Serializable{

private String name;

private Book book;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public Book getBook() {

return book;

}

public void setBook(Book book) {

this.book = book;

}

}

****************************************************************************************************************

一个服务类:

PersonInfoService.java:

 package com.axis.serviceside.service;

import com.axis.serviceside.entity.Book;

import com.axis.serviceside.entity.Person;

public class PersonInfoService {

public String getPersonInfo(){

Person p = new Person();

p.setName("jiangxl");

Book b = new Book();

b.setBookName("jiangcheng");

b.setPrice(3.2f);

p.setBook(b);

return p.getName()+":"+p.getBook().getBookName();

}

public String getPersonInfo(String name){

Person p = new Person();

p.setName(name);

Book b = new Book();

b.setBookName("jiangcheng");

b.setPrice(3.2f);

p.setBook(b);

return p.getName()+":"+p.getBook().getBookName();

}

public String getPersonInfo(Person p){

Book b = new Book();

b.setBookName("jiangcheng");

b.setPrice(3.2f);

p.setBook(b);

return p.getName()+":"+p.getBook().getBookName();

}

}

4.在web-info文件夹下新建deploy.wsdd文件

<deployment xmlns="http://xml.apache.org/axis/wsdd/"

xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">

<service name="businessService" provider="java:RPC">

<parameter name="className"

value="com.axis.serviceside.service.PersonInfoService" /> <!-- 对应 PersonInfoService的全路径(所在包+类名)-->

<parameter name="allowedMethods" value="getPersonInfo" /> <!-- 允许发布的方法,为*则发布类中定义的全部public方法,如果指定多个可使用,隔开 -->

<beanMapping qname = "myNS:Person" xmlns:myNS="urn:PersonInfo"

languageSpecificType="java:com.axis.serviceside.entity.Person" /> <!--复杂参数传递所需,该例子中因PersonInfoService第三个方法getPersonInfo(Person p) 请求参数为一个对象,需要序列化-->

</service>

</deployment>

 这里还要多解释下beanMapping 

<beanMapping  qname="前缀:本地名" xmlns:前缀=“urn:名称空间” languageSpecificType="java:自定义类型的全路径(这里就是Person类的全路径)"

5.发布项目

    将项目发布到tomcat路径下,我这里发布到了D:\software\apache-tomcat-7.0.59\wtpwebapps路径下,运行tomcat,然后打开cmd,进入发布到项目路径的WEB-INFO目录下,我进入的是D:\software\apache-tomcat-7.0.59\wtpwebapps\mywebapp\WEB-INF,mywebapp是我的项目名称,运行命令

java -cp %AXISCLASSPATH% org.apache.axis.client.AdminClient -lhttp://localhost:8081/mywebapp/services/BusinessService deploy.wsdd

这是你会发现在web-info下生成了server-config.wsdd文件,刷新http://localhost:8081/mywebapp/services/businessService?wsdl看是否能打开,打开说明发布成功了。

6.编写客户端代码

1)调用无参方法

package com.axis.client;

import java.net.URL;

import javax.xml.namespace.QName;

import org.apache.axis.client.Call;

import org.apache.axis.client.Service;

import org.apache.axis.encoding.ser.BeanDeserializerFactory;

import org.apache.axis.encoding.ser.BeanSerializerFactory;

import com.axis.serviceside.entity.Book;

import com.axis.serviceside.entity.Person;

public class TestClient {

public static void main(String[] args) {

try {

String endPoint = "http://localhost:8081/mywebapp/services/businessService";  //

Service service = new Service();

Call call = (Call) service.createCall();

call.setTargetEndpointAddress(new URL(endPoint));

//调用带有Person对象的getPersonInfo方法采用 开始

//QName qn = new QName("urn:PersonInfo", "Person");

//call.registerTypeMapping(Person.class, qn,

//new BeanSerializerFactory(

//

//Person.class, qn),

//

//new BeanDeserializerFactory(Person.class, qn));

//

//

//Person person = new Person();

//

//person.setName("Kiah Han");

////结束

call.setOperationName(new QName(

"http://service.serviceside.axis.com", "getPersonInfo"));

String ret = (String) call.invoke(new Object[] {});

System.out.println("Sent 'Hello!', got '" + ret + "'");

} catch (Exception e) {

e.printStackTrace();

}

}

}

************************************************************************************************************************

调用有参数方法,参数为string类型

package com.axis.client;

import java.net.URL;

import javax.xml.namespace.QName;

import org.apache.axis.client.Call;

import org.apache.axis.client.Service;

import org.apache.axis.encoding.ser.BeanDeserializerFactory;

import org.apache.axis.encoding.ser.BeanSerializerFactory;

import com.axis.serviceside.entity.Book;

import com.axis.serviceside.entity.Person;

public class TestClient {

public static void main(String[] args) {

try {

String endPoint = "http://localhost:8081/mywebapp/services/businessService";  //

Service service = new Service();

Call call = (Call) service.createCall();

call.setTargetEndpointAddress(new URL(endPoint));

//调用带有Person对象的getPersonInfo方法采用 开始

//QName qn = new QName("urn:PersonInfo", "Person");

//call.registerTypeMapping(Person.class, qn,

//new BeanSerializerFactory(

//

//Person.class, qn),

//

//new BeanDeserializerFactory(Person.class, qn));

//

//

//Person person = new Person();

//

//person.setName("Kiah Han");

////结束

call.setOperationName(new QName(

"http://service.serviceside.axis.com", "getPersonInfo"));

String ret = (String) call.invoke(new Object[] {"test"});

System.out.println("Sent 'Hello!', got '" + ret + "'");

} catch (Exception e) {

e.printStackTrace();

}

}

}

*******************************************************************************************************************

调用有参数方法,参数类型为对象

package com.axis.client;

import java.net.URL;

import javax.xml.namespace.QName;

import org.apache.axis.client.Call;

import org.apache.axis.client.Service;

import org.apache.axis.encoding.ser.BeanDeserializerFactory;

import org.apache.axis.encoding.ser.BeanSerializerFactory;

import com.axis.serviceside.entity.Book;

import com.axis.serviceside.entity.Person;

public class TestClient {

public static void main(String[] args) {

try {

String endPoint = "http://localhost:8081/mywebapp/services/businessService";  //

Service service = new Service();

Call call = (Call) service.createCall();

call.setTargetEndpointAddress(new URL(endPoint));

//调用带有Person对象的getPersonInfo方法采用 开始

QName qn = new QName("urn:PersonInfo", "Person");

call.registerTypeMapping(Person.class, qn,

new BeanSerializerFactory(

Person.class, qn),

new BeanDeserializerFactory(Person.class, qn));

Person person = new Person();

person.setName("Kiah Han");

//结束

call.setOperationName(new QName(

"http://service.serviceside.axis.com", "getPersonInfo"));

String ret = (String) call.invoke(new Object[] {person});

System.out.println("Sent 'Hello!', got '" + ret + "'");

} catch (Exception e) {

e.printStackTrace();

}

}

}

这样一个简单的基于axis1.4方法的webservice项目就开发完成了

            

   

       

猜你喜欢

转载自sharis1987.iteye.com/blog/2228793
今日推荐