私はJavaで単純なWebサービスを作成し、NetBeansを使用します。関数は文字列の配列を受け入れます。次に、Webサービスクライアントで記述されたdelphiを使用して関数を呼び出します。サーバーは、常に空の配列を受け取りました。
soapUIを使用してWebサービスをテストすると、正常に実行されます。
delphiクライアントから送信されたxmlコンテンツを確認し、soapUIと比較しました。これはdelphiクライアントによって送信されます:
<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SOAP-ENV:Body>
<helloList xmlns="http://hw.xzq.com/">
<helloList>line 1</helloList>
</helloList>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
これはsoapUIによって送信されます:
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:hw="http://hw.xzq.com/">
<soapenv:Header/>
<soapenv:Body>
<hw:helloList>
<!--Zero or more repetitions:-->
<helloList>?</helloList>
</hw:helloList>
</soapenv:Body>
</soapenv:Envelope>
delphiクライアントのxmlコンテンツをsoapUIにコピーしましたが、サーバーは空の配列を受け取りました。
次の3行を変更して、xmlコンテンツを変更しました。
<hw:helloList xmlns:hw="http://hw.xzq.com/">
<helloList>line 1</helloList>
</hw:helloList>
この後、サーバーは私の文字列配列を受け取りました。
したがって、問題は、delphiクライアントがプレフィックス名前空間なしで配列コンテンツを送信することだと思います。しかし、これを修正する方法は?ご協力いただきありがとうございます!
ちなみに、InvRegistry.RegisterInvokeOptions(TypeInfo(HelloWorld)、ioDocument);という行にコメントを付けてください。助け無し。