微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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中即可,测试通过。

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

相关推荐