JAVA的WebService规范JAX-WS
JAX-WS的服务端、客户端双方传输数据使用的SOAP消息格式封装数据。
一、下载apache-cxf-3.1.4.zip。
二、编写服务端
1、编写一个Web Service用来传输参数的类
package com.ws.services.entity;import java.util.Date;import javax.xml.bind.annotation.XmlRootElement; /*** 该类为Web Service中的参数、返回值类型,故需要使用JAXB注解告诉CXF如何在XML和Java Object之间处理,* 因为,SOAP消息格式包装的是一段XML代码,无论是服务器端,还是客户端,* 在接收到SOAP消息时,都需要将XML转化为Java Object,* 在发送SOAP消息时,需要将Java Object转化为XML。* */ @XmlRootElement(name = "People") public class People {private Long id;private String name;private Date birthday;public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;} }
2、编写Web Service接口
package com.ws.services;import java.util.List; import javax.jws.WebService; import com.ws.services.entity.People;@WebService public interface PeopleService {public String add(People people);public String del(People people);public String modify(People people);public People getOne(Long id);public List<People> getList(String name); }
4、实现Web Service
package com.ws.services;import java.util.ArrayList; import java.util.Date; import java.util.List;import javax.jws.WebService;import com.ws.services.entity.People;@WebService(endpointInterface="com.ws.services.PeopleService") public class PeopleServiceImpl implements PeopleService {@Overridepublic String add(People people) {// TODO Auto-generated method stubSystem.out.println("ADD:"+people.getId()+","+people.getName()+","+people.getBirthday());return "ADD SUCCESS";}@Overridepublic String del(People people) {// TODO Auto-generated method stubSystem.out.println("DEL:"+people.getId()+","+people.getName());return "DEL SUCCESS";}@Overridepublic String modify(People people) {// TODO Auto-generated method stubSystem.out.println("MODIFY:"+people.getId()+","+people.getName());return "MODIFY SUCCESS";}@Overridepublic People getOne(Long id){// TODO Auto-generated method stubSystem.out.println("QRY BEGIN");People people=new People();people.setId(4L);people.setName("Name-004");people.setBirthday(new Date());return people;}@Overridepublic List<People> getList(String name){// TODO Auto-generated method stubList<People> list=new ArrayList<People>();People people0=new People();People people1=new People();people0.setId(5L);people0.setName(name+"-005");people0.setBirthday(new Date());people1.setId(6L);people1.setName(name+"-006");people1.setBirthday(new Date());list.add(people0);list.add(people1);return list;} }
5、发布Web Service服务
package com.ws.services;import javax.xml.ws.Endpoint; import org.apache.cxf.interceptor.LoggingInInterceptor; import org.apache.cxf.interceptor.LoggingOutInterceptor; import org.apache.cxf.jaxws.JaxWsServerFactoryBean;public class SoapServer {public static void main(String[] args) {// TODO Auto-generated method stub/*** 方法一,使用javax.xml.ws.*包中的EndPoint的静态方法publish()发布Web服务* *///Endpoint.publish("http://127.0.0.1:80/peopleService", new PeopleServiceImpl());/*** 方法二,使用CXF特有的API---JaxWsServerFactoryBean发布Web服务,* 并且我们对服务端工厂Bean的输入拦截器集合、输出拦截器集合中分别添加了日志拦截器,* 可以在Web服务端发送和接收消息时输出信息。*/JaxWsServerFactoryBean soapFactoryBean = new JaxWsServerFactoryBean();soapFactoryBean.getInInterceptors().add(new LoggingInInterceptor());soapFactoryBean.getOutInterceptors().add(new LoggingOutInterceptor());// 注意这里是实现类不是接口soapFactoryBean.setServiceClass(PeopleServiceImpl.class);soapFactoryBean.setAddress("http://127.0.0.1:80/peopleService");soapFactoryBean.create();System.out.println("published...");} }
6、测试服务发布情况
运行Java Application,访问http://127.0.0.1/peopleService?wsdl
<?xml version="1.0" encoding="UTF-8" ?> - <!-- Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.2.4-b01. --> - <!-- Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.2.4-b01. --> - <definitions xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://www.w3.org/ns/ws-policy" xmlns:wsp1_2="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://services.ws.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://services.ws.com/" name="PeopleServiceImplService"> - <types> - <xsd:schema><xsd:import namespace="http://services.ws.com/" schemaLocation="http://127.0.0.1/peopleService?xsd=1" /> </xsd:schema></types> - <message name="add"><part name="parameters" element="tns:add" /> </message> - <message name="addResponse"><part name="parameters" element="tns:addResponse" /> </message> - <message name="modify"><part name="parameters" element="tns:modify" /> </message> - <message name="modifyResponse"><part name="parameters" element="tns:modifyResponse" /> </message> - <message name="getOne"><part name="parameters" element="tns:getOne" /> </message> - <message name="getOneResponse"><part name="parameters" element="tns:getOneResponse" /> </message> - <message name="getList"><part name="parameters" element="tns:getList" /> </message> - <message name="getListResponse"><part name="parameters" element="tns:getListResponse" /> </message> - <message name="del"><part name="parameters" element="tns:del" /> </message> - <message name="delResponse"><part name="parameters" element="tns:delResponse" /> </message> - <portType name="PeopleService"> - <operation name="add"><input wsam:Action="http://services.ws.com/PeopleService/addRequest" message="tns:add" /> <output wsam:Action="http://services.ws.com/PeopleService/addResponse" message="tns:addResponse" /> </operation> - <operation name="modify"><input wsam:Action="http://services.ws.com/PeopleService/modifyRequest" message="tns:modify" /> <output wsam:Action="http://services.ws.com/PeopleService/modifyResponse" message="tns:modifyResponse" /> </operation> - <operation name="getOne"><input wsam:Action="http://services.ws.com/PeopleService/getOneRequest" message="tns:getOne" /> <output wsam:Action="http://services.ws.com/PeopleService/getOneResponse" message="tns:getOneResponse" /> </operation> - <operation name="getList"><input wsam:Action="http://services.ws.com/PeopleService/getListRequest" message="tns:getList" /> <output wsam:Action="http://services.ws.com/PeopleService/getListResponse" message="tns:getListResponse" /> </operation> - <operation name="del"><input wsam:Action="http://services.ws.com/PeopleService/delRequest" message="tns:del" /> <output wsam:Action="http://services.ws.com/PeopleService/delResponse" message="tns:delResponse" /> </operation></portType> - <binding name="PeopleServiceImplPortBinding" type="tns:PeopleService"><soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" /> - <operation name="add"><soap:operation soapAction="" /> - <input><soap:body use="literal" /> </input> - <output><soap:body use="literal" /> </output></operation> - <operation name="modify"><soap:operation soapAction="" /> - <input><soap:body use="literal" /> </input> - <output><soap:body use="literal" /> </output></operation> - <operation name="getOne"><soap:operation soapAction="" /> - <input><soap:body use="literal" /> </input> - <output><soap:body use="literal" /> </output></operation> - <operation name="getList"><soap:operation soapAction="" /> - <input><soap:body use="literal" /> </input> - <output><soap:body use="literal" /> </output></operation> - <operation name="del"><soap:operation soapAction="" /> - <input><soap:body use="literal" /> </input> - <output><soap:body use="literal" /> </output></operation></binding> - <service name="PeopleServiceImplService"> - <port name="PeopleServiceImplPort" binding="tns:PeopleServiceImplPortBinding"><soap:address location="http://127.0.0.1/peopleService" /> </port></service></definitions>
三、编写客户端代码
1、使用WSDL2Java生成Web Service客户端代码
(1)配置CXF环境变量
path中加入apache-cxf-3.1.4\bin的绝对路径。
(2)使用WSDL2Java生成Web Service客户端代码,命令如下:
wsdl2java -p com.ws.client -d D:\\src -client http://127.0.0.1/peopleService?wsdl
将生成的类拷入Web Service客户端工程中。
2、编写客户端测试方法
package com.ws;import java.net.MalformedURLException; import java.net.URL; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.GregorianCalendar; import java.util.List;import javax.xml.namespace.QName;import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;import com.sun.org.apache.xerces.internal.jaxp.datatype.XMLGregorianCalendarImpl; import com.ws.client.People; import com.ws.client.PeopleService; import com.ws.client.PeopleServiceImplService;public class SoapClient {public static void main(String[] args) throws ParseException, MalformedURLException {// TODO Auto-generated method stub/*** 使用准的JAX-WS的API完成客户端调用* *///使用Web服务的WSDL中的targetNamespace和<wsdl:service …中的name属性构建了javax.xml.namespace.QName接口QName qName = new QName("http://services.ws.com/", "PeopleServiceImplService");PeopleServiceImplService peopleServiceImplService = new PeopleServiceImplService(new URL("http://127.0.0.1/peopleService?wsdl"), qName);PeopleService ps = (PeopleService) peopleServiceImplService.getPort(PeopleService.class);/*** 使用CXF 的JaxWsProxyFactoryBean来完成客户端调用* *//*JaxWsProxyFactoryBean soapFactoryBean = new JaxWsProxyFactoryBean();soapFactoryBean.setAddress("http://127.0.0.1:80/peopleService");soapFactoryBean.setServiceClass(PeopleService.class);Object o = soapFactoryBean.create();PeopleService ps = (PeopleService) o;*/People p1 = new People();p1.setId(1L);p1.setName("陈一");GregorianCalendar calendar = (GregorianCalendar) GregorianCalendar.getInstance();calendar.setTime(new SimpleDateFormat("yyyy-MM-dd").parse("1989-01-28"));p1.setBirthday(new XMLGregorianCalendarImpl(calendar));ps.add(p1);People p4 = ps.getOne(4L);System.out.println("4:" + p4.getId() + "," + p4.getName() + "," + p4.getBirthday());List<People> p5 = ps.getList("王五");for (People p : p5) {System.out.println("5:" + p.getId() + "," + p.getName() + "," + p.getBirthday());}}}
最后,进行测试。
备注:
webservice服务端启动时,报错:prefix wsdp is not bound to a namespace,去掉下列四个jar包,
cxf-services-ws-discovery-api-3.1.4.jar
cxf-services-ws-discovery-service-3.1.4.jar
cxf-services-wsn-api-3.1.4.jar
cxf-services-wsn-core-3.1.4.jar
转载于:https://www.cnblogs.com/XueRong-7/p/5086580.html
JAVA的WebService规范JAX-WS相关推荐
- spring和maven_具有Spring和Maven教程的JAX–WS
spring和maven Spring框架通过JAX-WS提供对Web服务的远程支持,实际上,如Spring 参考文档中所述 ,有三种将Spring POJO服务公开为JAX-WS Web服务的方式: ...
- 带有Spring和Maven教程的JAX–WS
Spring框架通过JAX-WS提供对Web服务的远程支持,实际上,如Spring 参考文档中所述 ,有三种将Spring POJO服务公开为JAX-WS Web服务的方式: 公开基于Servlet的 ...
- .NET调用JAVA的WebService方法
调用WebService,最简单的办法当然是直接添加WEB引用,然后自动产生代理类,但是在调用JAVA的WebService时并没有这么简单,特别是对于SoapHeader的处理,在网上也有相关资料, ...
- java的WebService实践(cxf)
java的WebService实践(cxf) Java发布WebService,结合Spring,通过cxf的方式 难点:1.引用什么jar包: 1.创建接口 源码如下: package com.na ...
- inttostr java_Delphi和Java实现webservice架构
Webservice现在已经不是什么新技术了,用java建立webservice是快捷的,但是用java在制作客户端的感觉上总是不如 Delphi的(个人感觉,java高手们不要笑话我),那我们就用j ...
- 用Java 开发 WebService Axis简单实例
用 Java 开发 WebService Axis 简单实例 在开发之前, 先了解一下AXIS,axis目前出现的2版本以其灵活性,快速开发工具的集成高于xfire而使用者居其上.用Eclipse开发 ...
- 【转】JAVA EE 6 规范综述
目录 1.JAVA EE规范综述 2.JAVA EE整体架构 3.JAVA EE规范的角色划分图 4.JAVA EE平台依赖的J2SE API 5.JAVA EE平台的版本变迁 6.JAVA EE平台 ...
- java 开发webservice
这几天用java开发一个webservice,搞死了.java果然很难侍候! 传说java搞webservice,有好几种途径(为什么不是一种?要搞这么多种,让人一听,头都大了.当然啦,生物多样性总是 ...
- java调用WebService(客户端)
java调用WebService(客户端) 看下了网上大部分都是写java来编写WS服务端,写了下JAVA的调用端. WebService可以有Get. Post.Soap.Document四种方式调 ...
最新文章
- 专家解读下一代互联网创新模式,核心技术是根本
- python大乐透2019143_[新浪彩票]老梁大乐透第19143期:前区大号走强
- axure中的拐弯箭头_Axure 8.0制作水平方向上一直来回移动的箭头
- 什么是TypeScript的字符串索引签名
- 怎样获取不同域名的ifram的html,AJAX | iframe跨域的实现方法
- Learning to Rank算法介绍:GBRank
- leetcode练习--字符串中第一个唯一字符
- mysql connector c++与 visual studio 2012 联合使用
- 拜托,面试别再问我基数排序了!!!
- EndNote毕业论文参考文献格式输出
- 网络基础虚拟化VRRP/MSTP冗余技术
- swp安装(Scientific Work Place)
- 数据分析方法-AARRR模型分析方法
- python交互式程序设计导论答案-《程序员编程语言经典合集(计算机科学丛书5册套装)》epub+mobi+azw3...
- 计算机图形学之二维平移旋转缩放代码
- 微信客户管理方式及如何微信客户管理
- Kali Linux系统正确安装指南教程(一)MAC安装kail+Vmware Fusion详细教程(吐血本人测试10次)
- 【老九学堂】【C++】编码命名规范
- 阿里云服务器ECS开放8080端口
- Ae 效果快速参考:风格化
热门文章
- C 语言资源大全中文版
- float、double(浮点数)区别还有和decimal(定点数)的比较
- 原子操作的实现原理(锁和循环CAS)
- lower_bound upper_bound
- pyhton 读取目录下所有文件夹下的文件(指定文件)
- win7优化设置_win7优化性能的操作步骤
- Qt对象类型转换(char* int与Qstring间的转换)
- python调试神器_介绍一款调试Python的神器
- opencv镜像_DX200操作要领—PAM与镜像平移变换(三十八)
- ICCV 2017 CREST:《CREST: Convolutional Residual Learning for Visual Tracking》论文笔记