質問

JAX-WSを使用してJavaで設定したWebサービスを使用しようとすると、Delphi 2007で問題が発生します。 Webサービスは、別のJavaプログラムおよびC#/ ASP.NET 2.0 Webサイトから問題なく使用できます。ただし、Delphi 2007(17-DEc-2007パッチ)のWSDLインポーターを使用して同じサービスにアクセスしようとすると、JAX-WS Webサービスは、それを渡すパラメーターを認識せず、それらをヌルにします。

Delphiから渡されるSOAPメッセージを確認し、他のメッセージと比較したところ、ほとんど同じです(いくつかの無視できる名前空間decsと.NETからの多くのビューステートを除く)。

私もWebにアクセスしました(最も役立つリンクは、ボブ博士の http://www.bobswart.nl/Weblog/Blog.aspx?RootId=5:798 )ですが、喜びはありません。

これに遭遇した人はいませんか?

TIA。


サガは続きます!

HTTPRIOオブジェクトを使用して動作させるために盗聴した後、最終的にはあきらめて、HTTPを介した単純なXML転送を試みました。失敗します。

OK、だから私はC#で簡単なテスターを作り、それを試しました。問題ありません。

Fiddlerを使用して、何が前後に送信されているかを確認しましたが、唯一の違いは名前空間にあったようです。 Delphiで送信するXMLの名前空間を変更しました...動作します!

これは、WSDLImporterによって生成される元のXMLのサンプルです。

<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
    <SOAP-ENV:Body>
        <version xmlns="http://path.to.service.com/">
            <input>test</input>
        </version>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

これが実際に機能するものです:

<?xml version="1.0"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
    <S:Body>
        <ns2:version xmlns:ns2="http://path.to.service.com/">
            <input>test</input>
        </ns2:version>
    </S:Body>
</S:Envelope>

それで、これがわかったので、WSDLImporterコードのネームスペース値を変更しますか? HTTPRIOプロパティに明らかなものは何もありません。

TIA

役に立ちましたか?

解決

HA HA IT LIVES !!!

基本的に、推奨事項を削除する必要がありました

InvRegistry.RegisterInvokeOptions(TypeInfo(ActivityService), ioDocument);

そして強制的にSecを使用します。 5エンコード。名前空間は必要に応じて生成され、パラメーターはJava Webサービスに渡されます。

そうです、ビールが必要です、たくさんのビール:)

他のヒント

WSDLでこの行をコメントするだけです:

//InvRegistry.RegisterInvokeOptions(TypeInfo(WebService), ioDocument);

それで十分です...お楽しみください。

あなたの問題の解決策ではありませんが、私は最近、同じ環境で問題を抱えていました。 Webサービス(C#で記述)を使用する適切な方法を見つけるまで、オプションを何度も変更する必要がありました。

チェック:

- THTTPRIO.Converter.Options
- THTTPRIO.HTTPWebNode
- THTTPRIO.HTTPWebNode.InvokeOptions

この投稿を見つけるまで2日間頭を壁にぶつけました...そしてCesarsはTHTTPRIO.Converter.Optionsを確認するようにヒントを出しました...ほとんどすべてを試しました。最後の1つはsoXXXXHdrをtrueに設定することでした-<! > gt;その後、奇妙な何かが起こり、サーバーへのヌルはもうありません:O ...

その設定が値を通過させる理由はわかりませんが、(少なくとも私にとっては)通過するだけです。

実際に何が起こっているかを理解している人がこれを説明してくれたら素晴らしいと思います。

Converter.OptionsからsoSendMultiRefObjを削除すると役立ちます

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top