浏览 5271 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-01-05
最后修改:2010-01-09
第一步:创建传输对象Customer @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接口 @WebService public interface HelloService { public void save(Customer c1,Customer c2); public void test(String args); public Customer get(int id); } 每三步:创建WebService接口实现类 @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; } } 第四步:创建服务端 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(); } } 第五步:创建客户端 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查看接口是否发布成功。成功则运行一下客户端程序,看看对象传输是否成功。 现在我们来分析一下控制打印的日志信息。 引用 信息: Inbound Message ---------------------------- ID: 1 Address: /HelloWorld Encoding: UTF-8 Content-Type: text/xml; charset=UTF-8 Headers: {content-type=[text/xml; charset=UTF-8], connection=[keep-alive], Host=[localhost:9000], Content-Length=[184], SOAPAction=[""], User-Agent=[Apache CXF 2.2.2], Content-Type=[text/xml; charset=UTF-8], Accept=[*/*], Pragma=[no-cache], Cache-Control=[no-cache]} Payload: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns1:say xmlns:ns1="http://client.itdcl.com/"><text> Josen</text></ns1:say></soap:Body></soap:Envelope> -------------------------------------- 2010-1-9 20:41:56 org.apache.cxf.interceptor.LoggingOutInterceptor$LoggingCallback onClose 信息: Outbound Message --------------------------- ID: 1 Encoding: UTF-8 Content-Type: text/xml Headers: {} Payload: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Header><text xmlns="http://client.itdcl.com/">hi Josen</text></soap:Header><soap:Body><ns1:sayResponse xmlns:ns1="http://client.itdcl.com/"></ns1:sayResponse></soap:Body></soap:Envelope> -------------------------------------- 2010-01-09 20:41:56.578::INFO: seeing JVM BUG(s) - cancelling interestOps==0 当客户端向服器发送请求时,服务端LoggingInInterceptor拉截客户端发送过来的SOAP消息,如下: 引用 <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <ns1:sayHi xmlns:ns1="http://client.itdcl.com/"> <text>Josen</text> </ns1:sayHi> </soap:Body> </soap:Envelope> 客户端将请求信息封闭在<soap:Body></soap:Body>中,当然也可以将其放到<soap:Header></soap:Header>,只要在@WebParam中的header设置成true,默认为false; 服务器接到请求之后,响应客户端。同样以SOAP形式将信息封装好发回客户端,SOAP信息如下: 引用 <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Header> <text xmlns="http://client.itdcl.com/">hi Josen</text> </soap:Header> <soap:Body> <ns1:sayResponse xmlns:ns1="http://client.itdcl.com/"></ns1:sayResponse> </soap:Body> </soap:Envelope> 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-01-06
不错 希望持续更新
|
|
返回顶楼 | |
发表时间:2010-11-12
要是demo源码能放出来就好了。
对需要引入哪些包就更了解了啦 |
|
返回顶楼 | |