1

私は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);という行にコメントを付けてください。助け無し。

4

2 に答える 2

0

NetBeans 7.2 / JAX-WS および Delphi 2009 で問題を確認できます。

  • 単純なデータ型は機能しますが、配列は失敗します
  • Delphi 2007で説明されているように、生成されたユニットの 1 行のコメントを外す必要がありました。JAX-WS Web サービスを適切に消費していません。
  • .NET 3.0/Metro 1.0と.NET 3.5/Metro 1.3の両方の互換性を試してみた

たぶん、新しい Delphi バージョンでこれを処理できます (Delphi XE3 はおそらく誰でも)。

私のJavaコード:

@WebMethod(operationName = "example")
public void testArray(@WebParam(name = "arr") String[] arr) {

    System.out.println("in web method");

    System.out.println("Array has " + arr.length + " entries");

    for (String s : arr) {
        System.out.println(s);
    }
}

関連項目: Web サービスを使用した Delphi と Java の統合

于 2012-09-07T12:30:25.813 に答える
0

私は、NetBeans 7.2 と Metro 2.0 (.NET 3.5/Metro 1.3 互換) を使用して Web サービスを作成しています。このクライアントは、Delphi SOAP ランタイムとインポーターの更新 (24535) がインストールされた Delphi 7 で作成されたクライアントです。

問題は、Web サービスと互換性のない Delphi クライアントで生成された xml だったと思います。

これは助けになると思いますが、Javaで同じことを行う方法がわかりません。

In the Server, to go to the SOAP web module, select the HTTPSoapPascalInvoker
component, and open up the Options property in the Object Inspector. Make sure
the option "soRootRefNodesToBody" is checked.

逆に言えば、Web サービスに「RFC」タイプを使用するのが役立つと思いますが、RFC タイプは JAXB を必要とし、java.util.List をサポートしていません。

SO、これを修正できる別の方法はありますか?

于 2012-09-08T04:43:45.320 に答える