1

SOAP リクエストを実行して Java で SOAP レスポンスを取得し、それを JSP ページから呼び出します。私は多くのサイトを調査し、多くの方法を試しましたが、うまくいかないようです。

URL u = new URL("http://www.mysitename.com/mysoaprequest.wsdl");
URLConnection uc = u.openConnection();
HttpURLConnection connection = (HttpURLConnection) uc;

....

内部に SOAP 要求 xml を含む wsdl ファイルを作成することはできますか?

Web サービスについて読んだことがありますが、Web サービスを動作させるには Web サービスを動作させる必要がありますか?

http://www.webservicex.net/AustralianPostCode.asmx?WSDLをテストするために wsdl を使用します。

このエラーが発生し続けました

java.io.IOException: サーバーが HTTP 応答コードを返しました: URL の 500: http://www.webservicex.net/AustralianPostCode.asmx?WSDL

誰かが私を正しい方向に向けることができれば、大歓迎です。


これは、私が行う必要がある実際の SOAP 要求です。

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://service.application.tvcc.dmv.ca.gov/">
    <soapenv:Header/>
    <soapenv:Body>
        <ser:getNewCourseCompletion>
            <arg0>
                <userDto>
                    <password>********</password>
                    <userId>anyone@somecourt.com</userId>
                </userDto>
            </arg0>
        </ser:getNewCourseCompletion>
    </soapenv:Body>
</soapenv:Envelope>
4

3 に答える 3

1

WSDLは、受け入れるSOAP要求と、その見返りとして返されるものを定義する一種のメニューです。実際には、WSDLドキュメントをそのURLにリクエストとして送信することはありません。送信する必要のあるXMLを正確に調べたい場合は、soapUIをダウンロードすることをお勧めします。

http://sourceforge.net/projects/soapui/files/soapui/4.5.1/

新しいプロジェクトを作成し、提供したリンクを追加します。

http://www.webservicex.net/AustralianPostCode.asmx?WSDL

初期WSDLとして(SoapUIにボックスが表示されます)。次に、そのWebサービスに送信できる種類の要求が生成され、空欄に入力して送信できるようになります。

Javaコードからこれを実行する場合は、JAX-WSなどのWebサービスプラットフォームを選択し、要求を形成して送信するJavaコードを生成する必要があります。いくつかのJAX-WSチュートリアルを見てください。

于 2012-07-26T18:55:09.107 に答える
1

少し遅いことはわかっていますが、とにかく答えを出します。

やりたいことは、この Web サービスの Java コードを自動生成することです。あなたが参照した WSDL を使用してデモンストレーションを行います: http://www.webservicex.net/AustralianPostCode.asmx?WSDL

Java では、コードを自動生成するツールはwsimport. 次のようなものを使用する必要があります。

wsimport http://www.webservicex.net/AustralianPostCode.asmx?WSDL -p com.company.whateveruwant -d . -keep

これにより、必要なコードが指定されたパッケージ (ここではcom.company.whateveruwant) に配置されます。

そこから、通常の Java ライブラリのように SOAP メソッドを呼び出すだけです。

package com.company.whateveruwant;

import org.junit.Test;

public class AustralianPostCodeTest {
  @Test
  public void test() {
    AustralianPostCodeSoap soap = new AustralianPostCode().getAustralianPostCodeSoap();
    String response = soap.getAustralianPostCodeByLocation("Collinswood");
    System.out.println(response);
  }
}

これは出力します:

<NewDataSet>
  <Table>
    <Location>Collinswood</Location>
    <PostCode> SA 5081</PostCode>
  </Table>
</NewDataSet>
于 2012-09-27T13:45:58.120 に答える
0

SOAP は非常に古く、非常に難しいプロトコルです (soap が完全に混乱している理由を説明しているブログはたくさんあります)。ただし、SOAP を使用する必要がある場合は、AXIS を使用できます (そのライブラリを使用するレガシー アプリが多数あるため、AXIS1 を使用します)。AXIS2 の経験がないため、クライアントを作成するためのヒントを以下に示します。

1)クラスパスに軸ライブラリを追加する必要があります(Linuxでは次の例のように):

env AXISCLASSPATH=~/axis-1_4/lib/axis.jar:~/axis-1_4/lib/commons-discovery-0.2.jar:~/axis-1_4/lib/commons-logging-1.0.4.jar:~/axis-1_4/lib/jaxrpc.jar:~/axis-1_4/lib/saaj.jar:~/axis-1_4/lib/log4j-1.2.8.jar:~/axis-1_4/lib/xml-apis.jar:~/axis-1_4/lib/xercesImpl.jar:~/wsdl4j-1_6_2/lib/wsdl4j.jar

2) 次に、次のようにクライアント/サーバーを作成できます。

java -classpath $AXISCLASSPATH org.apache.axis.wsdl.WSDL2Java --server-side example.wsdl

--server-side は、その軸がサーバー層をデプロイおよびアンデプロイするための wsdl ファイルを作成するようにします。クライアントを作成する場合は、それを削除します。

3) com/example/server/.java のようなフォルダが作成されました。 4) Impl ファイル (ExampleImpl.java など) には、(サーバー側で) WS を使用して何らかの処理を行うために実装する必要があるメソッドがあります。

5) WS を使用する場合は、次のようにする必要があります。

EngineConfiguration engine = EngineConfigurationFactoryFinder
.newFactory().getClientEngineConfig();
SimpleProvider provider = new SimpleProvider(engine);
provider.deployTransport("http", new CommonsHTTPSender());

ExampleLocator sendSmsLocator = new ExampleLocator(engine);
Example example = null;

try {
    example = (ExampleBindingStub) exampleLocator.getExample();
} catch (Exception e) {
    e.printStackTrace();
}

try {
    result = example.exampleMethod(params...);
} catch (Exception e) {
    e.printStackTrace();
}

軸サイトには多くのドキュメントがあります。

http://axis.apache.org/axis/java/index.html

よろしく、

于 2012-07-26T18:44:14.517 に答える