中国   |  热线电话:800-810-3786

如何购买  |  My Sun  |  各地网站

        

  

 

 

 

Table of Contents Previous Chapter Next Chapter


调用
EJB的JAX-RPC客户端


本节讲述了能够调用应用服务器中EJB的JAX-RPC客户端的创建过程。


注意

本指导仅适用于在J2EE 1.3.1环境下开发JAX-RPC服务的情况。


调用EJB的主要步骤如下:

1. 创建一个会话bean。请参见Sun ONE应用服务器开发人员企业Java Bean指南,从而获得创建无状态会话bean的详细指导。

2. 创建一个执行查找EJB操作的web服务。以下代码示范了web服务应用程序在典型情况下如何调用EJB。

    public String sayHello(String name) {

    Context initial = new InitialContext();
    Context myEnv = (Context)initial.lookup("java:comp/env");
    Object objref = myEnv.lookup("ejb/SimpleGreeting");
    GreetingHome home = (GreetingHome)PortableRemoteObject.narrow(objref,GreetingHome.class);

    }

3. 创建一个远程调用JAX-RPC服务的客户端。以下代码是远程调用EJB的客户端的例子。

    package samples.webservices.jaxrpc.toejb.client;

    import javax.naming.Context;
    import javax.naming.InitialContext;
    import javax.rmi.PortableRemoteObject;
    import samples.webservices.jaxrpc.toejb.ejb.*;

    public class GreetingClient {

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

    Context initial = new InitialContext();
    Context myEnv = (Context)initial.lookup("java:comp/env");
    Object objref = myEnv.lookup("ejb/SimpleGreeting");

    GreetingHome home = (GreetingHome)PortableRemoteObject.narrow(objref,GreetingHome.class);

    Greeting salutation = home.create();

    System.out.println(salutation.sayHey("Buzz"));

    System.exit(0);

    } catch (Exception ex) {

    System.err.println("Caught an unexpected exception!"); ex.printStackTrace(); }

    } // main

4. 组装服务和客户端,请参见"组装并部署JAX-RPC Web服务""组装并部署JAX-RPC客户端".

5. 通过执行以下步骤部署会话bean:

  • 编辑配置描述文件(ejb-jar.xml和sun-ejb-jar.xml).
  • 执行ant编译命令(就像创建jar文件)来组装JAR模块。
  • 使用asadmin部署工具命令部署JAR模块。例如,以下命令部署EJB应用成为一个单独模块:

    asadmin deploy --type ejb --instance inst1 myEJB.jar

6. 部署JAX-RPC服务。请参见"组装并部署JAX-RPC Web服务"

7. 使用asant命令运行JAX-RPC客户端。

asant run

JAX-RPC Web服务中创建安全性


本节讲述为JAX-RPC服务应用程序提供安全性的过程,主要是通过应用HTTP/SSL到基本和交互认证,从而为容纳应用的web容器提供安全性来实现。关于认证的更多信息,请参见Sun ONE应用服务器开发人员web应用指南。

为了给HTTP/S 基本和交互认证配置JAX-RPC web服务终端,必须执行以下步骤:

  • 使用作为J2SE SDK 一部分的keytool生成证书和击键密码。
  • 向sun-web.xml配置描述文件中添加安全元素
  • 在客户端代码中添加一些属性
  • 编译并且运行web服务

基于SSL的基本认证

以下是为基于HTTP/S的基本认证配置Web service的步骤:

1.配置一个证书并且在服务器的HTTP监听上启动SSL。关于配置证书和在HTTP上启动SSL的更多信息,请分别参见Sun ONE应用服务器管理员安全手册中的“管理证书”和“启动安全”两节。

HTTP客户端在SSL握手验证服务器证书的时候,使用一系列的可信证书授权(CA)。证明服务器CA是客户端的可信CA,是非常重要的。

2.对于基于J2SE 1.4的客户端,其中包括基于JSSE的客户端,例如web服务应用程序,你需要导入服务器CA的证书到JSSE cacerts 数据库。请使用命令行工具keytool来导入可信的CA证书。

以下代码示范了如何导入CA的证书到基于J2SE的客户端的可信CA数据库。

    keytool -import -v -alias "CMS-CA" -file cmsca.cer -keystore cacerts

关于如何使用keytool,可以用-help选项运行keytool,或者参阅以下网址:

http://java.sun.com/products/jdk/1.2/docs/tooldocs/solaris/keytool.html

3.        输入密码库密码:changeit

