У меня есть рабочий маршрут cxfrs. Я могу нажать на оставшуюся службу, используя SoapUi с объектом json, и получить ответ.
Я хотел написать модульные тесты и решил использовать CamelTestSupport. Мой метод configure () построителя маршрутов выглядит примерно так:
from(cxfrsEndpoint)
.recipientList(simple("direct:${header.operationName}"))
.setHeader(Exchange.CONTENT_LENGTH, simple("-1"));
from("direct:submitRequest")
.bean("responseBean", "checkJson")
.bean("responseBean", "createSuccessResponse");
Когда я нажимаю URL-адрес из SoapUi (http://localhost:8181/cxf/myContext/submitRequest) как POST с соответствующей строкой json, я получаю ответ "success" json. Прохладный.
В своем модульном тесте я создал переопределенный метод createRouteBuilder:
@Override
protected RouteBuilder createRouteBuilder() {
MyRouteBuilder myRouteBuilder = new MyRouteBuilder();
myRouteBuilder.setCxfrsEndpoint("direct:start");
return myRouteBuilder;
}
И тогда мой модульный тест (я думал) будет выглядеть примерно так:
@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
}
Что ж, когда я выполняю модульный тест, я получаю исключение без маршаллинга, причина которого:
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. Какую реальную услугу получают?
На реальном маршруте я включил ведение журнала на конечной точке в blueprint.xml следующим образом:
<!-- RouteBuilder declarations -->
<bean id="myRouteBuilder" class="com.mycompany.MyRouteBuilder">
<property name="cxfrsEndpoint" value="cxfrs:bean:cxfrsEndpoint?bindingStyle=SimpleConsumer&loggingFeatureEnabled=true" />
</bean>
Строка json, которую я вижу в журнале как «Payload:», ничем не отличается от строки json, которую я отправляю через template.requestBodyAndHeader (...).
Что мне не хватает или что я здесь делаю не так?
Спасибо!
myRouteBuilder.setCxfrsEndpoint("direct:start");
, вы меняете то, как ее ожидает маршрут. - person Ricardo Zanini   schedule 04.12.2017