1

Java Web サービス クライアントを作成しようとしています。String を受け取り、別の String を返す非常に単純なサービスです。私はsoapUIでサービスをテストしており、完全に動作しますが、Javaでコーディングしようとすると失敗します。

サービスを呼び出すために使用しているコードは次のとおりです

    QName QNAME_TYPE_STRING = new QName(nameSpaceURI,"string");
    Service service = new Service();
    Call call = (Call) service.createCall();
    call.setTargetEndpointAddress(new java.net.URL(endpoint));
    call.setOperationName(new QName(nameSpaceURI, webServiceMethod));
    call.addParameter("buil:arg0", XMLType.XSD_STRING, ParameterMode.IN);
    call.setReturnType(QNAME_TYPE_STRING, String.class);
    String ret = (String) call.invoke(new Object[]{"PARAMETER VALUE"});

endPoint変数がサービスの URL を正しく指している。

nameSpaceURI = "http://build.response.service/";
webServiceMethod = "buildResponse";

問題は、webService がパラメーターを正しく取得することですが、応答で何かが発生することです。

Caused by: com.ctc.wstx.exc.WstxParsingException: Non-default namespace can not map to
empty URI (as per Namespace 1.0 # 2) in XML 1.0 documents
at javax.xml.stream.SerializableLocation@6fee8ce6

これは、soapUI での私のリクエストのサンプルです

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:buil="http://build.response.service/">
    <soapenv:Header/>
        <soapenv:Body>
            <buil:buildResponse>
                <buil:arg0>PARAMETER VALUE</buil:arg0>
            </buil:buildResponse>
        </soapenv:Body>
</soapenv:Envelope>

そして、これはsoapUIの応答のサンプルです

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body>
        <ns1:buildResponse xmlns:ns1="http://build.response.service/">
            <return xmlns="http://build.response.service/">
                RESPONSE1,RESPONSE2,RESPONSE3
            </return>
        </ns1:buildResponse>
    </soap:Body>
</soap:Envelope>

¿アイデア? これは応答と関係があると思いますが、私は本当にwebServicesの初心者です(知っている...知っている... 21世紀...)。

追加情報: wsdl2java を使用することも、サービスの wsdl を公開することも許可されていません (とにかく自動生成されます。私はそれとは何の関係もありませんし、変更されることもありません)。申し訳ありませんが、この制限にもかかわらず、私を助けてくれることを願っています。

ありがとう!

4

1 に答える 1

2

神...それはとても簡単で、呼び出しパラメーターにこの小さな変更を加えました:

call.addParameter(new QName(nameSpaceURI, "buil:arg0"),XMLType.XSD_STRING,ParameterMode.IN);
call.addParameter(new QName(nameSpaceURI, "return"), XMLType.XSD_STRING, ParameterMode.OUT);

今では魅力のように機能します。これが誰かの役に立てば幸いです。

于 2013-01-29T09:59:15.213 に答える