Owner: CN=Certificate Manager, OU=AppServices, O=Sun Microsystems, L=SCA, ST=California, C=US
Issuer: CN=Certificate Manager, OU=AppServices, O=Sun Microsystems, L=SCA, ST=California, C=US
Serial number: 1
Valid from: Mon Jun 03 12:00:00 PDT 2002 until: Thu Jun 03 12:00:00 PDT 2004
Certificate fingerprints:
MD5: 6C:8D:A6:E4:55:52:1A:FF:9D:19:44:D7:0F:62:66:95
SHA1:89:B1:0E:7E:8F:56:B2:34:65:46:15:86:53:7E:3E:6B:4F:9D:84:63
Trust this certificate? [no]: yes
Certificate was added to keystore
[Saving cacerts]

4. 配置服务器实例使用合适的域,并且确认该域中包括了你允许访问web服务的用户。

例如,为了配置一个扁平文件用户,请在管理界面中执行以下步骤:

  • 选择server instance并且点击左边面板中的Security节点。
  • 在右边面板中为Default Realm选择下拉框,并且选中"file"选项。
  • 在左侧面板中选择Realms,通过点击file realm把用户加入到文件域中。
  • 使修改生效。现在,服务器的扁平文件用户数据库就可以被使用了。

关于配置服务器实例从而使用域的详细信息,请参考Sun ONE 应用服务器管理员指南。

web.xml添加安全元素

为web应用激活基本认证并指定一个约束进行强制认证。关于web.xml中安全元素的更多信息,请参见Sun ONE 应用服务器开发人员web应用指南。

这里有一个为web服务的基于servlet的终端配置基本认证的例子。这个安全约束使主要用户名称具备了"ServiceUser"角色,该角色在sun-web.xml文件中被映射为用户”bob”。

    The WEB-INF/web.xml:

    <security-constraint>

       ....
       <web-resource-collection>
          <web-resource-name>SecureHello</web-resource-name>
          <url-pattern>/security</url-pattern>
          <http-method>GET</http-method>
          <http-method>POST</http-method>
       </web-resource-collection>

       <auth-constraint>
          <role-name>manager</role-name>

          </auth-constraint>

    </security-constraint>

    <login-config>

       <auth-method>BASIC</auth-method>

    </login-config>

    The WEB-INF/sun-web.xml:

    <sun-web-app>
    <security-role-mapping>

       <role-name>ServiceRole</role-name> <principal-name>bob</principal-name>

    </security-role-mapping>
    </sun-web-app>

5. 为基于J2SE的客户端设置安全属性。想得到逐步指导,请参见"在客户端代码中设置安全属性"

在客户端代码中设置安全属性

为了实现基于SSL的基本认证,客户端代码必须设定一些安全相关的属性。

TrustStore属性

客户端象下面这样设置trustStore属性:

    System.setProperty("javax.net.ssl.trustStore", trustStore);

trustStorePassword 属性

trustStorePassword属性是J2SE SDK 密码库的密码。在上一节,运行keytool的时候指定了默认密码changeit。客户端在下面的代码实例中设置trustStorePassword属性:

    System.setProperty("javax.net.ssl.trustStorePassword", trustStorePassword);

Username和Password 属性

Username和Password属性对应管理员角色。客户端象下面这样设置Username和Password属性。

    stub._setProperty(javax.xml.rpc.Stub.USERNAME_PROPERTY, username);
    stub._setProperty(javax.xml.rpc.Stub.PASSWORD_PROPERTY, password);

基于SSL的交互认证

想要配置并创建具备交互认证的JAX-RPC服务,请执行"基于SSL的基本认证".中的步骤,然后执行下面的步骤:

1.以下代码示范了如何导出客户端证书

    $Java_home/bin/keytool -export -alias -client -storepass changeit -file client.cer -keysnttore client.keystore

2.导入客户端证书到服务器的密码库

    $Java_home/bin/keytool -import -v -trustcacerts -alias -client -file client.cert -keystore server.keystore -keypass changeit -storepass changeit

3.使用asant工具运行应用程序

asant run

Web服务设置客户端证书认证

本节讲述了如何配置利用Sun ONE应用服务器使用了客户端证书认证的web服务。


注意

对于客户端,想要使用HTTPS,请执行下面的步骤1-6。


1.  执行"基于SSL的基本认证".一节中的第一和第二步。

2.   对于基于J2SE的客户端,使用keytool为客户端证书生成密码对。密码对存储在密码库中。以下代码行示范了如何生成密码对。

