2017-11-29 5 views
0

私は実際のcxfrsルートを持っています。私はjsonオブジェクトでSoapUiを使って残りのサービスを打つことができ、応答を得ることができます。apache camel cxfrsルートの単体テスト方法は?

私はユニットテストを書いていましたが、私はCamelTestSupportを使用しました。マイroutebuilderのconfigure()メソッドは、このようなものになります。私は、適切なJSON文字列とPOSTとしてSOAPUI(http://localhost:8181/cxf/myContext/submitRequest)からURLをヒットすると

from(cxfrsEndpoint) 
     .recipientList(simple("direct:${header.operationName}")) 
     .setHeader(Exchange.CONTENT_LENGTH, simple("-1")); 

    from("direct:submitRequest") 
     .bean("responseBean", "checkJson") 
     .bean("responseBean", "createSuccessResponse"); 

を、私は戻って「成功」JSONを取得します。クール。私が実行したとき、

@Test 
public void thisIsATest() throws Exception { 

    MyRequest myRequest = new MyRequest(); 
    request.setSomeProperty("Some property value"); 

    ObjectMapper objectMapper = new ObjectMapper(); 
    String goodJsonRequest = objectMapper.writeValueAsString(request); 

    String response = (String) template.requestBodyAndHeader(START_POINT, goodJsonRequest, "operationName", "submitRequest"); 
    assertNotNull(response); 
    //Omitted: further assertions for content of the response json 
} 

まあ:

@Override 
protected RouteBuilder createRouteBuilder() { 

    MyRouteBuilder myRouteBuilder = new MyRouteBuilder(); 
    myRouteBuilder.setCxfrsEndpoint("direct:start"); 
    return myRouteBuilder; 
} 

そして、私のユニットテスト(私は思った)のようになります。私のユニットテストで

は、私がオーバーライドさcreateRouteBuilderメソッドを作成しましたユニットテストでは、原因としてアンマーシャリング例外が発生します。

Caused by: com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected character '{' (code 123) in prolog; expected '<' 
    at [row,col {unknown-source}]: [1,1] 
    at com.ctc.wstx.sr.StreamScanner.throwUnexpectedChar(StreamScanner.java:647) 
    at com.ctc.wstx.sr.BasicStreamReader.nextFromProlog(BasicStreamReader.java:2054) 
    at com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1131) 
    at com.sun.xml.bind.v2.runtime.unmarshaller.StAXStreamConnector.bridge(StAXStreamConnector.java:164) 
    at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:415) 
... 74 more 

私のjsonの文字列のようにesn't。実際のサービスは何を受け取っていますか?実際のルート上

、私はこのようなblueprint.xmlでエンドポイントにログインする有効:

​​

私は、ログに表示JSON文字列「ペイロード:」何が違うのを見ていないが私はtemplate.requestBodyAndHeader(...)を介して送信しているJSON文字列よりも。

ここで何が間違っているのですか、何が間違っていますか?

ありがとうございます!

+0

エンドポイントがペイロードがJSONではなくXMLリクエストとして送信されることを期待しているようです。 'myRouteBuilder.setCxfrsEndpoint(" direct:start ");'でエンドポイントをオーバーライドすると、ルートの予想方法が変更されます。 –

+0

詳細が必要な場合は、回答として公開することがあります。 –

答えて

0

、このようなエンドポイント書き換えないで試してみてください:

myRouteBuilder.setCxfrsEndpoint("direct:start");

は、エンドポイントをオーバーライドするインタフェースを変更し、CXFは現在XMLはなくJSON(あなたのログに基づいて)を期待しているように私には思えます:

<bean id="myRouteBuilder" class="com.mycompany.MyRouteBuilder"> 
     <property name="cxfrsEndpoint" value="cxfrs:bean:cxfrsEndpoint?bindingStyle=SimpleConsumer&amp;loggingFeatureEnabled=true" /> 
</bean> 

Caused by: com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected character '{' (code 123) in prolog; expected '<' 
at [row,col {unknown-source}]: [1,1] 
at com.ctc.wstx.sr.StreamScanner.throwUnexpectedChar(StreamScanner.java:647) 
at com.ctc.wstx.sr.BasicStreamReader.nextFromProlog(BasicStreamReader.java:2054) 
at com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1131) 
at com.sun.xml.bind.v2.runtime.unmarshaller.StAXStreamConnector.bridge(StAXStreamConnector.java:164) 
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:415) 
... 74 more 

あなたはすでにここで定義されたエンドポイントを持っています

私の提案は、例としてthis codeを使用してHTTP経由で直接エンドポイントを呼び出すことです:

public void setUp() throws Exception { 
    super.setUp(); 
    httpclient = HttpClientBuilder.create().build(); 
} 

public void tearDown() throws Exception { 
    super.tearDown(); 
    httpclient.close(); 
} 

@Test 
public void testGetCustomerOnlyHeaders() throws Exception { 
    HttpGet get = new HttpGet("http://serviceurl.com"); 
    HttpResponse response = httpclient.execute(get); 
    assertEquals(200, response.getStatusLine().getStatusCode()); 
} 

あなたはチャンスを持っている場合は、どのように適切にテストする考えを持っているために、全体camel-cxfプロジェクトのテストに見てみましょう。

+0

さて、私はそれを行って、今日後で報告します。返信いただきありがとうございます。 – JoeTheSchmoe

関連する問題