0

GlassfishWebサービステスターを使用してテストされたSOAPリクエスト

<?xml version="1.0" encoding="UTF-8"?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Header/>
<S:Body>
    <ns2:hello xmlns:ns2="http://WS/">
        <name>asd</name>
    </ns2:hello>
</S:Body>

石鹸の反応

<?xml version="1.0" encoding="UTF-8"?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
    <ns2:helloResponse xmlns:ns2="http://WS/">
        <return>Hello asd !</return>
    </ns2:helloResponse>
</S:Body>

ここで、sudzを使用してiOSでこのhelloメソッドを呼び出して、「name」パラメーターをWebサービスに渡そうとします。したがって、これはcreateEnvelope内のコードです。

[s appendString: @"<?xml version=\"1.0\" encoding=\"utf-8\"?>"];
[s appendString:@"<S:Envelope xmlns:S=\"http://schemas.xmlsoap.org/soap/envelope/\">"];
[s appendString:@"<S:Header/>"];
[s appendString:@"<S:Body>"];
[s appendString:@"<ns2:hello "];
[s appendString:@"xmlns:ns2=\"http://WS/"];
[s appendString:@"\"/>"];
[s appendString:@"<name>alvin</name>"];
[s appendString:@"</ns2:hello> "];
[s appendString:@"</S:Body>"];
[s appendString:@"</S:Envelope>"];

これは、iOSからアクセスしたときのnetbeansログです。

INFO: Received WS-I BP non-conformant Unquoted SoapAction HTTP header: http://WS/hello
INFO: berhasil null

アンドロイドがアクセスしたときにログに記録する

 INFO: Received WS-I BP non-conformant Unquoted SoapAction HTTP header: http://WS/hello
 INFO: berhasil Cornel

ただし、常にnullパラメータを返し、Androidではksoapを使用して完全に機能します。上記のエンベロープを使用すると、メソッド(hello)を呼び出すことができますが、nullパラメーターを渡します。T_Tを助けてください

4

1 に答える 1

2

まだ誰もこれに答えていないので、私はウェブ上の他の投稿では解決されなかった同じ問題を抱えていました...

ARCを有効にしましたが、問題はありません。私はARClessバージョンを生成しましたが、ARCを使用しているにもかかわらず、それも機能しました。Soap.mでリクエストのパラメータを生成するコードを変更する必要がありました。戻り行にxmlns=""を追加しました

// Serializes an object to a string, XML representation with a specific node name.
+ (NSString*) serialize: (id) object withName: (NSString*) nodeName {
    if([object respondsToSelector:@selector(serialize:)]) {
        return [object serialize: nodeName];
    }
    return [NSString stringWithFormat:@"<%@ xmlns=\"\">%@</%@>", nodeName, [Soap serialize: object], nodeName];
}

私もこの変更を行う必要がありました:

ここで参照:http ://code.google.com/p/sudzc/issues/detail?id = 40 変更元:

if([child respondsToSelector:@selector(name)] && [[child name] isEqual: name]) {

これに

if([child respondsToSelector:@selector(name)] && [[child name] hasSuffix:: name]) {

これは、最終的に私のために機能するようになったSOAPリクエストです。

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns="http://webservice.alerts.xxxconsulting.com/">
<soap:Body>
<echo>
<arg0 xmlns="">echo msg</arg0>
</echo>
</soap:Body>
</soap:Envelope>
于 2012-12-03T20:01:51.183 に答える