3

現在、SOAP Web サービスがあり、そのエンドポイントにアクセスしようとしていますが、次のエラーが発生し続けます。

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <soap:Fault>
      <faultcode>soap:Server</faultcode>
        <faultstring>
 No such operation: (HTTP GET PATH_INFO: /camel-example-reportincident/webservices/incident)
        </faultstring>
       </soap:Fault>
    </soap:Body>
 </soap:Envelope>

単体テスト

package org.apache.camel.example.reportincident;

import junit.framework.TestCase;

import org.apache.camel.CamelContext;
import org.apache.camel.impl.DefaultCamelContext;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import org.jvnet.mock_javamail.Mailbox;

/**
 * Unit test of our routes
 */
public class ReportIncidentRoutesTest extends TestCase {

private CamelContext camel;

// should be the same address as we have in our route
private static String ADDRESS = "cxf://http://localhost:8080/camel-example-reportincident/webservices/incident"
            + "?serviceClass=org.apache.camel.example.reportincident.ReportIncidentEndpoint"
            + "&wsdlURL=report_incident.wsdl";

protected void startCamel() throws Exception {
    camel = new DefaultCamelContext();
    camel.addRoutes(new ReportIncidentRoutes());
    camel.start();
}

protected static ReportIncidentEndpoint createCXFClient() {
    // we use CXF to create a client for us as its easier than JAXWS and works
    JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
    factory.setServiceClass(ReportIncidentEndpoint.class);
    factory.setAddress(ADDRESS);
    return (ReportIncidentEndpoint) factory.create();
}

public void testRendportIncident() throws Exception {
    // start camel
    startCamel();

    // assert mailbox is empty before starting
    Mailbox inbox = Mailbox.get("incident@mycompany.com");
    assertEquals("Should not have mails", 0, inbox.size());

    // create input parameter
    InputReportIncident input = new InputReportIncident();
    input.setIncidentId("123");
    input.setIncidentDate("2008-08-18");
    input.setGivenName("Claus");
    input.setFamilyName("Ibsen");
    input.setSummary("Bla");
    input.setDetails("Bla bla");
    input.setEmail("davsclaus@apache.org");
    input.setPhone("0045 2962 7576");

    // create the webservice client and send the request
    ReportIncidentEndpoint client = createCXFClient();
    OutputReportIncident out = client.reportIncident(input);

    // assert we got a OK back
    assertEquals("0", out.getCode());

    // let some time pass to allow Camel to pickup the file and send it as an email
    Thread.sleep(3000);
    // assert mail box
    assertEquals("Should have got 1 mail", 1, inbox.size());

    // stop camel
    camel.stop();
}

}

キャメル ルーティングと共に CFX エンドポイントを使用しようとしています。エンドポイント アドレスをルートに配置して単体テストすると、「//path/to/endpoint のエンドポイントが見つかりませんでした」というメッセージが表示されます。

エンドポイント URL にアクセスしようとするとエラーが発生するという事実が問題であると想定していますが、それを修正する方法を理解するためにどこから始めればよいかさえわかりません。

SOAP UI で Web サービスをヒットすると、正常に動作します。どんな助けでも大歓迎です、そして私は必要な情報を提供することができます.

4

2 に答える 2

3

通常、SOAP サービスは、POST 操作を使用して HTTP 経由で公開されます。GET 操作を使用してサービスにアクセスしようとしているようです。

単体テストでサービスを呼び出す方法がわかりませんが、HTTP/POST 呼び出しであることを確認する必要があります。プレーン HTTP を使用している場合は、HTTP コンポーネントを呼び出す前にヘッダーを設定できます。

 .setHeader(Exchange.HTTP_METHOD, constant("POST"))

より詳細な入力のために単体テストを表示します。

于 2013-01-21T22:31:28.370 に答える
0

@grepこの投稿は少し古いと思いますが、同様の問題を抱えている他の誰かができる場合は、まだ答えようとします。まあ、私は同じ問題を抱えていて、それらの背後にある理由は何だろうと思っていました. これが私が試して問題を修正した2つのステップです。ブラウザで wsdl にアクセスできることを確認してください。

  1. SOAPUI を閉じ、C:/users 配下の user フォルダに作成された soapui_workspace.xml を削除します。
  2. Soap_ui を再起動し、設定 > プロキシ設定を開きます。
  3. 自動からなしに変更します。
  4. 新しいプロジェクトを作成します。これは私の問題を解決し、SOAPUI の webservice からの応答を取得しました。
于 2015-01-21T05:43:08.373 に答える