2014-03-28 54 views
0

我試圖用JBOSS FUSE中的POJO模式進行代理,並且真正的Web服務正在執行。代理拋出異常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

我能夠調用使用代理服務器和處理器真正的web服務。

但是,響應被返回給客戶端。

我是否需要在處理器或藍圖中處理這種情況。

<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在SOAPUI

<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> 

我有問題,什麼代理接收不同的格式。但是,我不知道如何解決這個問題。

回答

0

而不是: String temp = exchange.getIn()。getBody(String.class);

嘗試以下操作:

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

相關問題