0

引数として Java ハッシュ マップまたは配列リストを期待する動的 Web サービスを作成しようとしています。

クラスコードで次のコードを使用しています。

package demo;

import java.util.ArrayList;

import javax.jws.WebService;

@WebService
public class HashMapTest {
    public HashMapTest() {
        super();
    }

    public int getResponse(ArrayList<String> hm) {
        return hm.size();
    }
}

IDE: Oracle Jdeveloper 11g を使用しています。同じウィザードを使用すると、出力 WSDL は次のようになります。

<?xml version="1.0" encoding="UTF-8" ?>
<wsdl:definitions
     name="HashMapTestService"
     targetNamespace="http://demo/"
     xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
     xmlns:tns="http://demo/"
     xmlns:xsd="http://www.w3.org/2001/XMLSchema"
     xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
     xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
     xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
    >
    <wsdl:types>
    </wsdl:types>
    <wsdl:portType name="HashMapTest">
    </wsdl:portType>
    <wsdl:binding name="HashMapTestSoapHttp" type="tns:HashMapTest">
        <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
    </wsdl:binding>
    <wsdl:service name="HashMapTestService">
        <wsdl:port name="HashMapTestPort" binding="tns:HashMapTestSoapHttp">
            <soap:address location="http://localhost:7101/DemoServer-Demo-context-root/HashMapTestPort"/>
        </wsdl:port>
    </wsdl:service>
</wsdl:definitions>

簡単にわかるように、WSDL が壊れていて使用できません。

Jdeveloper の単なるバグですか、それとも単に Web サービスで Collections API をパラメータとして使用できないのでしょうか?

助けてください

4

2 に答える 2

5

これは JAXB のバグが原因です。次のコードを使用します。

public class DTOObject
{ 
        HashMap hm = new HashMap();

    public void setHm(HashMap hm) {
        this.hm = hm;
    }

    public HashMap getHm() {
        return hm;
    }

    public int size() {
        return hm.size();
    }
}

public class HashMapTest {
    public HashMapTest() {
        super();
    }

    public int getResponse(Wrapped hm) {

        System.out.println(hm);
        return hm.size();
    }


}

問題を解決し、wsdl を正しく作成します。

于 2012-11-06T13:32:47.557 に答える
-2

テクノロジ依存型は Web サービスでは使用できません。String または Byte を使用する必要があります。コレクションを引数として渡したい場合は、それをシリアル化し、バイト形式で引数として渡します。もう一方の端で、コレクション フォーム バイトのインスタンスを作成します。

于 2012-11-06T11:44:50.967 に答える