webservice 远程调用技术
1.1 webservice 组成及原理:
Webservice是一种使用http传输SOAP协议的数据远程调用技术
wsdl:是一个xml文件 简单的说就是webservice的说明书
soap:简单对象访问协议
uudi:一种目录 (不重要)
xml文件的阅读规则:
targetNamespaces 名称空间
portType 标签下的 name属性是实现类 massage属性是方法名称
service 标签下的 name属性是service
1.2 webservice 的入门案例:
服 务 端
第一步: 导入jar包
/**
* 创建接口
* @author Administrator
*
*/
public interface WeatherInterface {
public String getWeather(String str);
}
第二步:
/**
* 创建实现类 实现类要加 @WebService 表签
* @author Administrator
*
*/
@WebService
public class WeatherInterfaceImpl implements WeatherInterface {
@Override
public String getWeather(String str) {
System.out.println("我来了。。。。");
return str;
}
}
第三步:
import javax.xml.ws.Endpoint;
/**
* 发布服务
* @author Administrator
*
*/
public class WeatherServer {
public static void main(String[] args) {
//第一个参数服务地址
//第二个参数实现类
Endpoint.publish("http://127.0.0.1:12345/weather", new WeatherInterfaceImpl());
}
}
第四步:测试服务是否发布成功 打开wsdl 阅读xml 文件
测试地址:http://127.0.0.1:12345/weather?wsdl
客 户 端
说明:dom 中
命令wsimport是由jdk提供根据WSDL地址生成客户端代码的工具
命令wsimport位置:%JAVA_HOME%/bin
命令wsimport常用的参数:
-d,指定生成*.class,默认参数
-s,指定生成*.java文件
-p,指定代码生成包名,如果不加该参数,默认包名是WSDL命名空间的倒序
命令wsimport仅支持SOAP1.1客户端生成
第一步:wsimport生成代码 wsimport -s . http://127.0.0.1:weather?wsdl 建立一个项目 导入生成的代码 导入jar包
第二步:
import test00.WeatherInterfaceImpl;
import test00.WeatherInterfaceImplService;
/**
* 客户端
* @author Administrator
*/
public class WeatherClient {
public static void main(String[] args) {
//创建service对象
WeatherInterfaceImplService weatherInterfaceService=new WeatherInterfaceImplService();
//获取实现类
WeatherInterfaceImpl weatherInterfaceImpl=weatherInterfaceService.getPort(WeatherInterfaceImpl.class);
//调用方法
String weather = weatherInterfaceImpl.getWeather("晴");
System.out.println(weather);
}
}
1.3 webservice 的四种客户端调用:
说明:公网地址
http://www.webxml.com.cn/zh_cn/web_services.aspx
wsimport -s . http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl 生成查询天气的代码
建一个项目 导入生成的代码 导入jar包
第一种方式:
import cn.com.webxml.ArrayOfString;
import cn.com.webxml.WeatherWS;
import cn.com.webxml.WeatherWSSoap;
/**
* 入门案例中就是用的这种
* @author Administrator
*/
public class demo01 {
public static void main(String[] args) {
WeatherWS weatherWS=new WeatherWS();
WeatherWSSoap weatherWSSoap = weatherWS.getPort(WeatherWSSoap.class);
ArrayOfString weather = weatherWSSoap.getWeather("北京", "");
List<String> list = weather.getString();
StringBuffer yp=new StringBuffer();
for(String str:list){
yp.append(str+" ");
}
System.out.println(yp);
}
}
第二种方式:
/**
* 用服务地址获取实现类 灵活
* @author Administrator
*/
public class demo02 {
public static void main(String[] args) throws MalformedURLException {
//服务地址
URL url=new URL("http://ws.webxml.com.cn/WebServices/WeatherWS.asmx");
//第一个参数名称空间 第二个参数是service标签的name属性
QName name=new QName("http://WebXml.com.cn/","WeatherWS");
Service service=Service.create(url, name);
//获取实现类
WeatherWSSoap weatherWSSoap = service.getPort(WeatherWSSoap.class);
//调用方法
ArrayOfString weather = weatherWSSoap.getWeather("原平", "");
List<String> list = weather.getString();
for(String str:list){
System.out.println(str);
}
}
}
第三种方式:
/**
* 利用HttpURLConnection实现调用
* @author Administrator
*/
public class demo03 {
public static void main(String[] args) throws Exception {
//服务地址
URL url=new URL("http://ws.webxml.com.cn/WebServices/WeatherWS.asmx");
//打开链接
HttpURLConnection connection=(HttpURLConnection)url.openConnection();
//设置请求方式
connection.setRequestMethod("POST");
//设置mime类型 这是soap1.1的 soap1.2的是 "application/soap+xml;chartset=utf-8"
connection.setRequestProperty("content-type", "text/xml;charset=utf-8");
//设置输入输出
connection.setDoOutput(true);
connection.setDoInput(true);
//输出请求体
OutputStream outputStream = connection.getOutputStream();
outputStream.write(getXml("太原").getBytes());
//如果响应成功
int i = connection.getResponseCode();
if(i==200){
InputStream inputStream = connection.getInputStream();
BufferedReader reader=new BufferedReader(new InputStreamReader(inputStream));
String but=null;
StringBuilder der=new StringBuilder();
while(null!=(but=reader.readLine())){
der.append(but);
}
byte[] bytes = der.toString().getBytes();
System.out.println(new String(bytes,"utf-8"));
reader.close();
inputStream.close();
}
outputStream.close();
}
//请求体
public static String getXml(String str){
String xmlSpoat="<?xml version=\"1.0\" encoding=\"utf-8\"?>"
+" <soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"
+" <soap:Body>"
+" <getWeather xmlns=\"http://WebXml.com.cn/\">"
+" <theCityCode>"+str+"</theCityCode>"
+" <theUserID></theUserID>"
+" </getWeather>"
+" </soap:Body>"
+"</soap:Envelope>";
return xmlSpoat;
}
}
第四种方式:基于ajax
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script >
function getMobile(){
alert(999);
var xml=new XMLHttpRequest();
xml.open("post","http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl",true);
xml.setRequestHeader("context-type","text/html;charset=utf-8");
xml.onreadystatechange=function(){
if(xml.status==200 && xml.readyState==4){
var div=document.getElementById("div");
div.innerHTML(xml.responseText);
}
}
var soapXml='<?xml version="1.0" encoding="utf-8"?>'
+'<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">'
+' <soap:Body>'
+' <getMobileCodeInfo xmlns="http://WebXml.com.cn/">'
+' <mobileCode>"+document.getElementById("dd")+"</mobileCode>'
+' <userID></userID>'
+' </getMobileCodeInfo>'
+' </soap:Body>'
+' </soap:Envelope>';
xml.send(soapXml);
}
</script>
</head>
<body>
电话:<input type="text" id="dd" /><br/>
<input type="button" onclick="getMobile()" /><br/>
<div id="div"></div>
</body>
</html>
1.3 webservice 基于cxf框架:
1.3.1 cxf的介绍
cxf:是一个开源的webservice框架,提供很多成熟的功能,帮助我们快速开发
cxf:支持的协议:SOAP1.1/1.2、REST
cxf:支持的数据格式:XML、JSON(仅在REST下支持)
1.3.2 cxf的下载 安装
http://cxf.apache.org/download.html
第一步:安装前必须安装jdk 最好是1.7版本的 配置jdk的环境变量
第二步: 解压下载完毕的apache-cxf-2.7.11
第三步:配置cxf的环境变量
第四步:测试是否配置成功,在一个新的cmd窗口中输入:wsdl2java -h
1.3.3 cxf服务端和客户端代码
服 务 端 导入jar包
第一步:
/**
* 接口 @BindingType(SOAPBinding.SOAP12HTTP_BINDING)
* 说明是soap1.2
* @author Administrator
*/
@WebService
@BindingType(SOAPBinding.SOAP12HTTP_BINDING)
public interface WeatherInterface {
public String getWeather(String str);
}
第二步:
/**
* 实现类
* @author Administrator
*/
public class WeatherInterfaceImpl implements WeatherInterface {
public String getWeather(String str) {
System.out.println("我来了。。。。");
return str;
}
}
第三步:
/**
* 基于cxf 的发布服务
* @author Administrator
*/
public class WeatherServer {
public static void main(String[] args) {
JaxWsServerFactoryBean factoryBean=new JaxWsServerFactoryBean();
factoryBean.setServiceClass(WeatherInterface.class);
factoryBean.setServiceBean(new WeatherInterfaceImpl());
//设置服务地址
factoryBean.setAddress("http://127.0.0.1:1314/weather");
//发布
factoryBean.create();
}
}
客 户 端
说明:
wsdl2java命令生成客户端代码
命令wsdl2java是CXF提供的根据WSDL地址生成客户端代码的工具
命令wsdl2java位置:%CXF_HOME%\bin
命令wsdl2java常用参数:
-d,生成java代码,指定代码的存放目录
-p,指定代码生成包名,不指定该参数,默认包名是WSDL命名空间的倒序
命令wsdl2java支持SOAP1.1和SOAP1.2生成
E:\workspace\wsimport\src>wsdl2java -p cn.itcast.cxf -d . http://127.0.0.1:12345/weather?wsd
建一个新项目 导入生成的代码 导入jar包
/**
* 客户端 使用JaxWsProxyFactoryBean类获取
* @author Administrator
*
*/
public class WeatherClient {
public static void main(String[] args) {
JaxWsProxyFactoryBean factoryBean=new JaxWsProxyFactoryBean();
factoryBean.setServiceClass(WeatherInterface.class);
factoryBean.setAddress("http://127.0.0.1:1314/weather?wsdl");
//获取接口
WeatherInterface weatherInterface = factoryBean.create(WeatherInterface.class);
//调用方法
String weather = weatherInterface.getWeather("小风吹的凉爽");
System.out.println(weather);
}
}
1.3.4 cxf与spring的整合
服务端:建一个项目 导入jar包
第一步 web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name></display-name>
<!-- 加载applicationContext.xml -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- cxf服务 -->
<servlet>
<servlet-name>cxf</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>cxf</servlet-name>
<url-pattern>/ws/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
第二步: config下面的applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws"
xmlns:jaxrs="http://cxf.apache.org/jaxrs" xmlns:cxf="http://cxf.apache.org/core"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd">
<!-- <jaxws:server>发布服务 -->
<jaxws:server address="/weather" serviceClass="cn.xebest.weather.WeatherInterface">
<jaxws:serviceBean>
<ref bean="weatherInterface"/>
</jaxws:serviceBean>
<jaxws:inInterceptors>
<ref bean="inInterceptor"/>
</jaxws:inInterceptors>
<jaxws:outInterceptors>
<ref bean="outInterceptor"/>
</jaxws:outInterceptors>
</jaxws:server>
<!-- 配置拦截器 -->
<bean id="inInterceptor" class="org.apache.cxf.interceptor.LoggingInInterceptor"/>
<bean id="outInterceptor" class="org.apache.cxf.interceptor.LoggingOutInterceptor"/>
<!-- 配置实现类的bean -->
<bean id="weatherInterface" class="cn.xebest.weather.WeatherInterfaceImpl"/>
</beans>
第三步:接口
/**
* 接口 @BindingType(SOAPBinding.SOAP12HTTP_BINDING)
* 说明是soap1.2
* @author Administrator
*/
@WebService
@BindingType(SOAPBinding.SOAP12HTTP_BINDING)
public interface WeatherInterface {
public String getWeather(String str);
}
第四步:实现类
/**
* 实现类
* @author Administrator
*/
public class WeatherInterfaceImpl implements WeatherInterface {
public String getWeather(String str) {
System.out.println("我来了。。。。");
return str;
}
}
客户端:
在dom 中 用命令 wsdl2java 生成代码
建一个项目 导入生成的代码 导入jar包
第一步: config 下的 applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws"
xmlns:jaxrs="http://cxf.apache.org/jaxrs" xmlns:cxf="http://cxf.apache.org/core"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd">
<jaxws:client id="weatherInterface" address="http://127.0.0.1:8090/webservice00/ws/weather?wsdl"
serviceClass="cn.xebest.weather.WeatherInterface"/>
</beans>
第二步:获取配置文件
/**
* 获取xml 文件
* @author Administrator
*/
public class test05 {
public static void main(String[] args) {
ApplicationContext context=new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
WeatherInterface weatherInterface = (WeatherInterface) context.getBean("weatherInterface");
String weather = weatherInterface.getWeather("原平的天气也很好");
System.out.println(weather);
}
}
1.3.5 cxf与spring的综合案例
说明:根据地址:http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl 先获取到手机的服务 再把获取到的手机服务发布
在dom中用命令生成 天气服务http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl的代码 导入项目中 导入所需jar包
第一步:接口 MobileInterface
/**
* 接口
* @author Administrator
*/
@WebService
@BindingType(SOAPBinding.SOAP12HTTP_BINDING)
public interface MobileInterface {
public String getMobile(String str);
}
第二步:实现类 MobileInterfaceImpl
/**
* 实现类
* @author Administrator
*/
public class MobileInterfaceImpl implements MobileInterface {
//声明要获取的天气的实现类
public MobileCodeWSSoap mobileCodeWSSoap;
//set方法是为了能在配置文件中给这个属性赋值
public void setMobileCodeWSSoap(MobileCodeWSSoap mobileCodeWSSoap) {
this.mobileCodeWSSoap = mobileCodeWSSoap;
}
//要发布的方法
public String getMobile(String str) {
return mobileCodeWSSoap.getMobileCodeInfo(str, "");
}
}
第三步:定义servlet类 Mobile
/**
* 自定义的servlet类 继承HttpServlet
* @author Administrator
*
*/
public class Mobile extends HttpServlet {
//get的请求
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
//post请求
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
MobileInterfaceImpl mobileInterfaceImpl;
WebApplicationContext context=WebApplicationContextUtils.getWebApplicationContext(this.getServletContext());
mobileInterfaceImpl=(MobileInterfaceImpl) context.getBean("mobileInterfaceImpl");
request.setCharacterEncoding("utf-8");
String num=request.getParameter("mobileNum");
num=mobileInterfaceImpl.getMobile(num);
request.setAttribute("num",num);
request.getRequestDispatcher("/form.jsp").forward(request, response);
System.out.println("请求来了");
}
}
第四步:配置web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name></display-name>
<!-- 加载spring 配置文件 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 加载cxf服务 -->
<servlet>
<servlet-name>cxf</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>cxf</servlet-name>
<url-pattern>/mobile/*</url-pattern>
</servlet-mapping>
<!-- 配置自定义的servlet -->
<servlet>
<servlet-name>Mobile</servlet-name>
<servlet-class>cn.xebest.mobile.Mobile</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Mobile</servlet-name>
<url-pattern>/mobile.action</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
第五步:config 下的applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws"
xmlns:jaxrs="http://cxf.apache.org/jaxrs" xmlns:cxf="http://cxf.apache.org/core"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd">
<!-- 服务端 -->
<jaxws:server id="mobileInterface" serviceClass="cn.xebest.mobile.MobileInterface" address="/address">
<jaxws:serviceBean>
<ref bean="mobileInterfaceImpl"/>
</jaxws:serviceBean>
</jaxws:server>
<!-- 给属性赋值 -->
<bean id="mobileInterfaceImpl" class="cn.xebest.mobile.MobileInterfaceImpl">
<property name="mobileCodeWSSoap" ref="mobileCodeWSSoap" />
</bean>
<!-- 客户端 获取公网的数据-->
<jaxws:client id="mobileCodeWSSoap" address="http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl" serviceClass="cn.com.webxml.MobileCodeWSSoap"></jaxws:client>
</beans>
第六步:form.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/mobile.action" method="post" onsubmit="return sub()">
<input type="text" name="mobileNum" />
<input type="submit" value="submit">
</form>
${num}
</body>
</html>
127.0.0.1:8090/项目名/mobile/address?wsdl
1.4 webservice 基于cxf框架的rest风格:(cxf是能实现rest风格的框架)
1.4.1 普通的发布:
建立项目 导入jar包
第一步:实体类
/**
* 在这个类上面必须有此标签 name 的值谁编写
* @author Administrator
*/
@XmlRootElement(name="student")
public class Student implements Serializable{
private String name;
private String sex;
private String age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
第二步:接口
@WebService
@Path("/student")//类的路径
public interface StudentInterface {
@GET//get请求
@Path("/string/{id}")//方法的路径 id是参数 在方法中用@PathParam获取
@Produces(MediaType.APPLICATION_XML)//xml格式
public Student getString(@PathParam("id")String id);
@GET
@Path("/list/{id}")
//可以是xml 也可以是 json
@Produces({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})
public List<Student> getList(@PathParam("id")String id);
}
第三步: 实现类
public class StudentInterfaceImpl implements StudentInterface{
@Override
public Student getString(String id) {
Student t=new Student();
t.setName("小刚");
t.setAge("18");
t.setSex("男");
if(StringUtils.isNotBlank(id)){
return t;
}
return null;
}
@Override
public List<Student> getList(String id) {
Student t1=new Student();
t1.setName("小刚");
t1.setAge("18");
t1.setSex("男");
Student t2=new Student();
t2.setName("小刚");
t2.setAge("18");
t2.setSex("男");
Student t3=new Student();
t3.setName("小刚");
t3.setAge("18");
t3.setSex("男");
@SuppressWarnings("unused")
List<Student> list=new ArrayList<Student>();
list.add(t1);
list.add(t2);
list.add(t3);
if(StringUtils.isNotBlank(id)){
return list;
}
return null;
}
}
第四步:发布服务
/**
* rest发布服务
* @author Administrator
*
*/
public class StudentServer {
public static void main(String[] args) {
//rest框架的api
JAXRSServerFactoryBean factroyBean=new JAXRSServerFactoryBean();
factroyBean.setAddress("http://127.0.0.1:1232/server");
factroyBean.setResourceClasses(StudentInterfaceImpl.class);
factroyBean.create();
}
}
http:127.0.0.1:1232/server/student/list/99?_type=json //获取json格式
http:127.0.0.1:1232/server/student/list/99?_type=xml //获取xml格式
http:127.0.0.1:1232/server/student/string/99 //获取xml格式
1.4.2 rest与spring整合的发布:
建立项目 导入jar包
第一步:实体类
package cn.xebest.rest;
import javax.xml.bind.annotation.XmlRootElement;
/**
* 实体类
* 此处必须有标签 @XmlRootElement
* @author Administrator
*
*/
@XmlRootElement(name="student")
public class Student {
private String name;
private String age;
private String sex;
public Student() {
super();
}
public Student(String name,String age,String sex){
this.name=name;
this.age=age;
this.sex=sex;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
第二步:接口
@WebService
@Path("/student")
public interface StudentInterface {
@GET
@Path("/string/{id}")
@Produces(MediaType.APPLICATION_XML)
public Student getStudent(@PathParam("id")String id);
@GET
@Path("/list/{id}")
@Produces({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})
public List<Student> getList(@PathParam("id")String dd);
}
第三步:实现类
public class StudentInterfaceImpl implements StudentInterface {
public Student getStudent(String id) {
Student t=new Student("小明","21","男");
if(StringUtils.isNotBlank(id)){
return t;
}
return null;
}
public List<Student> getList(String dd) {
Student t1=new Student("小明","21","男");
Student t2=new Student("小明","21","男");
Student t3=new Student("小明","21","男");
List<Student> list=new ArrayList<Student>();
if(StringUtils.isNotBlank(dd)){
list.add(t1);
list.add(t2);
list.add(t3);
return list;
}
return null;
}
}
第四步:config下的 applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws"
xmlns:jaxrs="http://cxf.apache.org/jaxrs" xmlns:cxf="http://cxf.apache.org/core"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd">
<jaxrs:server address="/address" >
<jaxrs:serviceBeans>
<ref bean="studentInterfaceImpl"/>
</jaxrs:serviceBeans>
</jaxrs:server>
<bean id="studentInterfaceImpl" class="cn.xebest.server.StudentInterfaceImpl"></bean>
</beans>
第五步:web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name></display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>cxf</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>cxf</servlet-name>
<url-pattern>/server/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
http:127.0.0.1:8090/项目名/server/address/student/string/99
- 大小: 14.3 KB
分享到:
相关推荐
webservice远程调用,返回String数据并生成xml文件到本地工程,在通过SAX解析器把数据解析出来。这是webservice应用的一个简单的例子。根据该例子的思想,可以实现很多功能了。例如把client工程的sayHello方法改为...
WebService 远程调用报错设置 在 WebService 远程调用时,可能会出现一些报错设置问题,本文将对这些问题进行详细的分析和解决。 错误信息:“测试窗体只能用于来自本地计算机的请求” 在 WebService 远程调用时...
总之,"webservice远程调用与cxf框架共26页.pdf"文档很可能会深入讲解如何使用CXF框架来创建和使用Web服务,包括SOAP和RESTful服务的创建、配置、测试和优化。这份资料对于理解和应用CXF框架以及理解Web服务远程调用...
在本项目中,你将学习如何使用Java和Jersey构建RESTful Web服务,并进行远程调用。以下是一些关键知识点: 1. **JAX-RS注解**: - `@Path`:用于定义资源的URI路径。 - `@GET`, `@POST`, `@PUT`, `@DELETE`:分别...
调用远程wadl的Webservice代码,请求参数是json,返回结果通过main方法打印
这就是Spring框架实现远程调用服务端接口以实现WebService功能的基本流程。由于HttpInvoker基于HTTP,它天生具备良好的网络穿透能力,适合于分布式系统中的跨网络通信。同时,由于使用了Java序列化,它的性能相对较...
Web Service 远程调用技术 Web Service 是一种跨编程语言和跨操作系统平台的远程调用技术,通过 SOAP 在 Web 上提供的软件服务,使用 WSDL 文件进行说明,并通过 UDDI 进行注册。XML 是 Web Service 的基础,它是...
2. **WebService远程调用方式**:通过Web服务的形式为客户端提供接口。客户端可以通过标准的HTTP协议访问这些接口,并接收由服务器端处理后的业务逻辑结果。 #### 三、HTTP/TCP方式远程调用详解 ##### 接口定义 ...
这是一份DELPHI的webservice 远程调用例子,里面有详细文档介绍和代码,可以作为参考看看。
`WebMethod`特性标记表示该方法可以被远程调用。 3. **业务逻辑层(BLL)**: - BLL是应用程序的核心,处理业务规则和数据验证。在BLL层,你可以封装对WebService的调用,如`PaymentBLL.cs`: ```csharp public...
LabVIEW 调用WebService 访问远程数据 在本篇文章中,我们将讨论如何使用 LabVIEW 调用 WebService 来访问远程数据。首先,我们需要了解为什么需要使用 WebService 来访问远程数据。传统的方法是使用链接字符串连接...
在 EzoneService 中,我们定义了一个名为 HelloWorld 的方法,该方法使用 [WebMethod] 属性指定了该方法可以被远程调用。HelloWorld 方法返回一个字符串 "Hello World"。 在客户端,我们可以使用 ConsoleApp 来调用...
WebService接口调用工具类是Java开发中常见的一种技术,用于与远程服务进行通信,尤其在集成不同系统或服务时非常关键。在这个场景中,"webservice接口调用工具类依赖jar包"指的是为了实现对WebService接口的调用,...
C# webservice 服务调用工具类。 此工具 对 post get 请求进行了封装,只需要传递对应的URL以及参数即可返回JSON 或者XML 的字符串。 是非常有用的调用远程接口的服务类。 webservice
activation-1.1.jar axiom-api-1.2.13.jar axiom-impl-1.2.13.jar axis2-adb-1.6.2.jar axis2-adb-codegen-1.6.2.jar axis2-codegen-1.6.2.jar axis2-java2wsdl-1.6.2.jar axis2-kernel-1.6.2.jar ...
这些存根类提供了与服务交互的方法,使得开发者可以像调用本地方法一样调用远程服务。 2. CXF:Apache CXF是一个全面的服务开发框架,支持SOAP和RESTful风格的Web服务。相比于Axis,CXF提供了更现代的API和更好的...
2. **调用WebService**:利用SOAP消息,开发者可以向WebService发送请求。SOAP是一种传输协议,它封装了请求数据,并通过HTTP或HTTPS等网络协议发送到服务器。 3. **处理响应**:服务器接收到请求后,执行相应的...
AXIS2远程调用WebService是Java开发者在进行分布式服务交互时常用的一种技术。本文将详细介绍如何使用Eclipse集成开发环境和AXIS2框架创建并调用WebService。首先,我们需要准备以下基础工具: 1. Eclipse IDE:这...
在本文中,我们将重点关注使用Web服务(WebService)作为远程调用的一种实现方式,以及如何通过代码追踪理解其工作原理。 首先,Web服务是基于开放标准如SOAP(Simple Object Access Protocol)和HTTP(超文本传输...