0

Web サービスに axis2 を使用しています。今日、デフォルトで生成された axis2 の代わりに独自の wsdl ファイルを使用しようとすると、オブザーバーの予期しない動作が発生しました。詳細は次のとおりです。

これは元の 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 の値が空白になり、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

値を提供しているにもかかわらず、値を黒またはnullとして受け取っている理由を誰でも知ることができますか?

ありがとう、
ナレンドラ

4

1 に答える 1

0

これは ADB のバグです。https://issues.apache.org/jira/browse/AXIS2-842を参照してください。

修正済みですので、古いバージョンをお使いかと思います。

axis 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

応答もOKのようです:

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

サービスの実装は簡単です。だから...それは私のために修正されています:-(

乾杯!

于 2010-12-04T08:03:46.653 に答える