0

SBNInloggBegarオブジェクトをWCFWebサービスに送信したいと思います。オブジェクトとSBNInloggBegarが含まれ、オブジェクトにはいくつかの文字列が含まれます。、には、いくつかの文字列が含まれます。インターフェイスを使用してこれらのクラスをシリアル化しました。SBPBegarSBPInloggningSBPInloggningSBPSubjektKvmSerializable

私は次のような関数を持っています:

private String soap() {
    String returnString = "";

    String NAMESPACE = "Sambruk";
    String METHOD_NAME = "SBAInloggning";
    String SOAP_ACTION = "Sambruk/AuthenticationService/SBAInloggning";
    String URL = "http://exshaerpm.argentum.local/EliasTest/AuthenticationService/AuthenticationService.svc";

    SoapObject soapRequest = new SoapObject(NAMESPACE, METHOD_NAME);

    SBPBegar begar = new SBPBegar();
    begar.setKommun("Skellefteå kommun");

    SBPInloggning inloggning = new SBPInloggning();
    inloggning.setAnvandarnamn("hej");
    inloggning.setLosenord("hopp");

    SBNInloggBegar inloggbegar = new SBNInloggBegar();
    inloggbegar.setBegarData(begar);
    inloggbegar.setInloggningsData(inloggning);

    PropertyInfo prop = new PropertyInfo();
    prop.setName("request");
    prop.setNamespace("http://www.statskontoret.se/sambruk/nyttomeddelanden");
    prop.setType(inloggbegar.getClass());
    prop.setValue(inloggbegar);
    soapRequest.addProperty(prop);

    //soapRequest.addProperty("request", inloggbegar);

    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); //****
    envelope.dotNet = true;
    envelope.implicitTypes = true;
    envelope.setAddAdornments(false);

    envelope.setOutputSoapObject(soapRequest);

    envelope.addMapping("http://www.statskontoret.se/sambruk/nyttomeddelanden", "", SBPBegar.class);
    envelope.addMapping("http://www.statskontoret.se/sambruk/nyttomeddelanden", "", SBPInloggning.class);
    envelope.addMapping("http://www.statskontoret.se/sambruk/sbpinloggning", "", SBPSubjekt.class);

    HttpTransportSE aht = new HttpTransportSE(URL);
    aht.debug = true;

    try
    {
        aht.call(SOAP_ACTION, envelope);
        //SoapPrimitive response = (SoapPrimitive)envelope.getResponse();
        Object o = envelope.getResponse();
        SBNInloggSvar inloggSvar = new SBNInloggSvar((SoapObject) o);
        returnString = inloggSvar.toString();
    }
    catch(Exception e)
    {
        e.printStackTrace();
        returnString = e.toString();
    }
    return returnString;
}

これが送信されるものです:

<v:Envelope xmlns:i="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:d="http://www.w3.org/2001/XMLSchema" 
    xmlns:c="http://schemas.xmlsoap.org/soap/encoding/" 
    xmlns:v="http://schemas.xmlsoap.org/soap/envelope/">
    <v:Header />
    <v:Body>
        <SBAInloggning xmlns="Sambruk">
            <n0:request                 
                xmlns:n0="http://www.statskontoret.se/sambruk/nyttomeddelanden">
                <BegarData>
                    <Kommun>Skellefte&#229; kommun</Kommun>
                    <AppNamn i:null="true" />
                    <AppVersion i:null="true" />
                    <MaxAntalSvar i:null="true" />
                    <AnropsId i:null="true" />
                    <LastDataVersion i:null="true" />
                </BegarData>
                <Inloggningsdata>
                    <anvandarID i:null="true" />                                
                    <anvandarnamn>hej</anvandarnamn>
                    <organisationsAnvID i:null="true" />
                    <losenord>hopp</losenord>
                    <aktor i:null="true" />
                    <subjekt i:null="true" />
                </Inloggningsdata>
            </n0:request>
        </SBAInloggning>
    </v:Body>
</v:Envelope>

の名前空間を設定したくありません<request>。代わりに、の名前空間を<request>とに設定する必要が<BegarData>あり<InloggningsData>ます。また、子の名前空間を設定したいと思い<BegarData>ます。同じことを<InloggningsData>、次のように設定します。

...
<request xmlns:a="http://www.statskontoret.se/sambruk/nyttomeddelanden"     
    xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
    <a:BegarData xmlns:b="http://www.statskontoret.se/sambruk/sbpbegar">
        <b:Kommun>test</b:Kommun>
    ...
    </a:BegarData>
    <a:InloggningsData xmlns:b="http://www.statskontoret.se/sambruk/sbpinloggning">
        <b:AnvandarID></b:AnvandarID>
    ...
    </a:InloggningsData>
</request>
...

これを行う方法はありますか?

ちなみに、私はバージョン2.5.4(Google Codeサイトから)を使用しています。

4

1 に答える 1

2

の名前空間を宣言しませんでしたrequestが、次のように特定のタイプにマッピングを追加しました。

envelope.addMapping("http://www.statskontoret.se/sambruk/nyttomeddelanden", "SBNInloggBegar", SBNInloggBegar.class);
envelope.addMapping("http://www.statskontoret.se/sambruk/sbpbegar", "SBPBegar", SBPBegar.class);
envelope.addMapping("http://www.statskontoret.se/sambruk/sbpinloggning", "SBPInloggning", SBPInloggning.class);
envelope.addMapping("http://www.statskontoret.se/sambruk/sbpsubjekt", "SBPSubjekt", SBPSubjekt.class);

また、に設定implicitTypesしましたtrue

于 2011-05-18T06:28:38.023 に答える