日期:2014-05-19  浏览次数:20756 次

CXF的server端可以調用外部的webserver嗎?
想在server端調用外部的wevserver如 .net或axis2等server 回傳值
在cxf server端進行運算,不知是否可行?
有嘗試調用,卻出現錯誤
Java code

import javax.jws.WebService;   
  
import org.apache.cxf.endpoint.Client;  
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;  
  
class WebServiceClientHelper {  
    public static String callService(String wsUrl, String method, Object... arg) {  
        JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();  
        Client client = dcf.createClient(wsUrl);  
        Object[] res = null;  
        try {  
            res = client.invoke(method, arg);  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
        return (String) res[0];  
    }  
}  
  
@WebService  
public class CXFtestImpl implements CXFtest {  
  
    @Override  
    public String sayCXF(String name) {  
        // TODO Auto-generated method stub  
          
        String str = WebServiceClientHelper.callService("http://localhost:8080/axis2/services/Version?wsdl", "getVersion", "");  
        //System.out.println(str);  
          
        return "Hello " + name;   
    }  
} 



調用時出現的錯誤如下:
資訊: started o.e.j.s.h.ContextHandler{,null}
七月 04, 2012 8:36:25 下午 org.apache.cxf.phase.PhaseInterceptorChain doDefaultLogging
警告: Application {http://unknown.namespace/}CXFtestImplService#{http://unknown.namespace/}sayCXF has thrown exception, unwinding now
org.apache.cxf.interceptor.Fault: Failed to create service.
at org.apache.cxf.service.invoker.AbstractInvoker.createFault(AbstractInvoker.java:162)
at org.apache.cxf.jaxws.AbstractJAXWSMethodInvoker.createFault(AbstractJAXWSMethodInvoker.java:213)
at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:128)
at org.apache.cxf.jaxws.AbstractJAXWSMethodInvoker.invoke(AbstractJAXWSMethodInvoker.java:178)
at org.apache.cxf.jaxws.JAXWSMethodInvoker.invoke(JAXWSMethodInvoker.java:64)
at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:75)
at org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:58)
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at org.apache.cxf.workqueue.SynchronousExecutor.execute(SynchronousExecutor.java:37)
at org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:107)
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:262)
at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:122)
at org.apache.cxf.transport.http_jetty.JettyHTTPDestination.serviceRequest(JettyHTTPDestination.java:344)
at org.apache.cxf.transport.http_jetty.JettyHTTPDestination.doService(JettyHTTPDestination.java:310)
at org.apache.cxf.transport.http_jetty.JettyHTTPHandler.handle(JettyHTTPHandler.java:72)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:943)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:879)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)
at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:250)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:110)
at org.eclipse.jetty.server.Server.handle(Server.java:349)
at org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:441)
at org.eclipse.jetty.server.HttpConnection$RequestHandler.headerComplete(HttpConnection.ja