> keytool -genkey -v -alias clcert -dname 'CN=Test User, OU=testOU, O=testO, L=SCA, S=California, C=US'\

   -keystore clcerts -keypass changeit

执行命令,显示出如下信息:

    Generating 1,024 bit DSA key pair and self-signed certificate (SHA1WithDSA)

    for: CN=Test User, OU=testOU, O=testO, L=SCA, ST=California, C=US

    Enter key password for <clcert1>

       (RETURN if same as keystore password):
    [Saving clcerts]

    3.   Generate a certificate request to be sent to a trusted CA. Use the following keytool command to generate a certificate request:

生成一个将要发送到可信CA的证书请求。使用如下的keytool命令生成证书请求:

    >keytool -certreq -v -alias clcert -file clreq -keystore clcerts

输入密码库的密码:changeit

证书请求存储在文件:clreq中

把这个提交给CA

>more clreq

该命令生成以下消息:

    -----BEGIN NEW CERTIFICATE REQUEST-----

    MIICazCCAigCAQAwZTELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExDDAKBgNVBAcT
    A1NDQTEOMAwGA1UEChMFdGVzdE8xDzANBgNVBAsTBnRlc3RPVTESMBAGA1UEAxMJVGVzdCBVc2Vy

    ..

    GqdqJvx+mVcgcQkdzap+ykIEcOZ/qQq60rPddF6yK9wnWkez32Y2btGWe598oAAwCwYHKoZIzjgE AwUAAzAAMC0CFQCPf7TuJLJ+zS/HH+fCcKnFAtmKYwIUZM10c56KrScgledImxGzLIKMsGE=

    -----END NEW CERTIFICATE REQUEST-----

4.   发送生成的证书请求到一个可信的CA并且请求一个签名证书。关于发送请求到CA的更多信息,请参见CA服务器管理文档。

你可以校验Base64 encoded X.509格式的返回签名文档。注意:该证书是链状的,就象由CA进行了签署。如果你使用pkcs7格式,keytool可能会抱怨证书不是X.509格式的。

    > keytool -printcert -v -file clcert.txt

    Certificate[1]:

    Owner: CN=Certificate Manager, OU=AppServices, O=Sun Microsystems, L=SCA, ST=Californa, C=US

    Issuer: CN=Certificate Manager, OU=AppServices, O=Sun Microsystems, L=SCA, ST=Califoria, C=US

    Serial number: 1

    Valid from: Mon Jun 03 12:00:00 PDT 2002 until: Thu Jun 03 12:00:00 PDT 2004

    Certificate fingerprints:

    MD5: 6C:8D:A6:E4:55:52:1A:FF:9D:19:44:D7:0F:62:66:95
    SHA1: 89:B1:0E:7E:8F:56:B2:34:65:46:15:86:53:7E:3E:6B:4F:9D:84:63

    Certificate[2]:
    Owner: CN=Test User, OU=testOU, O=testO, L=SCA, ST=California, C=US
    Issuer: CN=Certificate Manager, OU=iWSQA, O=Sun Microsystems, L=SCA, ST=Califoria, C=US

    Serial number: 19

    Valid from: Thu Sep 12 18:33:54 PDT 2002 until: Fri Sep 12 18:33:54 PDT 2003

    Certificate fingerprints:

    MD5: 82:09:8A:DC:E2:85:82:B5:56:98:93:81:97:A9:D5:32
    SHA1: 1D:7C:F2:F2:ED:79:A3:62:0A:A2:1B:22:74:11:BF:52:CB:8D:9E:BB

5.   用签名证书更新密码库。

    > keytool -import -v -trustcacerts -alias clcert -file clcert.txt -keystore clcerts -keypass changeit

显示如下信息:

    Certificate was added to keystore

    [Saving clcerts]

6.   现在,你必须设置客户端Java虚拟机使用这样的密码库/密码:-Djavax.net.ssl.keyStore=<path-to/clcerts> and -Djavax.net.ssl.keyStorePassword.

如果你在<java>这个ant任务中运行客户端,你可以使用<sysproperty>元素指定密码库/密码。

例如:

    <sysproperty key="javax.net.ssl.keyStore"

    value="C:/security/clcerts"/>

    <sysproperty key="javax.net.ssl.keyStorePassword" value="changeit"/>

7.  为服务器实例激活证书域。

  • 在管理界面中,选择左侧面板中的server instance.
  • 点击Security节点并选中Default Realm to Certificate。

关于激活证书域的更多信息,请参见Sun ONE应用服务器管理员指南。

