这篇文章主要围绕webservice定义和webservice详解展开,旨在为您提供一份详细的参考资料。我们将全面介绍webservice定义的优缺点,解答webservice详解的相关问题,同时也会
这篇文章主要围绕webservice定义和webservice详解展开,旨在为您提供一份详细的参考资料。我们将全面介绍webservice定义的优缺点,解答webservice详解的相关问题,同时也会为您带来axis2实现webservice之使用services.xml文件发布WebService、java 学习笔记之 webservice(一)- 入门实例,自定义 webservice 服务、java学习笔记之webservice(四)--用Myeclipse在web项目中发布WebService、MOSS2007自定义WebService(1)-----自定义Webservice的步骤介绍的实用方法。
本文目录一览:- webservice定义(webservice详解)
- axis2实现webservice之使用services.xml文件发布WebService
- java 学习笔记之 webservice(一)- 入门实例,自定义 webservice 服务
- java学习笔记之webservice(四)--用Myeclipse在web项目中发布WebService
- MOSS2007自定义WebService(1)-----自定义Webservice的步骤介绍
webservice定义(webservice详解)
axis2实现webservice之使用services.xml文件发布WebService
还是对教程的延伸,本来是周五要写的,但是耽搁了一下,就拖到周一了。
用Axis2实现Web Service,虽然可以将POJO类放在axis2\WEB-INF\pojo目录中直接发布成Web Service,这样做不需要进行任何配置,但这些POJO类不能在任何包中。这似乎有些不方便,为此,Axis2也允许将带包的POJO类发布成Web Service。
先实现一个POJO类,代码如下:
这个类有两个方法,这两个方法都需要发布成Web Service方法。这种方式和直接放在pojo目录中的POJO类不同。要想将MyService类发布成Web Service,需要一个services.xml文件,这个文件需要放在meta-inf目录中,该文件的内容如下:
其中<service>元素用于发布Web Service,一个<service>元素只能发布一个WebService类,name属性表示WebService名,如下面的URL可以获得这个WebService的WSDL内容:
http://localhost:8080/axis2/services/myService?wsdl (这个得等到.aar文件出来之后)
其中name属性名就是上面URL中"?"和"/"之间的部分。
<description>元素表示当前Web Service的描述,<parameter>元素用于设置WebService的参数,在这里用于设置WebService对应的类名。在这里最值得注意的是<messageReceivers>元素,该元素用于设置处理WebService方法的处理器。例如,getGreeting方法有一个返回值,因此,需要使用可处理输入输出的RPcmessageReceiver类,而update方法没有返回值,因此,需要使用只能处理输入的RPCInOnlyMessageReceiver类。
使用这种方式发布WebService,必须打包成.aar文件,..aar文件实际上就是改变了扩展名的.jar文件。在现在建立了两个文件(这两个文件夹任意):MyService.java和services.xml。将MyService.java编译,生成MyService.class。services.xml和MyService.class文件的位置如下:
D:\ws\service\MyService.class
D:\ws\meta-inf\services.xml
在windows控制台中进入ws目录,并输入如下的命令生成.aar文件(实际上,.jar文件也可以发布webservice,但axis2官方文档中建议使用.aar文件发布webservice):
jar cvf ws.aar . jar cvf AxisTest.aar .
如下是我测试的过程
原来发现不管要.aar,之后还需要一个“.”,即.arr.,但是最坑爹的就是这里了,加了“.”之后还是不对啊,最后的问题居然是这个后面的点要空一格,不能紧挨着.arr
如下成功之后的文件夹情况
最后将ws.aar文件复制到<Tomcat安装目录>\webapps\axis2\WEB-INF\services目录中,启动Tomcat后,就可以调用这个WebService了。
已经显示webservice发布成功了,接下来就是编写客户端进行调运了,跟前面一样,也需要wsdl2java命令去生成stub类,过程我就不多说了,之前的博客里有
如下是调用客户端的代码
运行结果
由于“帅哥”是在服务器端打印的,所以客户端是看不到的。
在打包arr文件的时候,发现有一个build.xml文件,这个是ant脚本中的知识,在本题中暂时不涉及,以后再介绍。
如果想发布多个WebService,可以使用<serviceGroup>元素,如再建立一个MyService1类,代码如下:
在services.xml文件中可以使用如下的配置代码来配置MyService和MyService1类:
java 学习笔记之 webservice(一)- 入门实例,自定义 webservice 服务
1 WebService 是用来做什么?
WebService 是一种跨编程语言和跨操作系统知识库 " 操作系统平台的远程调用技术。用于网络通信,多台机器之间的数据交互。
2 与 socket 的区别
1. socket 是在网络中的数据传输层,采用的是 TCP/UDP 协议,webservice 是属于应用层,采用的是 http 协议
2. socket 建立是长连接,webservice 建立的是短连接(调用服务时建立连接,调用完毕后断开连接)
3 WebService 入门实例
3.1 定义服务
a). 定义服务的接口:
package com.beauxie.webservice;
import javax.jws.WebService;
/**
* 定义服务的接口
* @author Beauxie
*
*/
@WebService//此注解用在类上指定将此类发布成一个WebService
public interface Speaker {
String sayHello(String name);
}
b). 创建实现这个接口的实现类:
package com.beauxie.webservice;
import javax.jws.WebService;
/**
* 定义服务的实现类
* @author Beauxie
*/
@WebService(endpointInterface="com.beauxie.webservice.Speaker")
public class Person implements Speaker {
public String sayHello(String name) {
return "Hello,"+name;
}
}
注意:接口和实现类中必须用 @WebService 注解,并且在实现类的注解中必须指定 endpointInterface 属性的值为接口的全限定名
3.2 发布服务
package com.beauxie.webservice;
import javax.xml.ws.Endpoint;
/**
* 发布服务
* @author Beauxie
*/
public class Service {
public static void main(String[] args){
//1.定义发布的地址
String url = "http://localhost:8080/demo";
//2.发布服务
//第一个参数是指定你要发布的地址,第二个参数是你要发布的服务对象
Endpoint.publish(url, new Person());
System.out.println("服务器已启动");
}
}
运行程序进行发布,运行结果:
然后打开浏览器访问 http://localhost:8080/demo?wsdl,只要在客户端浏览器能看以下 WSDL 文档,说明服务发布成功:
3.3 客户端去调用服务
如果是内部系统之间的调用,那么提供 2 个信息就可以调用 webservice:
1. wsdl 的地址
2. 接口文件(jar 包)
package com.beauxie.webservice;
import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
/**
* 客服端调用
* @author Beauxie
*
*/
public class Client {
public static void main(String[] args) throws Exception {
//1.声明所发布的服务对应的wsdl地址
URL url=new URL("http://localhost:8080/demo?wsdl");
//2.声明所要调用的Qname
QName qname=new QName("http://webservice.beauxie.com/", "PersonService");
//3.创建客户端的服务代理对象
Service service=Service.create(url,qname);
Speaker speaker = service.getPort(Speaker.class);
//4.调用服务的方法
String str=speaker.sayHello("Beauxie");
System.out.println(str);
}
}
运行结果:
附:QName 中两个参数所对应 wsdl 文档中参数:
其实可以直接访问 http://localhost:8080/demo,但由于自己的电脑原因,无法访问,所以只能访问 wsdl 地址了。
》》未完待续,接下一篇
java学习笔记之webservice(四)--用Myeclipse在web项目中发布WebService
》》接上一篇
准备工作:
1、新建一个web项目;
2、定义服务的接口Speaker:
package com.beauxie.webservice;
import javax.jws.WebService;
/**
* 定义服务的接口
* @author
*
*/
@WebService//此注解用在类上指定将此类发布成一个WebService
public interface Speaker {
String sayHello(String name);
}
3.创建这个接口的实现类Person:
package com.beauxie.webservice;
import javax.jws.WebService;
/**
* 定义服务的实现类
* @author Beauxie
*
*/
@WebService(endpointInterface="com.beauxie.webservice.Speaker")
public class Person implements Speaker {
public String sayHello(String name) {
return "Hello,"+name;
}
}
主要步骤:
1.依次点击左上角的“File”-->“New”-->“other”,如下图所示:
2.选择"Web Service",点击“Next”,如下图所示:
3.点击"Install JAX-WS-Facet"安装JAX-WS-Facet,如下图所示:
4.选择自己所要发布服务的项目等,如下图所示:
5.在 Java class一栏中,选择web服务的实现类,(点击右边的Browse,直接搜索类名即可),其余的不用修改:
6.完成上述步骤以后,在WEB-INF目录下可以看到多了两个文件:“sun-jaxws.xml”和“web.xml”,然后再导入相关的jar包,不然会报错:java.lang.ClassNotFoundException: com.sun.xml.ws.transport.http.servlet.WSServletContextListener 。(点击下载相关jar包)
7.打开"web.xml",可查看配置:
8.启动web项目之后,打开浏览器,访问“web.xml”中servlet(url-pattern)对应的webservice:
出现以上界面,说明服务发布成功。
总结:
1.当出现:java.lang.ClassNotFoundException: com.sun.xml.ws.transport.http.servlet.WSServletContextListener异常时,很大原因是因为忘了导入相关jar包;
2.通过“web.xml”中对应的servlet(url-pattern)访问发布的webservice,每个人端口号不同,我这里修改了tomcat的配置文件,将默认端口改成了80。
接下一篇 》》
MOSS2007自定义WebService(1)-----自定义Webservice的步骤介绍
提到
<%@ WebService Language="C#" Class="MyServiceClass,MyServiceAssembly,Version=1.0.0.0, Culture=neutral,PublicKeyToken=722dca430e2d0190" %>
那么就从这个里面引出了一个GAC的assembly出来,那么我们进行下一步
using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using Microsoft.SharePoint.Utility;
using Microsoft.SharePoint;
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class MyService : System.Web.Services.WebService
{
public MyService () { }
[WebMethod]
public string HelloWorld()
{
return "Hello World";
}
}
这里需要指出的就是继承
(2) 将service.disco和 service.wsdl文件中的 <?xml version=" 1.0 " encoding=" utf-8 "?> 该语句替换为以下语句:
<%@ Import Namespace="Microsoft.SharePoint.Utilities" %>
<%@ Import Namespace="Microsoft.SharePoint" %>
<% Response.ContentType = "text/xml"; %>
实际上就是把原来的纯
< contractRef ref =http://chris/_layouts/service.asmx?wsdl docRef = "http://carysun/_layouts/service.asmx" xmlns = "http://schemas.xmlsoap.org/disco/scl/" />
< soap address = "http://chris/_layouts/service.asmx" xmlns : q1 =http://tempuri.org/ binding = "q1:ServiceSoap" xmlns = "http://schemas.xmlsoap.org/disco/soap/" />
< soap address =http://chris/_layouts/service.asmx xmlns : q2 =http://tempuri.org/ binding = "q2:ServiceSoap12" xmlns = "http://schemas.xmlsoap.org/disco/soap/" />
替换为:
(4)将
< soap12 : address location = "http://chris/_layouts/service.asmx" />
替换为:
对于
是为了
主要是将service.asmx,servicedisco.aspx和servicewsdl.aspx拷贝到
使用浏览器访问http://chris/_vti_bin/serivce.asmx 即可看到 Service中提供的方法,然后可以进行调用。
以上就是我们在MOSS2007中自定义WebService的过程,希望对大家有所帮助。
关于webservice定义和webservice详解的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于axis2实现webservice之使用services.xml文件发布WebService、java 学习笔记之 webservice(一)- 入门实例,自定义 webservice 服务、java学习笔记之webservice(四)--用Myeclipse在web项目中发布WebService、MOSS2007自定义WebService(1)-----自定义Webservice的步骤介绍等相关知识的信息别忘了在本站进行查找喔。
本文标签: