xfire客户端代码,对于复杂类型的调用

来源:互联网 发布:网络统考是看答案抄吗 编辑:程序博客网 时间:2024/06/06 08:33

复杂的类型我们这里就是像Map,List等的集合类型,或Person这种我们自己定义的Pojo类。

这些类型在我们的web服务端进行了相应的使用。

例如在和别的公司进行调试的时候,他们用的xfire做的webservice的服务端,好了后会给你个wsdl

在上面的的文章我写了,可以利用ant自动生成一堆代码。

 

1 自定义的Person类,在客户端调用

 

// Person p = new Person();

// p.setAge(20);

// //注意namespace要和wsdl中的一致,否则不能辨认出来

// p.setName(new JAXBElement<String>(new

// QName("http://pojo","name"),String.class,"lambert"));

 

 

自动生成的代码会是如下的样子:Person.java

 

@XmlAccessorType(XmlAccessType.FIELD)

@XmlType(name = "Person", propOrder = {

    "age",

    "name"

})

public class Person {

 

    protected Integer age;

    @XmlElementRef(name = "name", namespace = "http://pojo", type = JAXBElement.class)

    protected JAXBElement<String> name;

 

    /**

     * Gets the value of the age property.

     * 

     * @return

     *     possible object is

     *     {@link Integer }

     *     

     */

    public Integer getAge() {

        return age;

    }

 

    /**

     * Sets the value of the age property.

     * 

     * @param value

     *     allowed object is

     *     {@link Integer }

     *     

     */

    public void setAge(Integer value) {

        this.age = value;

    }

 

    /**

     * Gets the value of the name property.

     * 

     * @return

     *     possible object is

     *     {@link JAXBElement }{@code <}{@link String }{@code >}

     *     

     */

    public JAXBElement<String> getName() {

        return name;

    }

 

    /**

     * Sets the value of the name property.

     * 

     * @param value

     *     allowed object is

     *     {@link JAXBElement }{@code <}{@link String }{@code >}

     *     

     */

    public void setName(JAXBElement<String> value) {

        this.name = ((JAXBElement<String> ) value);

    }

 

}

 

 

2 Map类型的。

  这时候会自动生成一个AnyType2AnyTypeMap.java的类,接口中的调用参数也是AnyType2AnyTypeMap这种类型的。

  我们要制造了.

  ObjectFactory fac = new ObjectFactory();  //在AnyType2AnyTypeMap的同个包中就有

  AnyType2AnyTypeMap at2am = fac.createAnyType2AnyTypeMap();

  List<AnyType2AnyTypeMap.Entry> list = at2am.getEntry();

 //对于传进来的map

  Map map = new HashMap();

  map.put("name", "rose");

  map.put("age", "23");

  Iterator<Map.Entry<String, String>> it = map.entrySet().iterator();

  while(it.hasNext()){

  Map.Entry<String, String> entry = it.next();

  AnyType2AnyTypeMap.Entry ey = fac.createAnyType2AnyTypeMapEntry();

  ey.setKey(entry.getKey());

  ey.setValue(entry.getValue());

  list.add(ey);

}

spt.printMap(at2am);  //接口的调用

 

3 List类型

   同2 中的差不多也是列用ObjectFactory

 

ArrayOfString bookNames = fac.createArrayOfString();
  List<String> bookNameList = bookNames.getString();
  bookNameList.add("《社会心理学》");
  bookNameList.add("《心理学与生活》");

.......//调用