`

AXIS之一:AXIS技术的一个问题

 
阅读更多

前天做技术交流,有一位同仁针对下面的一段AXIS客户端代码提出了这样的问题:QName qname=new QName("SparePartDetails","SparePartBean");这2个参数是什么意义?

 

String endpointURL = "http://localhost:8080/ws/services/SparePartService";
String methodName = "getSparepart";

Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(new java.net.URL(endpointURL));
call.setOperationName(new QName("SparePartService", methodName));

call.addParameter("sku", XMLType.XSD_STRING, ParameterMode.IN);

QName qname = new QName("SparePartDetails", "SparePartBean");
Class cls = org.bluebear.ws.advanced.customdatatype.SparePartBean.class;
call.registerTypeMapping(cls, qname, BeanSerializerFactory.class, BeanDeserializerFactory.class);
call.setReturnType(qname);

Object[] params = new Object[] { "222222" };
SparePartBean spBean = (SparePartBean) call.invoke(params);

System.out.println(spBean);

 

当时有的同仁回答说是根据WSDD中的beanMapping中的定义来确定的。这句话本身没有错,可是如果Service是.Net的语言写的呢?或者Service不是通过AXIS来发布的呢?是否也有WSDD?

 

<service name="SparePartService" provider="java:RPC">
    <parameter name="className"
               value="org.bluebear.ws.advanced.customdatatype.service001.SparePartService" />
    <parameter name="allowMethods" 
               value="getSparePart" />
    <beanMapping qname="blueBearNS:SparePartBean"
                 xmlns:blueBearNS="SparePartDetails"
                 languageSpecificType="java:org.bluebear.ws.advanced.customdatatype.SparePartBean" />
</service>

 

这个问题存留于我的脑海中。对于客户端而言,只是需要知道如何将返回的SOAP XML 信息转换成相应的JavaBean就可以了。对于Service而言,只是需要将JavaBean转换成SOAP XML。所以客户端的代码应该和SOAP XML一致。为此我特地研究了2个方面的问题:

1. QName的Constructor

/**
     * <p><code>QName</code> constructor specifying the Namespace URI
     * and local part.</p>
     *
     * <p>If the Namespace URI is <code>null</code>, it is set to
     * {@link javax.xml.XMLConstants#NULL_NS_URI
     * XMLConstants.NULL_NS_URI}.  This value represents no
     * explicitly defined Namespace as defined by the <a
     * href="http://www.w3.org/TR/REC-xml-names/#ns-qualnames">Namespaces
     * in XML</a> specification.  This action preserves compatible
     * behavior with QName 1.0.  Explicitly providing the {@link
     * javax.xml.XMLConstants#NULL_NS_URI
     * XMLConstants.NULL_NS_URI} value is the preferred coding
     * style.</p>
     *
     * <p>If the local part is <code>null</code> an
     * <code>IllegalArgumentException</code> is thrown.
     * A local part of "" is allowed to preserve
     * compatible behavior with QName 1.0. </p>
     *
     * <p>When using this constructor, the prefix is set to {@link
     * javax.xml.XMLConstants#DEFAULT_NS_PREFIX
     * XMLConstants.DEFAULT_NS_PREFIX}.</p>
     *
     * <p>The Namespace URI is not validated as a
     * <a href="http://www.ietf.org/rfc/rfc2396.txt">URI reference</a>.
     * The local part is not validated as a
     * <a href="http://www.w3.org/TR/REC-xml-names/#NT-NCName">NCName</a>
     * as specified in <a href="http://www.w3.org/TR/REC-xml-names/">Namespaces
     * in XML</a>.</p>
     *
     * @param namespaceURI Namespace URI of the <code>QName</code>
     * @param localPart    local part of the <code>QName</code>
     *
     * @throws IllegalArgumentException When <code>localPart</code> is
     *   <code>null</code>
     *
     * @see #QName(String namespaceURI, String localPart, String
     * prefix) QName(String namespaceURI, String localPart, String
     * prefix)
     */
    public QName(final String namespaceURI, final String localPart) {
        this(namespaceURI, localPart, XMLConstants.DEFAULT_NS_PREFIX);
    }

从上面的解释中可以看出,QName的Constructor第一个参数是XML的namespace,第二个参数是该namepace下的一个名字。所 以对于客户端的代码而言,QName qname=new QName("SparePartDetails","SparePartBean");所定义的这两个参数第一个是SparetDetails是 namespace,第二个SparePartBean是JavaBean转成XML,在XML中的名字。这个问题在Web Service中的WSDL中得到了验证。

 

2. WSDL代码
通过地址:http://localhost:8080/ws/services/SparePartService?wsdl ,即可看到。其中在wsdl:types节点的信息如下:

<wsdl:types>
  <schema targetNamespace="SparePartDetails" xmlns="http://www.w3.org/2001/XMLSchema">
   <import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
   <complexType name="SparePartBean">
    <sequence>
     <element name="description" nillable="true" type="soapenc:string"/>
     <element name="price" type="xsd:float"/>
     <element name="sku" nillable="true" type="soapenc:string"/>
    </sequence>
   </complexType>
  </schema>
 </wsdl:types>

其中详细描述了SparePartDetails namespace下面存在一个因为SpartPartBean的XML 数据类型。这里详细描述了当JavaBean转成XML的时候,XML的数据结构。

 

结论:
     位于AXIS Service的WSDD中的beanMapping规定了Service JavaBean转成XML的时候,XML代码所必须的的namespace和名字。当客户端接到SOAP XML代码时,必须使用那个namespace和名字才能将相应的XML代码转成JavaBean。所以客户端的代码的确只是和SOAP XML相关。

 

 

 

 

分享到:
评论

相关推荐

    axis1.1所需全部jar

    Axis是一个开源的、基于Java的Web服务工具包,它允许开发者创建、部署和使用Web服务。这个压缩包包含了一系列必要的库文件,这些文件对于开发和运行基于Axis的Web服务至关重要。 描述中提到,“webservic开发引擎...

    Axis实践之Axis入门

    2. **解压Axis**:下载的ZIP文件(如axis-bin-1_4.zip)应解压缩到一个不含中文名称的文件夹,以避免可能出现的编码问题。例如,将文件解压至F:\AXIS_Study。 解压后,你会看到以下目录结构: - docs:包含各种文档...

    apache axis-1.7.9

    Apache Axis2是Apache软件基金会开发的一个开放源代码Web服务框架,用于构建和部署高效、可扩展的Web服务。它基于Axis1.x进行重大改进,提供了更强大的功能和更好的性能。在"apache axis-1.7.9"这个版本中,我们获取...

    SpringBoot开发WebService之Axis示例

    而 Axis 是一个流行的Apache项目,用于创建和部署Web服务,它提供了强大的SOAP处理能力。通过整合SpringBoot与Axis,我们可以快速构建高效且易于维护的Web服务。 首先,让我们了解什么是SpringBoot。SpringBoot是...

    Apache Web Services Axis2(1.4.1) 详细经典入门实例图文并茂

    Apache Axis2是Apache软件基金会开发的一个用于构建Web服务和实现Service-Oriented Architecture (SOA)的核心框架。本文将深入探讨Axis2 1.4.1版本的经典入门实例,通过Eclipse集成开发环境中的Axis2插件,帮助你...

    axis完整jar包共10个 费了很大劲收集的呀

    Axis是Apache软件基金会开发的一个开源项目,主要用于构建和部署Web服务。这个压缩包包含了完整的Axis库,一共10个jar文件,这表明它可能包含了Axis的主要组件和必要的依赖库。在Java开发中,特别是涉及到Web服务时...

    Axis_API和axis2_API

    Axis是Apache软件基金会的一个开源项目,它为开发SOAP Web服务提供了强大的支持。Axis提供了简单的命令行工具,允许开发者快速地创建服务端点,并且可以方便地与JavaBeans或EJBs集成。Axis的核心特性包括WSDL(Web...

    eclipse java axis2

    Eclipse Java Axis2 是一个基于Java的Web服务开发框架,由Apache软件基金会开发。它主要用于构建和部署SOAP(简单对象访问协议)Web服务。在Java环境中,Eclipse作为流行的集成开发环境(IDE),提供了强大的支持来...

    axis.jar源码

    1. org.apache.axis:该包是整个框架的基础,包含了处理消息、配置、模块管理等核心组件。如AxisEngine负责消息的处理,MessageContext存储了消息处理的相关上下文信息。 2. org.apache.axis.client:这个包主要...

    axis 1.x与axis2.x开发

    相比之下,Axis2.x是一个重大的重构和升级,它引入了许多新特性。Axis2.x基于AXIOM(Abstract XML Information Model)和Axiom组件,提供了更高效的消息处理机制。AXIOM是一个高性能的XML信息模型,允许对XML数据...

    axis1.4和axis2相关jar文件

    **Axis1** 是最初的版本,发布于2003年,它基于SOAP 1.1规范,提供了一个快速开发Web服务的框架。Axis1使用JavaBeans Activation Framework (JAF) 和JavaMail API来处理消息传递。其核心特性包括: 1. **SOAP支持**...

    axis2-1.7.7-bin.zip下载

    1. **核心库**:Axis2的核心库包含了一系列JAR文件,如`axis2-adb.jar`, `axis2-aar.jar`, `axis2-kernel.jar`等,这些库提供了处理SOAP消息、解析WSDL(Web Service Description Language)和执行Web服务操作的基础...

    axis2发布webServices的两种方式

    在IT行业中,Axis2是一个广泛使用的开放源代码Web服务框架,它是Apache软件基金会下的一个项目,主要用于构建和部署Web服务。本文将详细讲解利用Axis2发布Web服务的两种主要方式,以及它们各自的优缺点。 首先,...

    axis2-1.6.2

    axis2-1.6.2.zip, windows axis2工具,根据 WSDL...在D:\Work_Program_Files\axis2-1.6.2\bin目录有一个wsdl2java.bat文件; 3、设置环境变量,加入AXIS2_HOME=&lt;Axis2客户端安装目录&gt;,path中追加;%AXIS2_HOME%\bin

    axis2解决 org.apache.axis2.util.JavaUtils.callStackToString问题

    Apache Axis2 是一个著名的Web服务引擎,用于处理SOAP消息,它是Apache SOAP项目的后续产品。在开发基于Axis2的Web服务时,可能会遇到各种错误和异常,其中之一就是与`org.apache.axis2.util.JavaUtils....

    axis2常见异常总结

    Axis2 是一个流行的WebService框架,它提供了许多功能强大且灵活的特性。然而,在实际使用中,我们经常会遇到各种异常问题。下面我们将总结 Axis2 中的一些常见异常问题及其解决方法。 1. Jar 包或文件夹下的类成员...

    ApacheAxis系统架构及Axis设计基本原理.pdf

    Apache Axis 是一个基于 Java 的 SOAP 服务器和客户端框架,提供了一个灵活的架构来实现 Web 服务。 Axis 系统架构由多个协同工作的子系统组成,每个子系统负责不同的任务。下面是 Axis 系统架构的概览: 1. ...

    axis2 soap技术

    - **微服务架构**:随着微服务架构的流行,Axis2也成为了实现服务间通信的一个重要工具。 - **跨平台服务**:由于SOAP协议的通用性,Axis2可以在不同的操作系统和编程语言之间提供无缝的服务交互。 综上所述,Axis2...

    Axis搭建一个简单的web工程

    在本文中,我们将深入探讨如何使用Axis来构建一个简单的Web工程,其中包括创建一个Web服务,该服务能接收两个数字并返回它们的和。Axis是一个流行的Java Web服务框架,它允许开发者轻松地实现跨平台和跨语言的互操作...

Global site tag (gtag.js) - Google Analytics