加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-17 00:29:06 所属栏目:安全 来源:网络整理
导读:因为公司的一个项目使用了WebService,虽然我们只提供后台接口,但是总想掌握一下其中的流程,因此最近两天试着做了一下,总共有四个demo,最后一个就是这次要发表的,把其中的详细给说一下。 一、创建服务类方法 1.首先创建工程:JaxWSProject 上图是创建完

因为公司的一个项目使用了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配置进去。代码如下:

<endpoint name='GetInfo' implementation="ctsjavacoe.ws.fromjava.service.GetInfo"
		url-pattern="/GetInfoService" />
配置web.xml文件,使得能够正确请求到,配置信息如下:

<servlet>
<servlet-name>GetInfo</servlet-name>
<servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>

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

<listener>
    <listener-class> 
com.sun.xml.ws.transport.http.servlet.WSServletContextListener 
</listener-class>
  </listener>

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


二、创建客户端方法

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


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

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

<?xml version="1.0" encoding="UTF-8"?>
<bindings xmlns:xsd="http://www.w3.org/2001/XMLSchema"
	xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" wsdlLocation="../wsdl/GetInfoService.wsdl"
	xmlns="http://java.sun.com/xml/ns/jaxws">
	<bindings node="wsdl:definitions">
		<enableAsyncMapping>true</enableAsyncMapping>
	</bindings>
</bindings> 


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

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<GetPolicyResponse> 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();
		}
		
	}
	
}

运行后查看效果


运行成功,耶

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读