CXF 웹 서비스로 노출 된 Camel 경로가 있습니다. 이것은 상향식 웹 서비스이며 다음과 같은 작업이 있습니다.
List<Book> getBooks();
CXF 끝점은 다음과 같이 정의됩니다.
<cxf:cxfEndpoint id="bookService"
address="http://localhost:9045/bookservice"
serviceClass="org.test.cxfws.service.BookDBService">
</cxf:cxfEndpoint>
이 작업은 도서 목록을 쿼리하여 호출자에게 반환합니다. 낙타 경로는 다음과 같습니다.
<camel:camelContext xmlns="http://camel.apache.org/schema/spring">
<route>
<from uri="cxf:bean:bookService"/>
<choice>
<when>
<simple>${header.operationName} == 'getBooks'</simple>
<to uri="bean:wsImplBean?method=getBooks"/>
</when>
<to uri="log:outboundSoapResponse"/>
<choice>
</route>
</camel:camelContext>
경로를 실행 한 후 다음 예외가 발생합니다.
org.apache.cxf.interceptor.Fault : org.test.cxfws.service.Book은 org.apache.cxf.jaxws.interceptors.WrapperClassOutInterceptor.handleMessage (WrapperClassOutInterceptor.java:117)에서 java.util.List로 캐스팅 할 수 없습니다 . org.apache.cxf.phase.PhaseInterceptorChain.doIntercept (PhaseInterceptorChain.java:272) at org.apache.cxf.interceptor.OutgoingChainInterceptor.handleMessage (OutgoingChainInterceptor.java:77) at org.apache (cxf.phase.PhaseInterceptorChain. PhaseInterceptorChain.java:272) ...
원인 : java.lang.ClassCastException : org.test.cxfws.service.Book은 org.apache.cxf의 org.test.cxfws.service.GetBooksResponse_WrapperTypeHelper1.createWrapperObject (Unknown Source)에서 java.util.List로 캐스트 될 수 없습니다 . jaxws.interceptors.WrapperClassOutInterceptor.handleMessage (WrapperClassOutInterceptor.java:101)
wsImpBean 빈에서 getBooks 메소드가 실행되고 라우트 내의 선택 블록 끝에 결과가 반환되는 것을 볼 수 있습니다 .
[qtp1653072092-14] outboundSoapResponse INFO 교환 [ExchangePattern : InOut, BodyType : java.util.ArrayList, Body : [org.test.cxfws.service.Book@63f1858b, org.test.cxfws.service.Book@5769bf0, org. test.cxfws.service.Book@2df7ac5d, org.test.cxfws.service.Book@5f55253e, org.test.cxfws.service.Book@4f003a57]]
누군가가 ClassCastException이 발생한 이유를 이해하도록 도울 수 있습니까?
감사.
camel-cxf는 InOut 매개 변수를 처리하기위한 응답을 보유하기 위해 list를 사용합니다. 응답 결과를 메시지 본문에 설정하면 다음과 같이 결과를 List로 래핑해야합니다.
List<Book> books ...
List<Object> resultList = new ArrayList<Object>();
resultList.add(books);
exchange.getOut().setBody(resultList);
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다