使用JAX-WS创建webservice服务,含服务端及客户端

因为公司的一个项目使用了WebService,虽然我们只提供后台接口,但是总想掌握一下其中的流程,因此最近两天试着做了一下,总共有四个demo,最后一个就是这次要发表的,把其中的详细给说一下。

一、创建服务类方法

1.首先创建工程:JaxWSProject


上图是创建完成后的工程结构,其中wsdl、wssrc为自建目录,主要为服务端创建wsdl、xsd文件及response.java文件使用。

创建GetInfo服务类,这个类中只有一个方法用于接收传递过来的参数,并调用存储过程查询相关信息后,再返回对象,代码如下

package ctsjavacoe.ws.fromjava.service;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Types;

import javax.jws.WebMethod;
import javax.jws.WebService;

import ctsjavacoe.ws.fromjava.bean.PolicyInfo;

@WebService
public class GetInfo {

	@WebMethod
	public PolicyInfo getPolicy(PolicyInfo policy_info) {

		Connection conn = null;
		CallableStatement proc = null;
		PolicyInfo rtninfo = new PolicyInfo();

		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			try {
				// 创建连接
				conn = DriverManager.getConnection(
						"jdbc:oracle:thin:@xxx.xxx.xxx.xxx:xxx:xxxx", "xxxx",
						"xxxxx");
				// 调用pk
				proc = conn
						.prepareCall("{call PK_NB_DATACHECK.get_po_status_code(?,?,?,?,?)}");
				// 设置参数
				proc.setString(1, policy_info.getAppl_no());
				proc.registerOutParameter(2, Types.VARCHAR);
				proc.registerOutParameter(3, Types.VARCHAR);
				proc.registerOutParameter(4, Types.VARCHAR);
				proc.registerOutParameter(5, Types.SMALLINT);
				// 执行调用
				proc.execute();
				// 设置返回参数
				policy_info.setIs_ybt(proc.getInt(5));
				policy_info.setPolicy_channel(proc.getString(4));
				policy_info.setPolicy_no(proc.getString(2));
				policy_info.setPolicy_status(proc.getString(3));

				// 关闭连接
				if (null != proc) {
					proc.close();
				}
				if (null != conn) {
					conn.close();
				}

			} catch (SQLException e) {
				e.printStackTrace();
			}
		} catch (ClassNotFoundException e) {
			// e.printStackTrace();
			System.out.println("oracle驱动出错");
		}
		return policy_info;
	}

}
其中两处@注解是为了说明这个类及方法,为webservice调用服务

2.生成wsdl、xsd文件及response方法

打开命令窗口输入以下命令,并执行(此处需要先安装JAX-WS相关jar包,以便能够系统能识别命令),具体信息如图:



命令成功执行后,在工程里刷新后在wsdl及wssrc目录下会得到相应的文件,如图:


将javxws包下的两个源文件剪切到src相应的目录里,注意这里应该剪切。

之后更改web-inf目录下的sun-jaxws.xml文件,将此webservice配置进去。代码如下:

配置web.xml文件,使得能够正确请求到,配置信息如下:


GetInfo
com.sun.xml.ws.transport.http.servlet.WSServlet
2



GetInfo
/GetInfoService
如果xml里没有配置过webservice监听器,也需要进行配置,否则会报404错误,配置信息如下:


     
com.sun.xml.ws.transport.http.servlet.WSServletContextListener 

  

发布工程后,请求 http://localhost:8080/JaxWSProject/GetInfoService?wsdl如果能够看到正常的wsdl展示信息(如下),则说明服务端已经完成。


二、创建客户端方法

1.创建一个java工程JaxWSClient 目录如下:


其中有些文件夹需要自建,此时需要把服务端创建好的wsdl、xsd文件给放到客户端的wsdl文件夹中,binding用来存放wsdl文件声明的xml。

其中binding文件夹中的GetPolicyInfo.xml配置内容如下



	
		true
	
 


打开命令窗口执行以下命令,用来生成如下图中标注的客户端调用文件

wsimport -keep -b binding/GetPolicyInfo.xml -d bin -s src wsdl/GetInfoService.wsdl



此时可以编写一个测试方法来调用webservice。具体代码如下:

package ctsjavacoe.ws.fromjava.client;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutionException;

import javax.xml.ws.Response;

import ctsjavacoe.ws.fromjava.service.GetInfo;
import ctsjavacoe.ws.fromjava.service.GetInfoService;
import ctsjavacoe.ws.fromjava.service.GetPolicyResponse;
import ctsjavacoe.ws.fromjava.service.PolicyInfo;

public class GetPolicyClient {

	
	public static void main(String[] args) {
		
		PolicyInfo g_policy_info = new PolicyInfo();
		g_policy_info.setApplNo("100000000000612");
		
		GetInfoService service = new GetInfoService();
		GetInfo port = service.getGetInfoPort();
		Response getPolicyInfo = port.getPolicyAsync(g_policy_info);
		PolicyInfo rtnList = new PolicyInfo();
		try {
			GetPolicyResponse getPolicyResponse = getPolicyInfo.get();
			rtnList = getPolicyResponse.getReturn();
			System.out.println(rtnList.getApplNo());
			System.out.println(rtnList.getIsYbt());
			System.out.println(rtnList.getPolicyChannel());
			System.out.println(rtnList.getPolicyStatus());
			System.out.println(rtnList.getPolicyNo());
			
		} catch (InterruptedException e) {
			e.printStackTrace();
		} catch (ExecutionException e) {
			e.printStackTrace();
		}
		
	}
	
}

运行后查看效果


运行成功,耶

你可能感兴趣的:(使用JAX-WS创建webservice服务,含服务端及客户端)