jax-ws 生成soap_使用JAX-WS创建SOAP Web服务

jax-ws 生成soap_使用JAX-WS创建SOAP Web服务本文中显示的Web服务已在此处实时部署。有多种创建Web服务的方法。在本文中,我们将使用JAX-WS创建基于SOAP的Web服务,该服务是XMLWebServices的JavaAPI,并将其部署在Tomcat下。要记住的重要一点是,可以使用JAX-WS构建SOAP和REST样式的Web服务。有一个常见的误解,即JAX-WS用于创建基于SOAP的Web服务,而JAX-R…

大家好,又见面了,我是你们的朋友全栈君。

jax-ws 生成soap

本文中显示的Web服务已在此处实时部署

有多种创建Web服务的方法。 在本文中,我们将使用JAX-WS创建基于SOAP的Web服务,该服务是XML Web Services的Java API,并将其部署在Tomcat下。

要记住的重要一点是,可以使用JAX-WS构建SOAP和REST样式的Web服务。 有一个常见的误解,即JAX-WS用于创建基于SOAP的Web服务,而JAX-RS用于创建REST风格的Web服务。

JAX-WS API非常丰富,并提供了一些注释,使开发人员的工作变得轻松。

不同样式的基于SOAP的Web服务

基于SOAP的Web服务可以归类为

  • RPC样式– RPC样式用于创建包括简单数据类型(内置类型)的SOAP Web服务。
  • 文档样式–这是默认样式,用于创建包含复杂数据类型的SOAP Web服务

DiscoverIndia Web服务

我们将创建一个名为DiscoverIndia的基于SOAP的Web服务。 该网络服务的全部意义是,您将印度州的名称传递给该服务,然后您可以检索

  • 该州的首都
  • 该州的区数
  • 该州的当地语言
  • 该州的机场
  • 在该州参观的地方
  • 关于国家的一些有趣的事实

在开始实施之前,让我们了解基于SOAP的Web服务的体系结构。

肥皂服务

因此,事不宜迟,让我们开始使用代码。

实施Web服务

这是该服务的服务端点接口(SEI)

@WebService
public interface Country {

	@WebMethod
	String getCapital(String s);

	@WebMethod
	String getLanguages(String s);

	@WebMethod
	String getAirports(String s);

	@WebMethod
	int getDistricts(String s);

	@WebMethod
	String getPlacesToVisit(String s);

	@WebMethod
	String getInterestingFacts(String s);
}

CountryImpl是服务实现Bean(SIB),用于实现SEI的所有方法。

@WebService
public class CountryImpl implements Country {
	private Utility states;
	public CountryImpl(){
		states=new Utility();
		states.loadData();
	}
	@WebMethod
	public String getCapital(String stateName) {
		return states.getState(stateName).getCapital();
	}
	@WebMethod
	public String getLanguages(String stateName) {
		return states.getState(stateName).getLanguages();
	}
	@WebMethod
	public String getAirports(String stateName) {
		return states.getState(stateName).getAirports();
	}
	@WebMethod
	public int getDistricts(String stateName) {
		return states.getState(stateName).getDistricts();
	}
	@WebMethod
	public String getPlacesToVisit(String stateName) {
		return states.getState(stateName).getPlacesToVisit();
	}
	@WebMethod
	public String getInterestingFacts(String stateName) {
		return states.getState(stateName).getInterestingFacts();
	}
}
请注意,在CountryImpl类中,我们有Utility类的成员,该类将状态信息存储在Map中。

这是国家类别,代表使用吸气剂和吸气剂的国家。

public class State {
	private String name;
	private String capital;
	private int districts;
	private String languages;
	private String airports;
	private String placesToVisit;
	private String interestingFacts;

	State(String name,String capital,int districts,String languages,String airports,String placesToVisit,String interestingFacts){
		this.name=name;
		this.capital=capital;
		this.districts=districts;
		this.languages=languages;
		this.airports=airports;
		this.placesToVisit=placesToVisit;
		this.interestingFacts=interestingFacts;
	}

