开发JAX-RPC Web服务
JAX-RPC Web服务是同步的服务,就是说,每当客户端调用一个JAX-RPC Web 服务操作的时候,它总会接收到一个SOAP响应,即使实现操作的方法返回的是空值。关于Web服务操作的更多信息,请参见"Web 服务中使用的消息模型。"。
部署在Sun ONE应用服务器上的Web服务可以被任何类型的客户端访问,比如任何充当客户端角色的J2EE组件,任何基于J2SE的客户端,或者.net客户端。
以下步骤讲述了利用Java接口及其实现创建JAX-RPC Web服务的过程:
1. 定义一个代表服务远程接口的类,即服务的终端接口。该类包含了可能被客户端调用的服务方法的声明。服务终端接口扩展了java.rmi.Remote接口,而且它的方法必须抛出java.rmi.RemoteException。下面的代码演示了服务终端接口的创建。
package hello;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface HelloIF extends Remote{
public String sayHello(String S) throws RemoteException;
}
在上面的代码示例中,程序包文件的名称是hello,服务定义接口是HelloIF.java。
服务接口部署在实现了JAX-RPC运行时系统的容器中。
2. 编写服务实现类。服务实现类是一个普通的java类。调用在servlet容器中进行。下面的代码示例演示了如何编写服务实现类。
package hello;
public class HelloImpl implements HelloIF {
public String message = "Hello";
public String sayHello(String S) {
return message + S;
}
}
3. 为了处理客户端和服务终端之间的通讯,JAX-RPC在客户端和服务器端需要多个类、接口、和其他文件。Sun ONE应用服务器中的JAX-RPC实现提供了wscompile工具来生成这些部件。
Wscompile工具使用配置文件config.xml为生成客户端和服务器端部件读取接口和实现类。Wscompile工具还为服务创建了WSDL描述。
例子的配置文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<configuration
xmlns="http://java.sun.com/xml/ns/jax-rpc/ri/config"> <service name="HelloWorld"
targetNameSpace="http://hello.org/HelloWorld.wsdl"
typeNameSpace="http://hello.org/hello/type"
packageName="hello">
<interface name="hello.HelloIF"
servantName="hello.HelloImpl"/>
</service>
</configuration>
关于配置文件的信息,请参见"配置文件"。
关于用于创建配置文件的XML schema的信息,请参见"XML Schema定义"。
下面是运行wscompile工具的语法:
wscompile -gen:both -d build/client -classpath build/shared config.xml
Stub和tie是wscompile工具生成的最重要的部件。Stubs和tie是使服务终端和客户端能够进行通讯的类。Stub类位于客户端,处在服务终端和JAX-RPC客户端运行时系统之间。Stub类负责把JAX-RPC服务客户端请求转换成SOAP消息并且利用特定的协议发送到服务终端。它也把按照SOAP消息格式接收到的服务终端响应转换成客户端需要的格式。转换客户端请求到SOAP格式称为编组,把SOAP格式反过来转换成客户端响应称为反编组。
类似地,tie类位于服务器端,处在服务终端和JAX-RPC运行时系统之间。Tie类处理数据在服务终端类和SOAP格式之间的编组和反编组。Stub是为服务终端充当代理的本地对象。
可以使用一个ant编译文件(build.xml)来编译服务,生成服务器端部件并创建可移植的war文件。可在以下位置找到一个示例build.xml文件。
install_dir/samples/webservices/jaxrpc/simple/src
关于创建build.xml文件的更多信息,请看"创建 build.xml 文件"。
4. 组装并且部署服务到Sun ONE应用服务器。请参见"组装并部署JAX-RPC Web服务".。
5. 编写调用服务的客户端应用程序。请参见"调用JAX-RPC Web服务".
使用WSDL的JAX-RPC Web服务
可以使用已有的WSDL文件创建JAX-RPC Web服务。在该方法中,wscompile工具利用WSDL生成服务定义接口。WSDL端口类型被映射为Java服务定义接口。要从WSDL生成服务接口,可以使用-import选项来执行wscompile工具,并以WSDL文件的存放位置作为参数。或者,你可你在名为config.xml的配置文件中存储生成服务定义接口所必需的信息。config.xml中一般存储了项要访问的WSDL所在的位置。
下面的wscompile命令读取config.xml,从而生成服务定义接口:
wscompile -gen:server -import <config.xml>
包含了WSDL文件的配置文件具备以下格式:
<?xml version="1.0" encoding="UTF-8"?>
<configuration xmlns="http://java.sun.com/jax-rpc-ri/xrpcc-config">
<wsdl location="[1]"
packageName="[2]">
<typeMappingRegistry>[3] </typeMappingRegistry>
</wsdl>
</configuration>
包含了WSDL文件的配置文件具备以下属性:
wsdl location – 指向WSDL文件的URL。
packageName – 为生成类/接口指定一个完全符合规定的名字Java程序包名称。
typeMappingRegistry – 该服务用到的类型映射注册中心。
关于用于建立配置文件的XML schema的信息,请参见"XML Schema定义"。
下面的代码是一个示例配置文件,位于:install_dir/samples/webservices/jaxrpc/simple
<?xml version="1.0" encoding="UTF-8"?>
<configuration xmlns="http://java.sun.com/xml/ns/jax-rpc/ri/config">
<wsdl location="HelloWorld.wsdl"
packageName="samples.webservices.jaxrpc.simple"/>
</configuration>
生成服务接口之后,请执行"开发JAX-RPC Web服务".这一节中的步骤2到步骤5。