XFire 开发WebService

1. Dependences : XFire1.2 WebSite: http://xfire.codehaus.org/


2. 服务器端开发:
a) 服务器接口:HelloWorldService.java
package xfire.test;

/**
* HelloWorldService 中声明需要发布成 Web 服务的所有 Java 方法
* HelloWorldService 作为Web服务接口
*/
public interface HelloWorldService {

/**
* sayHello 方法声明了 Web 服务对外暴露的接口
*
* @return 返回给客户端的字符串
*/
public String say(String str);
}



b) HelloWorldService实现类:HelloWorldServiceImpl.java
package xfire.test;

/**
* HelloWorldServiceImpl 中为 Web 服务接口中声明的所有 Java 方法提供具体现 HelloWorldServiceImpl
* 作为 Web 服务的实现类
*/
public class HelloWorldServiceImpl implements HelloWorldService {

/*
* sayHello 方法为 HelloWorldService 服务接口定义的 sayHello 方法提供具体实现
*/
public String say(String name) {
return "你好:"+name;
}

}



c) 配置文件service.xml:放置在classpath:META-INF/xfire/service.xml
<beans xmlns="http://xfire.codehaus.org/config/1.0">
<service>
<name>HelloWorldService</name>
<namespace>http://allen.org/HelloWorldService</namespace>
<serviceClass>
xfire.test.HelloWorldService
</serviceClass>
<implementationClass>
xfire.test.HelloWorldServiceImpl
</implementationClass>
</service>
</beans>

Service.xml 配置文件模型:
<beans xmlns="http://xfire.codehaus.org/config/1.0">
<xfire>
<inHandlers>
<handler handlerClass=""></handler>
</inHandlers>
</xfire>

<service>
<name />
<namespace />
<serviceClass />
<implementationClass />
<serviceFactory />
<bindingProvider />
<style>document|rpc|message|wrapped</style>
<use>literal|encoded</use>
<scope>request|session|application</scope>
<invoker />
<executor />
<inHandlers>
<handler handlerClass="" />
</inHandlers>
<outHandlers>
<handler handlerClass="" />
</outHandlers>
<faultHandlers>
<handler handlerClass="" />
</faultHandlers>


<method name="" operationName="" soapAction=""
exclude="true|false">
<parameter name="qname" index="" class=""
header="true|false" mode="" />
</method>

<createDefaultBindings>true|false</createDefaultBindings>
<bindings>
<soap11Binding name="qname" transport=""
allowUndefinedEndpoints="">
<endpoints>
<endpoint name="qname" url="" />
</endpoints>
</soap11Binding>
<soap12Binding name="qname" transport=""
allowUndefinedEndpoints="">
<endpoints>
<endpoint name="qname" url="" />
</endpoints>
</soap12Binding>
</bindings>

</service>

</beans>



d) Web.xml 添加Servlet配置:
<servlet>
<servlet-name>XFireServlet</servlet-name>
<servlet-class>
org.codehaus.xfire.transport.http.XFireConfigurableServlet
</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>XFireServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>


若将以上部署到Servlet容器则访问地址:
http://serveraddress:port/项目名/services/ HelloWorldService?WSDL就会出现WSDL页面。
客户端根据这个WSDL暴露的服务器端提供的操作进行调用,所以任何可以处理WSDL的都可以用做客户端。

3. XFire作客户端
package xfire.test;

import java.net.MalformedURLException;

import org.codehaus.xfire.client.XFireProxyFactory;
import org.codehaus.xfire.service.Service;
import org.codehaus.xfire.service.binding.ObjectServiceFactory;

public class Client {

public static void main(String[] args) {
Service serviceModel = new ObjectServiceFactory().create(HelloWorldService.class);
try {
HelloWorldService service = (HelloWorldService) new XFireProxyFactory()
.create(serviceModel,"http://localhost:8080/XFire/services/HelloWorldService");
String sss = service.say ("赵本钱");
System.out.println(">>>" + sss);
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
}

使用JAX-WS2.1开发WebService

1. JAX-WS提供了两个很实用的工具:wsgen、wsimport
Wsgen根据开发的WebService类生成一些服务器端的辅助类
Wsimport根据WSDL文件生成客户端的代码
2. 服务器端的WebService代码
package org.allen;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;

@WebService(serviceName = "Hello")
public class Hello {

@WebMethod(operationName = "say")
public String say(@WebParam
String name) {
return "Hello " + name;
}
}

3. Javac –d . org.allen.Hello.java 编译类
Wsgen –cp . org.allen.Hello 生成如下文件:
Org.allen.jaxws.Say.java/class
Org.allen.jaxws.SayResponse.java/class

添加Main函数
public static void main(String[] args){
Hello hello = new Hello() ;
Endpoint.publish("http://localhost:9000/WS",hello) ;
}

然后访问http://localhost:9000/WS/Hello?WSDL可以获取发布的WSDL文件
剩余的工作可以用以前的XFire做客户端也可以用JAX-WS提供的方法
4. 使用JAX-WS提供的方法做客户端
wsimport -p org.allen.client http://localhost:9000/WS/Hello?WSDL
生成客户端所需要的文件
Hello.java
Hello_Service.java
ObjectFactory.java
package-info.java
Say.java
SayResponse.java

客户端业务逻辑代码:
Hello hello = new HelloService().getHelloPort() ;
System.out.println(hello.say(“Allen”)) ;

输出:
Hello Allen
评论
发表评论

您还没有登录,请登录后发表评论

allenBen
搜索本博客
博客分类
最新评论