	public String getName(){
		return name;
	}
	public void setName(String name){
		this.name=name;
	}
	public String getAirports() {
		return airports;
	}
	public void setAirports(String airports) {
		this.airports = airports;
	}
	public String getCapital() {
		return capital;
	}
	public void setCapital(String capital) {
		this.capital = capital;
	}
	public String getLanguages() {
		return languages;
	}
	public void setLanguages(String languages) {
		this.languages = languages;
	}
	public int getDistricts() {
		return districts;
	}
	public void setDistricts(int districts) {
		this.districts = districts;
	}
	public String getPlacesToVisit() {
		return placesToVisit;
	}
	public void setPlacesToVisit(String placesToVisit) {
		this.placesToVisit = placesToVisit;
	}
	public String getInterestingFacts() {
		return interestingFacts;
	}
	public void setInterestingFacts(String interestingFacts) {
		this.interestingFacts = interestingFacts;
	}

}

我们有一个实用程序类,该类具有Map <String,State> state_map来存储状态信息(状态名称为键)。 Utility类还具有一个loadData()方法,该方法填充state_map

public class Utility {

	Map<String, State> state_map;

	Utility() {
		state_map = new HashMap<String, State>();
	}

	void loadData(){

		State rajasthan=new State("Rajasthan","Jaipur",33,"Hindi, Rajasthani","Jaipur, Jodhpur, Udaipur","Ajmer, Udaipur, Jaipur","Rajasthan is famous for its marbles");
		State punjab=new State("Punjab","Chandigarh",22,"Hindi, Punjabi","Amritsar","Amritsar, Ludhiana","Punjab is popular for its joyful punjabi people");
		State mp=new State("Madhya Pradesh","Bhopal",51 ,"Hindi","Bhopal, Gwalior","Bhopal, Gwalior","Madhya Pradesh is well known for its wildlife and monuments");
		State haryana=new State("Haryana","Chandigarh",21 ,"Hindi, Haryanvi","","Hisar, Rohtak, Fridabad","Haryana is popular for its haryanvi language");
		State gujrat=new State("Gujrat","Gandhinagar",33 ,"Hindi, Gujrati","Ahmedabad, Vadodara, Gandhinagar","Ahmedabad, Vadodara","Gujrat is famous for its rich culture and dandiya nights");

		state_map.put("Rajasthan", rajasthan);
		state_map.put("Punjab", punjab);
		state_map.put("Madhya Pradesh", mp);
		state_map.put("Haryana", haryana);
		state_map.put("Gujrat", gujrat);	

		}

	State getState(String stateName) {
		State state = null;
		state = state_map.get(stateName);
		return state;
	}

}

配置Web服务

由于在本例中为Apache Tomcat,因此将Web服务部署在Web容器中,因此我们必须在web.xml文件中配置Web服务,如下所示。

<listener>
		<listener-class>
			com.sun.xml.ws.transport.http.servlet.WSServletContextListener
		</listener-class>
</listener>
<servlet>
		<servlet-name>xyz</servlet-name>
		<servlet-class>
			com.sun.xml.ws.transport.http.servlet.WSServlet
		</servlet-class>
		<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
		<servlet-name>xyz</servlet-name>
		<url-pattern>/discoverIndia</url-pattern>
</servlet-mapping>

最后一种配置是必需的–在WEB-INF文件夹中创建一个文件sun-jaxws.xml,该文件定义了Service实现类。

<endpoints xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime"
	version="2.0">
	<endpoint name="WebServicImpl"
		implementation="net.mahtabalam.ws.CountryImpl"
		url-pattern="/discoverIndia" />
</endpoints>
请注意,您将需要额外的jax-ws库才能在Tomcat下发布基于SOAP的Web服务。
您可以从jax-ws.net下载这些库,并将它们放在WEB-INF / lib文件夹中。

现在运行该项目,您的Web服务将被部署并可以在web.xml文件(在本例中为/ discoverIndia)中提到的任何URL下使用。

印度 您可以通过在已部署的Web服务URL的末尾附加?wsdl来访问WSDL(服务合同)。

wsdl

Eclipse IDE中项目结构的快照。

Eclipse IDE中项目结构的快照。

发布Web服务后,您可以使用任何语言的Python,Perl,C#,Java等针对Web服务编写客户端。

这就是Web服务的美,它们独立于语言。 让我们编写一个Java客户端来使用Web服务。

我们将使用JDK6附带的wsimport实用程序来生成客户端构件,以使其很容易针对discoverIndia Web服务编写客户端。

黄蜂

上面的命令将生成人工制品,我们将使用它们来编写一个简单的客户端。

这是Client.java,它使用wsimport生成的类编写简单的Web服务客户端。

