加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

阿翔编程学-WebService介绍及使用

发布时间:2020-12-17 02:51:04 所属栏目:安全 来源:网络整理
导读:Web Service 详细解析及使用方法 XFire 篇 XFire 简介 ?????? XFire 是 codehaus 推出的下一代的 java SOAP 框架, 它构建了 POJO 和 SOA 之间的桥梁,主要特性就是支持将 POJO 通过非常简单的方式发布成 Web 服务,这种处理方式不仅充分发挥了 POJO 的作用

Web Service详细解析及使用方法

XFire

XFire简介

?????? XFire codehaus推出的下一代的 java SOAP框架,它构建了 POJO SOA 之间的桥梁,主要特性就是支持将 POJO 通过非常简单的方式发布成 Web 服务,这种处理方式不仅充分发挥了 POJO 的作用,简化了 Java 应用转化为 Web 服务的步骤和过程,也直接降低了 SOA 的实现难度,为企业转向 SOA 架构提供了一种简单可行的方式。通过提供简单的API和支持标准协议,可以很方便的开发面向服务的程序。内建在STAX基于流的XML解析引擎的基础上,XFire拥有很高的性能。

XFire拥有以下的特性

?????? 1) 支持重要的web服务标准,如SOAPWSDLWS-IWS-AddressingWS-Security基本概要等

?????? 2) 高性能的SOAP栈设计

?????? 3) 可插拔的绑定,支持POJOXMLBeansJAXB1.1JAXB2castor

?????? 4) jsr181规范

?????? 5) 支持多种传输协议:HTTPJMSXMPPIn-JVM

?????? 6) 可嵌入式的API

?????? 7) JBI支持

?????? 8) 客户端和服务器端的存根创建工具

?????? 9) JAX-WS的早期支持

XFire简单使用

?????? 首先先打开IDE,创建一个普通的java工程,将xfire所需要的jarxifrejar加入到工程所需要的类库引用中。创建一个简单但的java文件,这个文件只有一个名为add的成员方法。

提供服务类

package net.ruixin.webservicedemo;

public class HelloWorldServiceImpl implements IHelloWorldService {

??? ??? /**

???? ?? * 返回名称的方法

???? ?? * @param name 名称

???? ?? */

??? ??? public String sayHello(String name){

??????? ???? return "您好,"+name;

??? ??? }

}

服务类的接口类

package net.ruixin.webservicedemo;

public interface IHelloWorldService {

??? ??? /**

??? ??? ?* 返回名称的方法

??? ??? ?* @param name 名称

??? ??? ?* @return 返回值

??? ??? ?*/

??? ??? public String sayHello(String name);

}

配置services.xml

<beans xmlns="http://xfire.codehaus.org/config/1.0">

<service>

????? ?? ??<name>HelloWorldService</name>

?????? ???? ??<serviceClass>

????????? ?????? ??net.ruixin.webservicedemo.IHelloWorldService

????? ????? ??</serviceClass>

??????? ???? ??<implementationClass>

??????????? ???? ??net.ruixin.webservicedemo.HelloWorldServiceImpl

?????? ???? ??</implementationClass>

??????? ???? ??<scope>application</scope>

??? ??? ?</service>

</beans>

服务名

<name>HelloWorldService</name>

服务类

<serviceClass>net.ruixin.webservicedemo.IHelloWorldService

</serviceClass>

服务接口<implementationClass>net.ruixin.webservicedemo.HelloWorldServiceImpl</implementationClass>

服务范围

<scope>application</scope>

测试服务类

package net.ruixin.webservicedemo;

import java.net.MalformedURLException;

import org.codehaus.xfire.XFireFactory;

import org.codehaus.xfire.client.XFireProxyFactory;

import org.codehaus.xfire.service.Service;

import org.codehaus.xfire.service.binding.ObjectServiceFactory;

public class HelloWorldClient {

??? ??? public static void main(String args[]) {

??????? ???? Service srvcModel = new ObjectServiceFactory()

??????????????? ? .create(IHelloWorldService.class);

XFireProxyFactory factory = new XFireProxyFactory(XFireFactory

?????????????? ?.newInstance().getXFire());

String helloWorldURL = "http://localhost:5200/xfire_sample/services/HelloWorldService";

??????? ???? try {

??????????? ???? IHelloWorldService srvc = (IHelloWorldService) factory.create(

??????????????????? srvcModel,helloWorldURL);

??????????? ???? System.out.print(srvc.sayHello("dennis"));

??????? ???? } catch (MalformedURLException e) {

??????????? e.printStackTrace();

??????? ???? }

}

}

客户端访问代码

发布服务

XFire 框架中,我们有两种方式将 POJO 发布成 Web 服务:

方式1:一种方式是直接使用 Web 服务接口和 Web 服务实现类(POJO)来发布;

<beans xmlns="http://xfire.codehaus.org/config/1.0">

