我正在编写一个ANT任务,试图为CXF Web服务创建一个代理,如下所示:
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setServiceClass(ProjectApi.class);
factory.setAddress("http://sasdk1/protex-sdk/v5_0/project");
ProjectApi projectApi = (ProjectApi)factory.create();
如果我在Eclipse中将它作为Main方法运行,它运行得很好。
然而,如果我尝试作为ANT任务运行,它总是失败,并出现以下错误:
org.apache.cxf.BusException:
No binding factory for namespace http://schemas.xmlsoap.org/soap/ registered
如何以编程方式将此绑定添加到上述代码中?
根据这一点,cxf.xml文件需要位于客户端的类路径中,在本例中为Ant。
我找到了一个不需要将cxf.xml文件放在Ant lib目录下的解决方法。
URL wsdlURL = null;
try {
wsdlURL = new URL("http://sasdk1/protex-sdk/v5_0/project?wsdl");
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.exit(-1);
}
QName SERVICE_NAME = new QName(
"urn:protex.company.com:sdk:v5.0:project",
"ProjectApiService");
Service service = Service.create(wsdlURL, SERVICE_NAME);
ProjectApi projectApi = service.getPort(ProjectApi.class);