package wsclient;
 public class Client {

	public static void main(String[] args) {
		CountryImplService service=new CountryImplService();
		CountryImpl country=service.getCountryImplPort();
		System.out.println("Capital of Kerala : "+country.getCapital("Kerala"));
		System.out.println("No. of districts in Telangna : "+country.getDistricts("Telangna"));
		System.out.println("Local languages of Gujrat : "+country.getLanguages("Gujrat"));
		System.out.println("Airports in Uttrakhand : "+country.getAirports("Uttrakhand"));
		System.out.println("Places to visit in Rajasthan : "+country.getPlacesToVisit("Rajasthan"));
		System.out.println("Interesting Facts about Meghalaya : "+country.getInterestingFacts("Meghalaya"));
	}
 }

现在编译Client.java并运行它。

运

请记住,如果使用状态名称调用该Web服务,而该名称未由Web服务处理,则将获得SOAP Fault作为响应。

获取源代码:如果您有兴趣亲自尝试该代码,可以从GitHub获得它。

使用实时Web服务:此Web服务已在mathabalam.net上实时部署,并且WSDL文件在此处

翻译自: https://jaxenter.com/creating-soap-web-services-using-jax-ws-117689.html

jax-ws 生成soap

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/159688.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • linux查看某个时间段的日志(sed -n)-史上最详细

    linux查看某个时间段的日志(sed -n)-史上最详细

  • 【软件工程】详细设计说明书

    【软件工程】详细设计说明书详细设计说明书1引言1.1编写目的说明编写这份详细设计说明书的目的,指出预期的读者。该文档实在概要设计的基础上,进一步的细化系统结构,展示了软件啊结构的图标,物理设计,数据结构设计,及算法设计,详细的介绍了系统各个模块是如何实现的,包括涉及到的算法,逻辑流程等,为下一步系统的实现和测试做准备!1.2背景说明:a.软件名称:机房收费系统;b.本项目的任务提出者:米新江…

  • html怎么动态获取系统时间_代码实现获取当前的地理位置

    html怎么动态获取系统时间_代码实现获取当前的地理位置HTML+JS动态获取当前时间效果图:说明:JavaScript中Date对象创建Date对象的语法:varmyDate=newDate()常用Date对象方法:方法描述Date()返回当日的日期和时间getDate()从Date对象返回一个月中的某一天(1~31)getDay()从Date对象返回一周中的某…

  • 腾讯和字节待遇_字节和腾讯哪个值得去

    腾讯和字节待遇_字节和腾讯哪个值得去分享我对两家互联网大厂的了解和主观感受大家好,我是鱼皮,最近这段时间,应该是正值大三的小伙伴最忙碌的时候,不少同学都在准备秋季校园招聘。我当时是通过暑期实习转正进入的腾讯,再加上之前也在字节跳动实习过,所以今天就分享下我对这两家互联网公司的了解和工作感受,希望能帮助大家选择,也可以给还在校园的小伙伴一些坚持的动力吧。工作感受接下来我会从多个方面来分享。由于公司很大,不同部门存在差异,所以工作感受比较主观,不代表整个公司的情况。薪资互联网公司的薪资还是挺高的。像我当时在字节跳动实习时.

  • unity3d场景制作

    unity3d场景制作这是最后的成果以上图片资源均为资源商店免费获取制作地形的方法1创建相邻地形(主要用于地形的扩大)2绘制地形(主要用于地貌的设置)3绘制树(用于树木的绘制)4绘制细节(用于小草或小花的设置)5地形设置(用于整体设置)绘制的主要方面为2、3、4点第2点:不同地形是有不同纹理形成,在编辑地形层中选择自己喜欢的地形。注意:法线贴图是地形纹理的进一步深化,可以加强地形的真实感第3点绘制树与绘制地形基本相同第4点绘制细节与前两者不同的是,除了细节纹理外,还有细节网格对与地形的

  • Hmily 临时笔记「建议收藏」

    Hmily 临时笔记「建议收藏」概述Hmily是一款高性能分布式事务tcc开源框架。基于java语言来开发(JDK1.8),支持Dubbo、SpringCloud、Motan等RPC框架进行分布式事务。功能高可靠性:支持分布式场景下,事务异常回滚,超时异常恢复,防止事务悬挂易用性:提供零侵入性式的Spring-Boot,Spring-Name…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号