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가 나는 문제, 프록시가 다른 수신 어떤 형식을 얻었다. 그러나, 나는 이것을 어떻게 고칠 지 모른다.