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

webservice HelloWorld示例 初步学习一

发布时间:2020-12-17 00:27:27 所属栏目:安全 来源:网络整理
导读:学习了一段时间webservice了,感受颇深,用处很大啊,贴出来helloworld刚开始学习这块技术时的学习讨论下 服务端: 接口类: package com.hoo.service; import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebResult; import javax.j

学习了一段时间webservice了,感受颇深,用处很大啊,贴出来helloworld刚开始学习这块技术时的学习讨论下

服务端:

接口类:

package com.hoo.service;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;
/***
* 客户端调用WebService所需要的接口
* @author huawei
* 备注:
*? 1、接口在webservice的访问中,具有相当重要的作用,客户端的访问就是通过访问服务端的接口,调用起方法。
*? 2、webservice的注释,用于在wsdl中显示,作用是便于访问者阅读理解和调用接口内的方法。
*? 3、实体类应该继承WebService的接口,但是实体类中的注解不起作用。
*? 3、WebService常用的元注释:
* @WebService:将接口发布成为服务,暴露方法,在实现类中使用endpointInterface会起作用
*?? @SOAPBinding:服务端接受和发送消息的编码样式,在实现类中无效果
*?? @WebMethod:对接口中方法是否需要暴露和暴露后的一些参数指定,在实现类中无效果
*?? @WebResult:对调用该暴露方法的返回类型进行注释,在实现类中无效果
*?? @WebParam:对暴露方法的参数进行注释,在实现类中无效果
*/
import javax.jws.soap.SOAPBinding.Use;
@WebService
@SOAPBinding(style = Style.DOCUMENT,use=Use.LITERAL)//定义发送到 Web Service 的消息和从 Web Service 发送的消息的编码样式
public interface IHelloWorldService {
@WebMethod(operationName="sayHello",exclude=false)
@WebResult(name="String")//指定调用该方法返回的名字
public String sayHello(@WebParam(name = "用户名") String name);
}

?

接口的实现类:

package com.hoo.service.impl;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;?

import com.hoo.service.IHelloWorldService;
/***
?* 服务端发布的实体类
?* @author huawei
?*
?*/
@WebService
@SOAPBinding(style = Style.RPC)
public class HelloWorldService implements IHelloWorldService{
?public String sayHello(@WebParam(name = "name") String name){//不起作用的@WebParam
??return name + " say: Hello World";
?}
?//非接口的方法
?public String testHayHello(@WebParam(name="用dddddd名") String name) {//不会被发布
??return name + " sayHello;";
?}
}

?

服务端服务启动:

package com.hoo.service.deploy;
/*import javax.xml.ws.Endpoint; */

import org.apache.cxf.jaxws.JaxWsServerFactoryBean;

import com.hoo.service.IHelloWorldService;
import com.hoo.service.impl.HelloWorldService;
/**
?* <b>function:</b> 发布CXF WebService
?* 总结:
?* 发布方式:JaxWsServerFactoryBean.create()方法 或 Endpoint.publish(address,service);
?* 发布类:发布的类是实体类
?* 注意:通过这种方式发布的WebService不符合wsdl规范,留此作为参考,具体参见类DeployInterceptorService
?**/
public class DeployHelloWorldService {
?public static void deployService(){
??//发布方式一
??/*System.out.println("Server start ......");
??HelloWorldService service = new HelloWorldService();
??String address = "http://localhost:8080/webservice?wsdl";
??//发布
??Endpoint.publish(address,service);*/
??
??//发布方式二(推荐)
??JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();
??String address = "http://localhost:8080/webservice?wsdl";
??factory.setServiceClass(IHelloWorldService.class);//serviceClass:必须是一个接口
??factory.setServiceBean(new HelloWorldService());//serviceBean:是一个实现接口的实现类
??factory.setAddress(address);
??factory.create();
?}
?
?public static void main(String[] args) throws InterruptedException{
?? //发布Webservice
??deployService();
??System.out.println("server ready ......");
??Thread.sleep(1000*60);
??System.out.println("server exiting");
??//休眠60秒后退出
??System.exit(0);
?}
}

?

客户端调用测试(这个示例是写在同一项目内的,也可以自己分开来做,原理一样):

package com.hoo.client;

import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import com.hoo.service.IHelloWorldService;
/***
?* 客户端调用代码
?* 总结:
?* 调用方式:IHelloWorldService service = (IHelloWorldService)factory.create();
?* 调用类:通过调用服务端接口类型,factory.create()返回该接口类
?* @author huawei
?*
?*/
public class HelloWorldServiceClient {
?public static void main(String[] args) {
??JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
??//必须是一个接口
??factory.setServiceClass(IHelloWorldService.class);
??factory.setAddress("http://localhost:8080/webservice?wsdl"); ??//创建接口对象 ??IHelloWorldService service = (IHelloWorldService)factory.create(); ??System.out.println("[result]" + service.sayHello("hoojo")); ?} }

OK,上述代码考到java IDE中即可,测试通过。

(编辑:李大同)

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

    推荐文章
      热点阅读