webservice HelloWorld示例 初步学习一

学习了一段时间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中即可,测试通过。

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值