2

PHP NuSoap実装からデータを取得していますが、次のようなデータが返されます。

<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">

<SOAP-ENV:Body>

<ns1:getHashCodeAllTablesResponse xmlns:ns1="urn:getSchemaForRhythms">

<return xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType=":[121]">

<item xsi:type="xsd:">

<md5Hash xsi:type="xsd:string">e294967afe9834bf8477252ac0c3686e</md5Hash>

<tableName xsi:type="xsd:string">SYSCONGLOMERATES</tableName>

<isView xsi:type="xsd:string">false</isView>

<viewDefinition xsi:type="xsd:string">null</viewDefinition>

</item>

これが問題だと思います:<return xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType=":[121]">

Axis2のsoapクライアントをサービスに向けると、次のエラーが発生します。

org.apache.axis2.AxisFault: org.apache.axis2.databinding.ADBException: Unsupported type http://schemas.xmlsoap.org/soap/encoding/ Array

これが私がやろうとしていることの本当に単純なJavaの例です:

public static void main(String[] args) {
    // TODO code application logic here
    try{
        GetSchemaForRhythmsStub stub = new GetSchemaForRhythmsStub(null,"http://test.test.com/sqlSchemaService/schemaBuilder.php" );
        GetSchemaForRhythmsStub.GetHashCodeAllTablesE response2= new GetSchemaForRhythmsStub.GetHashCodeAllTablesE();
        stub.getHashCodeAllTables(response2);
    }catch(Exception ex)
    {
       System.out.println(ex.toString());

    }
}

配列データ型とAxisに関連するドキュメントが見つかりません。私は何かが足りないのですか?

ありがとう、

4

2 に答える 2

5

あなたが見逃しているのは、SOAPエンコーディング配列タイプは本当に古い学校(つまり、XMLスキーマが登場する前に使用していたもの)であり、Axis2はそれを好まないということです。データバインディングをADB(デフォルト)からXMLBeansに切り替えてみることができます。これをどのように行うかは、WSDLを解析する方法によって異なります。これが私が見つけたいくつかの参考文献です:

SOAPエンコーディングとAxis2

Axis2のwsdl2javaがRPC/エンコードされたスタイルのWebサービスで失敗する

一般に、「soapエンコードされた配列axis2」を探して、実行していることに関する情報を見つけます。

于 2012-07-19T13:31:25.770 に答える
1

同じ問題に直面しました。生成されたコードには、配列を表す XMLBean の set メソッドがありませんでした。この問題を回避するために、生成されたクラスで XMLBean API を直接使用しました。

次のコード スニペットは、生成された配列クラスに要素を追加する方法を示しています。私の場合、2 つの値を含む文字列配列を返す必要がありました。

    ArrayOfXsdString strArray = syncResponse.addNewProcessSyncReturn();

             /* set the size of the array */
    strArray.setArrayType("soapenc:string[2]");

            /* get the XMLCursor object and go to the end of the XML represented by this bean */   
    XmlCursor cur = strArray.newCursor();
    cur.toEndToken();

            /* processSyncReturn is the XML element name of the array */        
    cur.toChild("processSyncReturn");
    cur.insertElementWithText("processSyncReturn","this is array element 1");
    cur.insertElementWithText("processSyncReturn","this is array element 2");

以下は、応答 SOAP メッセージで生成されます

<processSyncReturn soapenc:arrayType="soapenc:string[2]">
<processSyncReturn>this is array element 1</processSyncReturn>
<processSyncReturn>this is array element 2</processSyncReturn>
</processSyncReturn>

フセイン

http://nsinfra.blogspot.in

于 2012-08-14T11:02:38.183 に答える