JAVA的WebService规范JAX-WS
JAX-WS的服務(wù)端、客戶端雙方傳輸數(shù)據(jù)使用的SOAP消息格式封裝數(shù)據(jù)。
?
一、下載apache-cxf-3.1.4.zip。
二、編寫服務(wù)端
1、編寫一個Web Service用來傳輸參數(shù)的類
package com.ws.services.entity;import java.util.Date;import javax.xml.bind.annotation.XmlRootElement; /*** 該類為Web Service中的參數(shù)、返回值類型,故需要使用JAXB注解告訴CXF如何在XML和Java Object之間處理,* 因為,SOAP消息格式包裝的是一段XML代碼,無論是服務(wù)器端,還是客戶端,* 在接收到SOAP消息時,都需要將XML轉(zhuǎn)化為Java Object,* 在發(fā)送SOAP消息時,需要將Java Object轉(zhuǎn)化為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、實現(xiàn)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、發(fā)布Web Service服務(wù)
?
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的靜態(tài)方法publish()發(fā)布Web服務(wù)* *///Endpoint.publish("http://127.0.0.1:80/peopleService", new PeopleServiceImpl());/*** 方法二,使用CXF特有的API---JaxWsServerFactoryBean發(fā)布Web服務(wù),* 并且我們對服務(wù)端工廠Bean的輸入攔截器集合、輸出攔截器集合中分別添加了日志攔截器,* 可以在Web服務(wù)端發(fā)送和接收消息時輸出信息。*/JaxWsServerFactoryBean soapFactoryBean = new JaxWsServerFactoryBean();soapFactoryBean.getInInterceptors().add(new LoggingInInterceptor());soapFactoryBean.getOutInterceptors().add(new LoggingOutInterceptor());// 注意這里是實現(xiàn)類不是接口soapFactoryBean.setServiceClass(PeopleServiceImpl.class);soapFactoryBean.setAddress("http://127.0.0.1:80/peopleService");soapFactoryBean.create();System.out.println("published...");} }?
?
?
6、測試服務(wù)發(fā)布情況
運行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環(huán)境變量
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/*** 使用準(zhǔn)的JAX-WS的API完成客戶端調(diào)用* *///使用Web服務(wù)的WSDL中的targetNamespace和<wsdl:service …中的name屬性構(gòu)建了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來完成客戶端調(diào)用* *//*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());}}}?
最后,進(jìn)行測試。
?
備注:
webservice服務(wù)端啟動時,報錯: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
轉(zhuǎn)載于:https://www.cnblogs.com/XueRong-7/p/5086580.html
總結(jié)
以上是生活随笔為你收集整理的JAVA的WebService规范JAX-WS的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 原创:央视纪录片评选相声大师仅有七位,为
- 下一篇: 线程池技术