相信大家在日常的工作中可能会遇到在Java里调用.Net发布的WebService的问题,或者在JS前端调用WebService各种不方便的问题。本文将手把手教大家如何在Java中调用.Net发布的WebService,然后再发布为servlet,供Ajax等客户端方便调用。
一、下载axis-1_4并获取jar包
从官网下载axis_1_4.jar,从lib子文件夹中获取如下jar包:
axis.jar
axis-ant.jar
commons-discovery-0.2.jar
commons-logging-1.0.4.jar
jaxrpc.jar
log4j.properties
log4j-1.2.8.jar
saaj.jar
wsdl4j-1.5.1.jar
二、新建web工程
1、在eclipse里新建一个Dynamic Web Project,如下图所示:
2、将站点命名为AxisClient:
3、一直单击“Next”按钮直到出现如下图所示的窗口:
4、将上图中红框部分的复选框选中后,单击“Finish”即可完成工程创建。
三、添加jar包引用
1、在工程名称上单击右键,选择“Properties”,打开如下图所示对话框:
2、在上图中,选择左侧的“Java Build Path”,切换到“Libraries”选项卡,再单击右侧的“Add External JARs...”按钮,找到一开始下载的axis组件包,将组件包添加到工程引用里,如下图所示:
3、单击“OK”按钮完成引用。
四、新建servlet
1、为工程创建package,如“com.axisclient.service”
2、在新创建的package上单击右键,选择“New/Servlet”,并起名为“ClientService”:
单击“Finish”完成Servlet创建。
五、新建部署的web服务器
1、在Servers选项卡中单击“new server wizard”链接,打开如下图所示的对话框:
2、以Tomcat7为例,在上面的“Apache”目录下选择“Tomcat v7.0 Server”,再单击“Next”,打开如下图所示对话框:
3、在上图中单击“Browse”找到Tomcat7所在的目录,再单击“JRE”下方的下拉列表,选择1.7版本的JDK。
再单击“Finish”即可。
4、配置Tomcat
在Servers选项卡中双击新创建的Tomcat Server,打开如下图所示的页面:
在该页面中,在“Server Location”区域选择“Use Tomcat installation”,并将Deploy path设置为“webapps”,否则站点会被部署到eclipse自带的tomcat中,很难被找到。
设置完毕后按下Ctrl+S组合键保存配置信息。
六、添加对服务器运行时组件包的引用
1、打开工程的Properties窗口中的Java Build Path/Libraries选项卡
2、单击右侧的“Add Library”按钮打开如下图所示的窗口:
3、在上图中选择“Serverr Runtime”打开如下图所示的对话框:
4、在上图中选择“Apache Tomcat v7.0”后单击“Finish”关闭对话框,再在父对话框中单击“OK”完成对服务器运行时组件的引用。
七、编写代码
1、在ClientService.java中添加如下代码:
package com.axisclient.service;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/*----------以下是对Axis的引用-----------*/
import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
import java.util.Vector;
/*--------------End----------------*/
/**
* Servlet implementation class ClientService
*/
@WebServlet("/ClientService")
public class ClientService extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* Default constructor.
*/
public ClientService() {
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
String strName = request.getParameter("name"); //获取用户传入的参数
String iAge = request.getParameter("age");
String method = "MakeUser";
// 定义服务
Service service = new Service();
Call call = null;
try{
call = (Call) service.createCall();
}catch(Exception e){
}
call.setTargetEndpointAddress(new java.net.URL( //设置要调用的WebService地址
"http://localhost/WebServiceTest/Service.asmx"));
call.setUseSOAPAction(true);
call.setEncodingStyle(null);
call.setReturnType(new QName("http://tempuri.org/",method), Vector.class); //设置WebService的返回类型
call.setOperationName(new QName("http://tempuri.org/", method)); //设置要调用的WebService方法
call.setSOAPActionURI("http://tempuri.org/"+method);
call.addParameter(new QName("http://tempuri.org/", "Name"), //设置传递给WebService方法的参数
org.apache.axis.encoding.XMLType.XSD_STRING, ParameterMode.IN);
call.addParameter(new QName("http://tempuri.org/", "age"), //如果有多个参数,分别调用call的addParameter设置参数即可
org.apache.axis.encoding.XMLType.XSD_INT, ParameterMode.IN);
Vector retVal1 = (Vector) call.invoke(new Object[] {strName, iAge}); //传入参数值并调用WebService。这里将返回值设置为Vector就可以应对对多种返回值类型,否则会报错
response.setContentType("text/xml");
response.setCharacterEncoding("UTF-8");
String strResult="<?xml version='1.0' encoding='UTF-8'?><result><Name>" + retVal1.toString().substring(1,retVal1.toString().indexOf(',')) + "</Name><Age>"+retVal1.toString().substring(retVal1.toString().indexOf(',')+1,retVal1.toString().indexOf(']'))+"</Age></result>"; //将WebService返回的结果再次组合为一个xml返回给Servlet调用者
response.getWriter().write(strResult);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response); //对于Post请求按照Get请求相同的方式处理
}
}
2、配置Servlet
打开WEB-INF/web.xml文件,在其中加入如下配置信息:
<servlet>
<servlet-name>wsclientservice</servlet-name>
<servlet-class>com.axisclient.service.ClientService</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>wsclientservice</servlet-name>
<url-pattern>/service/wsclientservice</url-pattern>
</servlet-mapping>
八、发布站点
1、打开打开工程的Properties窗口中的“Deplolyment Assembly”对话框:
2、在上图的右侧单击“Add”按钮打开“New Assembly Directive”对话框,并选择“Java Build Path Entries”,再单击“Finish”按钮,打开如下图所示对话框:
3、在上图中选中所有的jar包,单击“Finish”后再单击父对话框的“OK”按钮完成对组件包的部署依赖,否则站点部署后会缺失依赖的组件包。
4、在Tomcat Server上单击右键,选择“Add and Remove”,打开如下图所示对话框:
在上图中选中左侧的站点名后单击“Add”按钮将站点添加到右侧的Configured列表,再单击“Finish”按钮完成对站点的部署配置。
5、发布站点
在Tomcat Server上单击右键,选择“Publish”
6、启动站点
九、测试Servlet
在浏览器中输入地址http://localhost:8082/AxisClient/service/wsclientservice?name=Mary&age=58并单击回车,如果出现类似于如下的内容就说明调用WebService成功: