在axis2中使用自定义wsdl文件 - 使用<xs:all>而不是<xs:sequence> </xs:sequence> </xs:all>时出现问题

时间:2010-11-28 14:29:10

标签: web-services soap null axis2 soapui

我正在使用axis2作为我的webservices。今天当我试图使用我自己的wsdl文件而不是axis2默认生成i观察者意外的行为时。详细说明。

这是原始的wsdl文件部分。

     <xs:element name="multiply">
            <xs:complexType>
                <xs:sequence>
                    <xs:element minOccurs="0" name="a" nillable="true" type="xs:string"/>
                    <xs:element minOccurs="0" name="b" nillable="true" type="xs:string"/>
                    <xs:element minOccurs="0" name="c" nillable="true" type="xs:string"/>
                </xs:sequence>
            </xs:complexType>
        </xs:element>

   I changed <xs:sequence> to <xs:all> so that i can send elements in any order in soap request.Below is the changed one.
        <xs:element name="multiply">
            <xs:complexType>
                <xs:all>
                    <xs:element minOccurs="0" name="a" nillable="true" type="xs:string"/>
                    <xs:element minOccurs="0" name="b" nillable="true" type="xs:string"/>
                    <xs:element minOccurs="0" name="c" nillable="true" type="xs:string"/>
                </xs:all>
            </xs:complexType>
        </xs:element>

当我执行这个时,我得到的是a blanck和b和c null。

这是我向服务器发送<axis:multiply> <axis:a>a</axis:a> <axis:b>b</axis:b> <axis:c>c</axis:c> </axis:multiply> 的soap请求。

以下是我在服务器端使用的代码段

              public String multiply(String a, String b, String c) throws Exception
       {
    LogHelper.info(logger, "Begin - Multiply");
    if (a.trim().equals(""))
        LogHelper.info(logger, "value fo a is a=\"\"");
    if (b == null)
        LogHelper.info(logger, "value fo b is null");
    if (c == null)
        LogHelper.info(logger, "value fo c is null");

    return "Hellow World";
        }
记录器的控制台上的

我得到了以下内容:

            19:47:20,227 INFO  [STDOUT] INFO  [SampleWebService] Begin - Multiply
            19:47:20,227 INFO  [STDOUT] INFO  [SampleWebService] value fo a is a=""
            19:47:20,227 INFO  [STDOUT] INFO  [SampleWebService] value fo b is null
            19:47:20,228 INFO  [STDOUT] INFO  [SampleWebService] value fo c is null

任何人都可以告诉我为什么我接收的值为黑色或零,即使我提供的是值。

谢谢,
纳伦德拉

1 个答案:

答案 0 :(得分:0)

这是亚行的一个错误。请参阅https://issues.apache.org/jira/browse/AXIS2-842

它已被修复,所以我猜你使用的是旧版本。

我用轴1.5.1 / jdk1.6.0 / openSuse 11.2测试了这个问题。它似乎与REST调用和客户端存根一起工作顺利。这是我的复杂类型:

<xsd:element name="concat">
  <xsd:complexType>
    <xsd:all>
        <xsd:element name="s1" type="xsd:string"/>
        <xsd:element name="s2" type="xsd:string"/>
   </xsd:all>
 </xsd:complexType>
</xsd:element>

该操作应该连接到字符串。 REST URL如下所示:

http://.../axis2/services/TestService/concat?s2=test2&s1=test1

反应似乎也没问题:

<ns1:concatResponse xmlns:ns1="..."><r>test1test2</r></ns1:concatResponse>

服务实施是微不足道的。所以...它对我来说是固定的: - (

干杯!