文章摘抄至 http://xuzhfa123.iteye.com/blog/563331 第一步:创建传输对象Customer package pojo.model;import javax.xml.bind.annotation.XmlAccessType;import javax.xml.bind.annotation.XmlAccessorType;import javax.xml.bind.annotatio
文章摘抄至 http://xuzhfa123.iteye.com/blog/563331
第一步:创建传输对象Customer
package pojo.model; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; @XmlRootElement(name = "Customer") @XmlAccessorType(XmlAccessType.FIELD) @XmlType(propOrder = { "name", "age" }) public class Customer { private int age; private String name; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
@XmlRootElement-指定XML根元素名称(可选)
@XmlAccessorType-控制属性或方法序列化
四种方案:
FIELD-对每个非静态,非瞬变属性JAXB工具自动绑定成XML,除非注明XmlTransient
NONE-不做任何处理
PROPERTY-对具有set/get方法的属性进行绑定,除非注明XmlTransient
PUBLIC_MEMBER -对有set/get方法的属性或具有共公访问权限的属性进行绑定,除非注
明XmlTransient
@XmlType-映射一个类或一个枚举类型成一个XML Schema类型
第二步:创建WebService接口
package pojo.service; import javax.jws.WebService; import pojo.model.Customer; @WebService public interface HelloService { public void save(Customer c1,Customer c2); public void test(String args); public Customer get(int id); }
每三步:创建WebService接口实现类
package pojo.service; import javax.jws.WebService; import pojo.model.Customer; @WebService public class HelloServiceImpl implements HelloService { public void save(Customer c1, Customer c2) { System.out.println(c1.getAge() + "---" + c2.getAge()); System.out.println(c1.getName() + "---" + c2.getName()); } public void test(String args) { System.out.println(args); } public Customer get(int id) { Customer cus = new Customer(); cus.setAge(100); cus.setName("Josen"); return cus; } }
第四步:创建服务端
package pojo.deploy; import org.apache.cxf.interceptor.LoggingInInterceptor; import org.apache.cxf.interceptor.LoggingOutInterceptor; import org.apache.cxf.jaxws.JaxWsServerFactoryBean; import pojo.service.HelloServiceImpl; public class SoapServer { public static void main(String[] args) { // 两种方法,任选一种发布WebService接口 // Endpoint.publish("http://localhost:8080/helloService", new // HelloServiceImpl()); JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean(); factory.setAddress("http://localhost:8080/helloService"); factory.setServiceClass(HelloServiceImpl.class); factory.getInInterceptors().add(new LoggingInInterceptor()); factory.getOutInterceptors().add(new LoggingOutInterceptor()); factory.create(); } }
第五步:创建客户端
package pojo.client; import org.apache.cxf.interceptor.LoggingInInterceptor; import org.apache.cxf.jaxws.JaxWsProxyFactoryBean; import pojo.model.Customer; import pojo.service.HelloService; public class SoapClient { public static void main(String[] args) { JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); factory.setAddress("http://localhost:8080/helloService"); //只能添加接口类,否则会提示参数错误 factory.setServiceClass(HelloService.class); //下面的代码是错误的 // factory.setServiceClass(HelloServiceImpl.class); factory.getInInterceptors().add(new LoggingInInterceptor()); HelloService service = (HelloService) factory.create(); Customer c1 = new Customer(); c1.setAge(1); c1.setName("aaa"); Customer c2 = new Customer(); c2.setAge(2); c2.setName("bbb"); service.save(c1, c2); service.test("aaaaaaaaaaaaa"); } }
最后,测试程序
运行服务端程序,在浏览器地址栏输入http://localhost:8080/helloService?wsdl查看接口是否发布成功。成功则运行一下客户端程序,看看对象传输是否成功。