<service>

??????? <name>HelloWorldService</name>

??????? <serviceClass>

??????????? net.rubyeye.webservicedemo.IHelloWorldService

??????? </serviceClass>

??????? <implementationClass>

??????????? net.rubyeye.webservicedemo.HelloWorldServiceImpl

??????? </implementationClass>

??????? <style>wrapped</style>

??????? <use>literal</use>

??????? <scope>application</scope>

</service>

</beans>

方式2:另一种方式是基于 JSR181 标准和注释技术将被注释的 POJO 发布成 Web 服务;

package com.test;

import javax.jws.WebMethod;

import javax.jws.WebParam;

import javax.jws.WebResult;

import javax.jws.WebService;

@WebService(name="Hello",serviceName="Hello",

?????? targetNamespace="http://www.oksonic.cn/xfire")

public class Hello {

??? ??? @WebMethod

??? ??? @WebResult

??? ??? public String getName(@WebParam String name){

??? ?????? return "Hello world " + name;

??? ??? }

}

<beans xmlns="http://xfire.codehaus.org/config/1.0">

??? <service>

?????? <serviceClass>com.test.Hello</serviceClass>

?????? <serviceFactory>jsr181</serviceFactory>

??? </service>

</beans>

完整的开发过程

首先打开Eclipse,创建一个普通的java工程,将xfire所需的jarxfirejar加入到工程所需的类库引用中。
创建一个简单的java文件,这个java文件简单到只提供一个add方法。
package com.kuaff.xfire.samples;
public class MathService {
? public long add(int p1,int p2)?{
? ? return p1 + p2;?
? ?}
}

src目录下创建META-INF/xfire目录,然后在META-INF/xfire目录下创建services.xml文件,文件内容为:
<beans xmlns="http://xfire.codehaus.org/config/1.0">
<service>
? <name>MathService</name>
? <namespace>
http://www.kuaff.com/xfire/samples/MathService</namespace>
? <serviceClass>com.kuaff.xfire.samples.MathService</serviceClass>
</service>
</beans>

这个文档定义了你要发布的web服务,这个定义了一个名为MathService的服务,服务类为com.kuaff.xfire.samples.MathService
这样我们的一个简单的web服务就开发完成了,下面就要把它发布出去。
将工程bin目录下的所有的文件复制到第一节中配置的tomcat/webapps/xfire/WEB-INF/classes文件夹下,启动tomcat,你就可以检查这个web服务是否发布成功了。
打开浏览器,在浏览器地址栏中输入http://localhost:8080/xfire/services/,正常情况下应该浏览器应该显示类似下图所示的页面。
注意:请在浏览器中输入http://localhost:8080/xfire/services/而不是http://localhost:8080/xfire/services,虽然两者显示的页面相同,但是点击页面上的链接,后者的链接会出错,因为后者后面少加了一个“/”
点击[wsdl]链接,可以查看这个web服务的wsdl文档。
如果在你的机器上的显示如上面所示,则说明你的这个web服务发布成功,可以正常提供基于httpweb服务。
下面一个问题就是如何开发一个Client,来消费(使用)这个web服务。
XFire
Axisasp.net以及其它的一些商业产品都提供了根据wsdl文档创建客户端代码的工具。这里采用Xfire提供的wsgen工具来创建客户端的访问代码。
Wsgen
xfire提供的一个ant tasktask的申明如下:
<taskdef name="wsgen" classname="org.codehaus.xfire.gen.WsGenTask" classpathref="xfire
jar路径" />
这样,就可以在build.xml文件中使用这个task
<wsgen outputDirectory="client" wsdl="MathService.wsdl" package="com.kuaff.xfire.samples" />
outputDirectory
属性定义创建的代码所在的文件夹,wsdlweb服务的wsdl文件,package代表创建的代码的packege。还可以通过binding属性制定bind类型:jaxb或者是xmlbeans
这样,就会在client文件夹下创建多个java文件,这些文件提供了访问web服务的方法。
在这里声明一点,创建的代码大量的使用了java注释,这个JSE5中提供的新特性,所以你需要使用JSE5编译,Eclipse也必须要3.1以上的版本。
这段ant脚本将创建三个文件:MathServicePortTypeMathServiceImplMathServiceClientMathServicePortType是这个web服务的客户端接口存根、MathServiceImpl实现了这个接口。MathServiceClient封装了访问这个web服务的方法。
最后,你可以创建一个单元测试类,用来测试这个客户端类。这个类的内容如下:
package com.kuaff.xfire.samples;
import junit.framework.TestCase;
public class MathServiceClientTest extends TestCase {?
???public void testAdd()? {
? ? MathServiceClient client = new MathServiceClient();
? ? MathServicePortType ms = client.getMathServiceHttpPort();
? ? long result = ms.add(10,20);
? ? assertEquals(result,30);?
? }
}

?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读