8.  编辑web.xml配置描述文件,配置Web服务应用程序使用CLIENT-CERT认证。

    security-constraint>

    <web-resource-collection>

          <web-resource-name>Protected Area</web-resource-name>
    <url-pattern>/*</url-pattern>
    <http-method>GET</http-method>
    <http-method>POST</http-method>

    </web-resource-collection>
    <auth-constraint>

             <role-name>TesterRole</role-name>

    </auth-constraint>

    </security-constraint>

    <login-config>

    <auth-method> CLIENT-CERT </auth-method>

    </login-config>

9.  编辑Sun ONE应用服务器指定的部署描述文件(sun-web.xml),映射角色到客户端证书的X.509 主用户名称的专有名称。

注释:DN distinguished name专有名称

    <?xml version="1.0" encoding="UTF-8"?>

    <!DOCTYPE sun-web-app PUBLIC '-//Sun Microsystems, Inc.//DTD Sun ONE Application Server 7.0 Servlet 2.3//EN'

    'http://www.sun.com/software/sunone/appserver/dtds/sun-web-app_2_3-0.dtd'

    <sun-web-ap>

    <security-role-mapping>

    <role-name>TesterRole</role-name>

    <principal-name>CN=Test User, OU=testOU, O=testO, L=SCA, ST=California, C=US</principal-name>

    </security-role-mapping>

    </sun-web-app>

10.或者,你可能想要设置一个可选的assign-groups属性,它可以被指定给所有证书用户所属的证书域配置。这使你可以向这个组名进行角色映射,而不必列出主用户名称的专有名称。

  • 在管理界面中,选择左侧面板中的server instance
  • 点击并展开Security节点和Realms节点
  • 点击certificate realm,并且在右侧面板中点击properties link,添加属性names cert-users,设定它的值为assign-groups。
  • 保存并使修改生效。server.xml反映了配置设定:

    <security-service>
    <auth-realm name="certificate" classname="com.iplanet.ias.security.auth.realm.certificate .CertificateRealm">
    <property value="cert-users" name="assign-groups"/>
    </auth-realm>
    </security-service>

关于配置证书域的更多信息,请参见Sun ONE应用服务器管理员指南。

11.   重新启动服务器并运行客户端检验客户端证书认证的工作情况。

JAX-RPC工具


Sun ONE应用服务器的JAX-RPC实现包括了下面的工具帮助进行JAX-RPC客户端的开发

wscompile工具

Wscompile是一个捆绑在Sun ONE应用服务器中的映射工具,用来生成stub、tie、serializer、以及其他部件。你还可以使用这个工具根据服务终端定义生成WSDL文档,或者根据WSDL文档生成服务终端定义。

你可以选择只生成客户端的部件,比如stub,或是服务器端的部件,比如tie,或者既生成客户端的也生成服务器端的部件。该工具读取含有必要信息的配置文件来生成部件。

wscompile命令的语法如下:

    wscompile [options] config_file_name

    wscompile命令选项

    The following table lists the options that you can use with the wscompile command. The first column specifies the option that you can use with the command, and the second column describes the option.

下表列出了可以和wscompile命令一起使用的选项。第一列给出了选项,第二列对其进行描述。

wscompile工具选项

  选项

描述

-gen:client

生成客户端部件,例如stub、服务接口、实现类、以及远程接口。

-gen:server

 生成服务器端部件,例如tie、服务器配置文件、WSDL文件、服务定义接口。如果你使用的是wsdeploy工具,千万不要使用该选项。

-gen:both

同时 生成客户端和服务器端部件

gen

 与gen:client作用相同

-define

 定义服务

-f:<features>/-features:<features>

激活列出的特性。特性之间用逗号分开。支持的特性包括:

datahandleronly – 总是把附件映射到数据处理者类型

explicitcontext – 打开外部服务映射上下文

infix=<name> - 为生成的serializer指定一个中缀

nodatabindings -为文字编码关闭数据绑定

noencodedtypes -关闭编码类型信息

nomultirefs -关闭多引用支持

novalidation -关闭对导入WSDL文件的校验

searchschema -查找schema中的图表类型

serializeinterfaces -关闭接口类型的直接servialization。

-classpath<classpath_string>

 指定输入类文件的路径

cp<classpath_string>

同classpath

-d<directory_name>

为所有生成文件设定输出目录

-s<directory>

 指定生成文件的保存路径

-g

 生成调试信息

-httpproxy:<host>:<port>

 指定HTTP代理服务器

-import

 生成接口和值类型

-keep

 编译完成后保留生成的.java文件

-model<file>

Write internal model to the file.

 向文件中写入内部模式

-nd<directory>

.

 指定存放非class生成文件的路径

-O

 优化生成的代码

-verbose

编译器执行后输出消息

-version

打印版本信息

-import, -gen, 和-define选项中的一个必须和wscompile命令一起使用。调用没有指定选项的wscompile命令会显示出使用信息。

配置文件

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>

      SOAP 处理者

      处理者访问代表一个RPC请求或响应的SOAP消息。处理者类必须实现javax.xml.rpc.handler接口。处理者能够用javax.xml.soap程序包中的API操纵SOAP消息。

      下面是处理者能够执行的任务举例:

      • 加密解密
      • 记录日志和审计
      • 缓冲
      • 针对特定应用的SOAP消息头处理
      • 处理者链条是一系列的处理者。你可以为客户端和服务器个指定一个处理者链条:在客户端,请在jaxrpc-ri.xml文件中包含<handlerChains> 元素,在服务器端,请在config.xml文件中包含该元素。

      下面是config.xml文件中<handlerChains>元素的一个例子:

        <handlerChains>
        <chain runAt="server"

        roles= "http://acme.org/auditing
                    http://acme.org/morphing"
            xmlns:ns1="http://foo/foo-1">

           <handler className="acme.MyHandler"

              headers ="ns1:foo ns1:bar"/>
              <property name="property" value="xyz"/>

           </handler>

           </chain>

        </handlerChains>

      JAX-RPC支持的Java语言类型


      JAX-RPC把Java编程语言类型映射到XML/WSDL定义。例如,JAX-RPC把java.lang.String类映射为xsd:string这个XML数据类型。作为应用程序开发人员,你需要了解这些映射的细节,但必须明白并不是所有Java 2 标准版 (J2SE)中的类都能够在JAX-RPC中被用作方法的参数和返回类型。

      J2SE SDK

      JAX-RPC支持以下这些J2SE SDK类:

      • java.lang.Boolean
      • java.lang.Byte
      • java.lang.Double
      • java.lang.Float
      • java.lang.Integer
      • java.lang.Long
      • java.lang.Short
      • java.lang.String
      • java.math.BigDecimal
      • java.math.BigInteger
      • java.util.Calendar
      • java.util.Date

      这个版本的JAX-RPC还支持几个java.util.Collection接口的实现类。下表显示了被支持的类。第一列列出了java.util.Collection的子接口,第二列列出了该子接口支持的类。

      支持的类

         java.util.collection子接口

      支持的类

      List

      Array List
      LinkedList
      Stack
      Vector

      Map

      HashMap
      Hashtable
      Properties
      TreeMap

      Set

      HashSet
      TreeSet

      基本类型

      JAX-RPC支持以下的Java编程语言基本类型:

      • boolean
      • byte
      • double
      • float
      • int
      • long
      • short

      数组

      JAX-RPC还支持成员是JAX-RPC支持类型的数组。例如支持数组int []和String []。而且还支持多维数组,例如BigDecimal [][]。

      应用程序类

      JAX-RPC还支持为应用程序编写的类。例如,在一个订单处理应用程序中你可能提供了名为Order、LineItem、和Product的类。JAX-RPC规范把这些类当作值类型引用,因为他们的值(或状态)可以在客户端与远程服务之间当作参数或返回值被传递。

      为了能被JAX-RPC支持,应用程序类必须符合以下规则:

      • 它必须拥有一个默认的构造函数。
      • 它必须没有实现(直接或者间接)java.rmi.Remote接口。
      • 它的成员必须是JAX-RPC支持类型。

      类中可能含有公共的、私有的、或是保护的成员。为了在远程调用中传递(或返回)它的值,该成员必须满足以下要求:

      • 公共成员不能是final或者transient类型的。
      • 非公共成员必须有相应的getter和 setter方法。

      JavaBeans组件

      JAX-RPC还支持JavaBean组件,它们必须符合与应用程序类相同的一系列规则。而且,JavaBean组件还必须为每个bean属性提供getter和setter方法。Bean属性的类型必须是JAX-RPC支持的类型。

Table of Contents Previous ChapterNext Chapter

Java专题

Solaris专题

SunONE专题

 

参考文献

共享代码

成功案例

白皮书

常见问答

下载中心

产品简介

 

考前自测

技术培训服务

技术认证方案

 

Java论坛

Solaris论坛

SunONE论坛

 

 

 

 

关于Sun公司  |   联系我们  |   使用条款  |   隐私政策  |   Copyright 1994-2003 Sun Microsystems