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

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

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 state_map来存储状态信息(状态名称为键)。 Utility类还具有一个loadData()方法,该方法填充state_map 。

public class Utility {

Map state_map;

Utility() {
state_map = new HashMap();
}

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服务,如下所示。



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



xyz

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

1


xyz
/discoverIndia

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

version="2.0">
implementation="net.mahtabalam.ws.CountryImpl"
url-pattern="/discoverIndia" />

请注意,您将需要额外的jax-ws库才能在Tomcat下发布基于SOAP的Web服务。
您可以从jax-ws.net下载这些库,并将它们放在WEB-INF / lib文件夹中。

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

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

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

编程小号
上一篇 2025-10-01 12:27
下一篇 2025-02-25 12:51

相关推荐

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