配置文件
Wscompile工具读取配置文件,其中包含了描述web服务的信息。配置文件的基本结构如下:
<?xml version="1.0" encoding="UTF-8"?>
<configuration
xmlns="http://java.sun.com/xml/ns/jax-rpc/ri/config">
<service> or <wsdl> or <modelfile>
</configuration>
如果在配置文件中使用<service>元素,wscompile工具会读取描述服务的RMI接口并生成WSDL文件。
如果在配置文件中使用< wsdl >元素,wscompile工具会读取服务的WSDL文件并生成服务的RMI接口。
如果配置文件中包含了一个<service>或 <wsdl> 元素,wscompile工具会生成一个模型文件,它包含了描述服务的内部数据结构。如果已经按照这种方式生成了一个模型文件,那么下一次运行wscompile工具的时候可以重用它。
关于用于创建配置文件的XML schema的信息,请参见"XML Schema定义"。
含有RMI接口的配置文件
<?xml version="1.0" encoding="UTF-8"?>
<configuration xmlns="http://java.sun.com/xml/ns/jax-rpc/ri/config">
<service name="[1]"
targetNamespace="[2]"
typeNamespace="[3]">
packageName="[4]">
<interface name="[5]"
servantName="[6]"
soapAction="[7]"
soapActionBase="[8]"/>
<typeMappingRegistry> [9] </typeMappingRegistry>
</service>
</configuration>
配置文件含有以下Web服务属性:
servicename -该属性用来生成一个被基于servlet的JAX-RPC运行时使用的属性文件,目的是分发请求到tie-和-servant结合处。
targetNamespace -该属性为生成的WSDL文件指定目标命名空间。
typeNamespace - 该属性为生成的WSDL文件的schema部分指定目标命名空间。
packageName -为生成的Java类指定包名称。例如,从javax.xml.rpc.Service扩展的服务接口。
interface name -指定完全符合规范的Java接口名称。
servantName -指定完全符合规范的伺服类名称。
soapAction -为相应端口所有操作指定的名为SOAPAction的字符串。这是一个可选项。
soapActionBase - 为相应端口所有操作的SOAPAction字符串指定的前缀。
typeMappingRegistry -指定类型映射信息。
注意
一个基本servlet类com.sun.xml.rpc.server.http.JAXRPCServlet被应用到所有的JAX-RPC终端。
包含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 – 为生成的类/接口指定一个完全符合规范的程序包名称。
typeMappingRegistry –确定映射信息的类型
wsdeploy 工具
wsdeploy工具为服务生成可部署的WAR文件。该工具把一个WAR 文件作为服务的输入。
Wsdeploy命令的语法如下:
wsdeploy [options] war file
wsdeploy命令选项
下表列出了可以和wsdeploy命令一起使用的选项。第一列给出选项,第二列对其进行了描述。
wsdeploy工具选项
选项
描述
-classpath<classpath_string>
指定输入类文件的路径
cp<classpath_string>
同classpath
-tmp<directory_name>
指定临时目录的路径
-o<output war file>
指定生成的WAR文件将要保存的路径。该选项是必须指定的。
-keep
编译完成之后保留生成的.java文件
-verbose
编译器执行后输出消息
-version
打印版本信息
war file-一般来说,你使用一个部署工具或是asant war任务来创建WAR文件。下面是一个简单的WAR文件的内容:
META-INF/MANIFEST.MF
WEB-INF/classes/hello/HelloIF.class
WEB-INF/classes/hello/HelloImpl.class
WEB-INF/jaxrpc-ri.xml
WEB-INF/web.xml
在例子中,HelloIF是服务的RMI接口,HelloImpl是实现接口的类。web.xml文件是web组件的配置描述文件。
Wsdeploy工具检查配置描述文件web.xml和jaxrpc-ri.xml,从而生成WAR文件。如果配置描述文件指定了一个模型文件,该模型文件的信息被用来生成WAR文件。如果配置描述文件没有指定一个模型文件,wsdeploy会生成一个模型。关于用于创建模型文件的XML schema的信息,请参见"XML Schema定义"。
在内部,wsdeploy工具使用-gen:server选项运行了wscompile工具。就是说,该工具生成了服务器端的附件,例如tie。该工具还能够生成服务终端定义,或是WSDL文件。
jaxrpc-ri.xml文件
jaxrpc-ri.xml文件是JAX-RPC实现的特定配置文件。wsdeploy工具读取这个配置文件。下面的代码列出了一个简单的HelloWorld服务的jaxrpc-ri.xml文件内容。
<?xml version="1.0" encoding="UTF-8"?>
<webServices
xmlns="http://java.sun.com/xml/ns/jax-rpc/ri/dd"
version="1.0
targetNamespaceBase="http://com.test/wsdl"
typeNamespaceBase="http://com.test/types"
urlPatternBase="/ws">
<endpoint
name="HelloWorld"
displayName="Hello Service"
description="A simple web service"
interface="samples.webservices.jaxrpc.dynamic.HelloIF"
implementation="samples.webservices.jaxrpc.dynamic.HelloImpl"/
<endpointMapping
endpointName="HelloWorld"
urlPattern="/dynamic"/>
</webServices>>
<webServices> 元素必须包含一个或者多个<endpoint>元素。注意,在这个例子中<endpoint>的接口和实现属性指定了服务的接口和实现类。<endpointMapping>绑定服务接口到一个代表URL路径的元素,该URL符合urlPatternBase。关于创建运行时描述文件的XML schema的信息,请参见"XML Schema定义"。
命名空间映射
本节的阅读对象是那些熟悉WSDL、 SOAP、和JAX-RPC规范的开发人员。
这里有一个schema类型名称的例子:
schemaType="ns1:SampleType"
xmlns:ns1="http://echoservice.org/types"
当从schema类型生成Java类型的时候,wscompile从schema类型名称的本地部分获取类名。
为了指定生成的Java类的包名称,你需要在schema类型命名空间和包名称之间定义一个映射。可以通过添加<namespaceMappingRegistry>元素到config.xml文件来定义这种映射。例如:
<service>
...
<namespaceMappingRegistry>
<namespaceMapping
namespace="http://echoservice.org/types" packageName="echoservice.org.types"/>
</namespaceMappingRegistry>
...
</service>