webService学习(二)—— 调用自定义对象参数

webService学习(二)—— 调用自定义对象参数

本文主要内容:
1、如何通过idea进行webService Client的简单实现(不再使用wsimport的方式,其实是ide帮我们做了)
2、在webservice中调用自定义参数(自定义类)。
 
好,下面上货。
 
一、在idea的帮助下使用webService Client。
首先需要感谢一下文章:
https://my.oschina.net/nba/blog/482117
通过这篇文章能够对在自己的项目中成功的引入webService。
简单说一共两步:
1、在项目中建立好自己的包(用来存放webservice生成的文件)
webService学习(二)—— 调用自定义对象参数
2、选择webservice方式,并且生成。
webService学习(二)—— 调用自定义对象参数
点击ok后,能够在com.otherWebService包下生成对应的webservice client端的文件。
webService学习(二)—— 调用自定义对象参数
 
二、在webservice中调用自定义参数(自定义类)
1、首先定义一个学生类:
package com.xueyoucto.xueyou;

import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;

/**
 * Created by Administrator on 2017/1/16.
 */
public class Student {
  private String name;
  private int age;

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public int getAge() {
    return age;
  }

  public void setAge(int age) {
    this.age = age;
  }

  public Student(String name, int age) {
    this.name = name;
    this.age = age;
  }

  public Student() {
  }
}

2、定义一个webService
package com.xueyoucto.xueyou;

import javax.jws.WebService;
import javax.xml.ws.Endpoint;

/**
 * Created by Administrator on 2017/1/14.
 */
@WebService
public class HelloService {

  public String testService(String params){
    return "hello " + params;
  }

  public String testStudent(Student student){
    return student.getName() + " : " + student.getAge();
  }

  public static void main(String[] args) {
    Endpoint.publish("http://localhost:8888/HelloService/",new HelloService());
    System.out.println("ok");
  }
}
 
3、发布webService
webService学习(二)—— 调用自定义对象参数
 
webService学习(二)—— 调用自定义对象参数
 
4、按照上面介绍的导入webservice Client的方式把HelloService导入到项目中
 
5、尝试调用webService
package com.firstServiceClient;

import com.otherWebService.HelloService;
import com.otherWebService.HelloServiceService;
import com.otherWebService.Student;

import javax.xml.ws.WebServiceException;

/**
 * Hello world!
 *
 */
public class App 
{
  public static void main( String[] args ) {
    System.out.println( "Hello World!" );
    try {
      HelloService helloService = new HelloServiceService().getHelloServicePort();
      String s = helloService.testService("aabbcc");
      System.out.println(s);
      Student student = new Student();
      student.setAge(13);
      student.setName("aabbcc");
      String s2 = helloService.testStudent(student);
      System.out.println(s2);
    }catch (WebServiceException wse){
      System.out.println("服务未启动");
      wse.printStackTrace();
    }catch (Exception e){
      e.printStackTrace();
    }
  }
}

6、运行结果:
webService学习(二)—— 调用自定义对象参数
 
7、注意:
在webService的调用过程中,不能使用student的全构造函数。在网上查找原因的时候遇到了一些解释。主要原因就是在调用构造函数的时候,在本地其实是Student的一个代理类,并且这时候没有和服务器进行通信。只有当webservice方法被调用的时候,才会和服务器端通信。
更详细的请参考:
http://www.cnblogs.com/gisflyer/archive/2010/12/29/1919420.html