WebService使用入门(包括发布服务,调用服务)

WebService是基于SOAP协议的,全称是Simple Object Access Protocol(简单对象访问协议)。

SOAP不是什么神奇的东西,等于HTTP+XML,即在HTTP协议的基础上传输XML文档数据,Content-Type类型是text/xml;charset=UTF-8

Webservice网址是:http://www.webxml.com.cn,上面有很多公共的服务可以拿来练习。最重要的是上面的以.wsdl结尾的路径地址,这是我们调用该Webservice服务的基础。

一.调用WebService服务

1.用wsimport.exe根据上述.wsdl路径生成java代码。

命令行:

C:\Program Files\Java\jdk1.7.0_51\bin>wsimport.exe -s d:/wscode -p com.maizuo.webservice http://fy.webxml.com.cn/webservices/EnglishChinese.asmx?wsdl

生成java代码的命令如上,-s 后跟目录,表示生成的.java文件放在此目录中;-p 后跟的其实是包名,如果指定的包名合适的话,到时候可以直接把代码拷贝到项目中而不用做任何修改。

2.把java文件拷贝到项目对应的包中

3.创建服务访问点集合对象

从下往上看WSDL文档,找到<service name="HelloService">(也可能有命名空间,则可能是<wsdl:service name="HelloService">),可以看到service的name属性值是HelloService,这个类就是入口类。

HelloService hs=new HelloService();

4.根据服务访问点获得服务类对象

通过hs打点的方式,在编辑器有代码提示的情况下可以看到合适的方法

DDD d=hs.getxxx();

5.通过服务类对象就可以调用服务类的方法

d.getxxx

二.发布WebService服务

1.用@WebService注解标注要提供服务的类。要提供服务的类,简称服务类,需要至少有一个非static、非final的方法,因为static或者final的方法在发布后,调用者根本得不到该方法。如果有多个方法,但只想发布部分方法,可以用@WebMethod(exclude = true)修饰不想被发布出去的方法,这样调用者也得不到该方法了:

@WebService()
public class Hello {
	@WebMethod(exclude = true)
	public String sayHello(String name) {
		return name + " hello!";
	}

	public String sayHi(String name) {
		return name + " hi!";
	}
}

如上,调用的时候只能访问sayHi(String name)方法。至于服务类中的方法有没有返回值、返回值类型是什么、有没有参数,这些需要根据业务需求来定。

2.可以在服务类中也可以在其他任意类中,写一个main方法,只需一行代码,调用javax.xml.ws.Endpoint抽象类的静态方法publish(String address, Object implementor),其中参数address是发布的地址,一般是ip地址加上端口号加斜杠(或者斜杠后面再加上些类似命名空间的字符串),implementor则为一个服务类对象:

public static void main(String[] args) {
		Endpoint.publish("http://127.0.0.1:8088/hh", new Hello());
	}
经过以上两个步骤,就发布成功了一个WebService服务。

在浏览器中访问http://127.0.0.1:8088/hh,得到如下页面内容

Web Services

EndpointInformation
Service Name:{http://server.maizuo.com/}HelloService
Port Name:{http://server.maizuo.com/}HelloPort
Address:http://192.168.1.60:8080/
WSDL:http://192.168.1.60:8080/?wsdl
Implementation class:com.maizuo.server.Hello

现在WSDL对应的链接即为调用此WebService服务时需要的.wsdl链接,通过最上面介绍的调用方式调用即可。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用Axis2调用WebService服务需要以下步骤: 1. 下载Axis2库 首先需要下载Axis2库,可以从官方网站或者Maven仓库中获取到Axis2的jar包。下载好后,需要在项目中引入Axis2相关的jar包。 2. 创建客户端代理 使用wsdl2java命令,可以根据服务端的wsdl文件生成客户端代码。命令格式如下: ``` wsdl2java -uri http://localhost:8080/axis2/services/MyService?wsdl -p com.example.client -d /path/to/output ``` 其中,-uri参数指定服务端的wsdl文件地址,-p参数指定生成的客户端代码的包名,-d参数指定生成的客户端代码的输出目录。 生成的客户端代码包括服务端的接口类、接口实现类、客户端代理类等。 3. 创建客户端 创建客户端的代码如下: ``` // 创建服务地址 String url = "http://localhost:8080/axis2/services/MyService"; // 创建服务代理 MyServiceStub stub = new MyServiceStub(url); // 调用服务方法 MyServiceStub.MyMethod request = new MyServiceStub.MyMethod(); request.setParam1("param1"); request.setParam2("param2"); MyServiceStub.MyMethodResponse response = stub.myMethod(request); ``` 其中,url参数指定服务地址,MyServiceStub是客户端代理类,MyMethod是服务端的方法,MyMethodResponse是服务端方法的返回值。 4. 调用服务 调用服务的代码如下: ``` // 创建求消息 OMFactory fac = OMAbstractFactory.getOMFactory(); OMNamespace omNs = fac.createOMNamespace("http://example.com", "ns"); OMElement method = fac.createOMElement("myMethod", omNs); OMElement param1 = fac.createOMElement("param1", omNs); param1.setText("param1"); method.addChild(param1); OMElement param2 = fac.createOMElement("param2", omNs); param2.setText("param2"); method.addChild(param2); // 创建服务客户端 ServiceClient serviceClient = new ServiceClient(); Options options = new Options(); options.setTo(new EndpointReference(url)); serviceClient.setOptions(options); // 调用服务 OMElement response = serviceClient.sendReceive(method); ``` 其中,OMFactory和OMNamespace是Axis2提供的类,用于构建SOAP消息。OMElement是SOAP消息的元素,addChild方法用于添加子元素。ServiceClient是Axis2提供的服务客户端类,Options类用于设置服务调用的选项,包括服务地址、超时时间等。sendReceive方法用于发送求消息并接收服务端的响应消息。 以上就是使用Axis2调用WebService服务的基本步骤。需要注意的是,调用服务时需要根据服务端的要求构建SOAP消息,具体内容需要根据服务端的接口文档进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值