2014-03-28 6 views
0

JBOSS FUSE에서 POJO 모드로 프록시를 시도하고 실제 웹 서비스가 실행 중입니다.프록시 예외 발생 org.apache.cxf.binding.soap.SoapFault : [B를 [Ljava.lang.Object;로 캐스팅 할 수 없습니다.

그러나 클라이언트가 예외

Caused by: org.apache.cxf.binding.soap.SoapFault: [B cannot be cast to [Ljava.lang.Object; 
    at org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.unmarshalFault(Soap11FaultInInterceptor.java:84) 
    at org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.handleMessage(Soap11FaultInInterceptor.java:51) 
    at org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.handleMessage(Soap11FaultInInterceptor.java:40) 
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:272) 
    at org.apache.cxf.interceptor.AbstractFaultChainInitiatorObserver.onMessage(AbstractFaultChainInitiatorObserver.java:113) 
    at org.apache.cxf.binding.soap.interceptor.CheckFaultInterceptor.handleMessage(CheckFaultInterceptor.java:69) 
    at org.apache.cxf.binding.soap.interceptor.CheckFaultInterceptor.handleMessage(CheckFaultInterceptor.java:34) 
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:272) 
    at org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:835) 
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:1612) 
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:1503) 
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1310) 
    at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56) 
    at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:628) 
    at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62) 
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:272) 
    at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:565) 
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:474) 
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:377) 
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:330) 
    at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:96) 
    at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:135) 
    ... 2 more 

내 Blueprint.xml

을 다음 도착 나는 프록시 및 프로세서를 사용하여 실제 웹 서비스를 호출 할 수 있어요.

그러나 응답은 클라이언트에 반환됩니다.

이 상황을 처리하려면 프로세서 또는 청사진에서 조치를 취해야합니까?

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap:Body> 
     <soap:Fault> 
     <faultcode>soap:Server</faultcode> 
     <faultstring>[B cannot be cast to [Ljava.lang.Object;</faultstring> 
     </soap:Fault> 
    </soap:Body> 
</soap:Envelope> 

SOAPUI

에서

<cxf:cxfEndpoint xmlns:cxf="http://camel.apache.org/schema/blueprint/cxf" id="webserviceProxy" 
        address="http://localhost:8383/service_sample_proxy/services_proxy/proxyport" 
        endpointName="tns:ComplexServiceImplPort" 
        serviceName="tns:ComplexServiceImplService" 
        serviceClass="webservice.ComplexServiceImpl" 
        wsdlURL="wsdl/complexserviceimpl.wsdl" 
        xmlns:tns="http://webservice/" /> 

<camelContext id="blueprintContext" 
       trace="false" 
       xmlns="http://camel.apache.org/schema/blueprint"> 

    <endpoint id="callRealWebService" uri="jetty:http://localhost:8080/service_sample/services/ComplexServiceImplPort?throwExceptionOnFailure=false"/> 

     <route id="httpBridge"> 
     <from uri="cxf:bean:webserviceProxy?dataFormat=POJO"/> 
     <process ref="requestDataProcessor"/> 
     <to ref="callRealWebService"/> 
    </route> 
</camelContext> 

<bean id="requestDataProcessor" class="org.fusesource.example.RequestDataProcessor"/> 

내 Processor.java

public class RequestDataProcessor implements Processor { 
    public void process(Exchange exchange) throws Exception { 

     String temp = exchange.getIn().getBody(String.class); 

    RequestData temp = exchange.getIn().getBody(RequestData.class); 

    String SOAPContent = "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"+ 
    "<soap:Body>"+ 
    "<ns2:sampleMethod xmlns:ns2=\"http://webservice/\">"+ 
    "<arg0>"+ 
    "<name>" +temp.getName()+" PROXY CONTENT</name>"+ 
    "<no>"+temp.getNo()+"</no>"+ 
    "<salary>"+temp.getSalary()+" PROXY CONTENT</salary>"+ 
    "</arg0>"+ 
    "</ns2:sampleMethod>"+ 
    "</soap:Body>"+ 
    "</soap:Envelope>"; 


     exchange.getOut().setBody(SOAPContent); 

     exchange.getOut().setHeaders(exchange.getIn().getHeaders()); 

    } 
} 

Resonse가 나는 문제, 프록시가 다른 수신 어떤 형식을 얻었다. 그러나, 나는 이것을 어떻게 고칠 지 모른다.

답변

0

대신 : String temp = exchange.getIn(). getBody (String.class);

MessageContentsList list = exchange.getIn().getBody(MessageContentsList.class); 
 
String temp = list.get(0);

:

는 다음 시도