0

Tomcat5.5 で Axis2 を使用して発行された単純な POJO Web サービスがあり、ATL C++ クライアントでそれを使用しようとすると失敗します。C# クライアントで同じことをするとうまくいきます。問題は、ATL クライアントが次のような SOAP 本体を送信することです。

<soap:Body>< xmlns="http://fa.test.com/xsd"></></soap:Body></soap:Envelope>

真ん中の無効な要素に注目してください。C#はヘッダーを送信するため、UTF-8と関係があると思われます

<?xml version='1.0' encoding='utf-8'?>

ATL クライアントはそうではありません。また、ATL SOAP 内部の一部を調べると、構造体に szName と szwName の 2 つのメンバーがあることに気付きました。1 つ目は空で要素を生成し、2 つ目は testResponse という有効な (?) 名前を持っています (呼び出しているメソッドは「test」と呼ばれます)。

ここからどこへ行くべきかアドバイスが必要ですか?

詳細: ATL クライアントからの完全なメッセージ:

POST /axis2/services/EnterpriseService.EnterpriseServiceHttpSoap11Endpoint/ HTTP/1.1
Content-Length: 304
Content-Type: text/xml; charset=utf-8
SOAPAction: "urn:test"
Accept: text/xml
Host: xxxxxxx
User-Agent: Microsoft-ATL-Native/8.00

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"><soap:Body>< xmlns="http://fa.test.com/xsd"></></soap:Body></soap:Envelope>

Axis2 からの応答:

HTTP/1.1 500 Internal Server Error
Server: Apache-Coyote/1.1
Content-Type: text/xml;charset=utf-8
Transfer-Encoding: chunked
Date: Tue, 04 Nov 2008 15:31:57 GMT
Connection: close

<?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><soapenv:Fault><faultcode>soapenv:Server</faultcode><faultstring>com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected character '>' (code 62); expected an element name.&#xd;
 at [row,col {unknown-source}]: [1,276]</faultstring><detail /></soapenv:Fault></soapenv:Body></soapenv:Envelope>

ああ、これが C# クライアントからの適切な要求です。

POST /axis2/services/EnterpriseService.EnterpriseServiceHttpSoap11Endpoint/ HTTP/1.1
Via: 1.1 ANGEL-ISLAND
Content-Type: text/xml; charset=utf-8
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; MS Web Services Client Protocol 2.0.50727.1433)
Host: xxxxxxx:8080
SOAPAction: "urn:test"
Connection: Keep-Alive
Content-Length: 236

<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body /></soap:Envelope>

C# の場合、soap:body は空白です。

4

2 に答える 2

2

ATL サーバーは、要求を正しく生成できます。WSDL に問題があるようです。私の大雑把なテストでは、リクエストが生成されます。

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

を使用した ASP.NET Web サービスの場合SoapParameterStyle.Bare<wsdl:part>入力メッセージに要素がありますか? WSDL サービスの説明を投稿できますか?

于 2008-11-08T15:32:41.900 に答える
0

UTF-8とは関係ないと思います。

C# からの有効なメッセージには、soap:Body 内に何もありませんが、無効なメッセージには . ATL C++ クライアントは、SOAP 本文内に何かを強制しようとしているように見えますが、そこには何もありません。

また、C# クライアントのメッセージには testResponse 要素が含まれていないことにも注意してください。

szName を使用しているコードをもう少し調べて、それが . そんなことをするべきではありません。

于 2008-11-08T02:20:37.617 に答える