在大多数情况下我们用webService调用接口,完成报文的传输,报文格式一般为xml。
1、首先在 web.xml 配置
<servlet>
<servlet-name>CXFServices</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>CXFServices</servlet-name>
<url-pattern>/WS/*</url-pattern>
</servlet-mapping>
2、创建接口
import javax.jws.WebService;
@WebService(targetNamespace = "http://impl.service.cxf.zhu.com/")
public interface FindProduct {
public String findAllProduct();
}
3、创建实现类
@WebService(targetNamespace="http://impl.service.cxf.zhu.com/")
public class FindProductImpl implements FindProduct {
@Autowired
public ProductMapper mapper
@Override
public String findAllProduct() {
List<T_Product> allProduct = mapper.getAllProduct();
StringBuilder sb = new StringBuilder();
sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
sb.append("<list type='Product'>\n");
for (T_Product product : allProduct) {
sb.append(" <product id='" + product.getId() + "'>\n");
sb.append(" <name>" + product.getName() + "</name>\n");
sb.append(" <price>" + product.getPrice() + "</price>\n");
sb.append(" </product>\n");
}
sb.append("</list>\n");
return sb.toString();
}
注意:接口和实现类的targetNamespace 命名空间一定要一样,这个非常简单,可以先不写,等配置完成后再copy上去
4、与spring集成
在spring配置文件中配置如下:
头文件中加入:
http://cxf.apache.org/jaxws
http://cxf.apache.org/schemas/jaxws.xsd"
要暴露的接口:在访问时 通过address访问
<jaxws:endpoint id="findProduct" address="/findProduct"
implementor="com.zhu.cxf.service.impl.FindProductImpl">
</jaxws:endpoint>
5、访问webService接口
然后在浏览器上访问 http://localhost:8080/springMVC1_1/WS/findProduct?wsdl 本地地址+项目名+访问路径(findProduct为暴露的接口地址)+?wsdl
显示如上图即配置成功,在图中第三行可以清晰的看到targetNamespace,copy到接口和实现类的webService注解中。
6、创建客户端,动态调用webService接口
/*
*获取工厂实例
*创建客户端
*/
JaxWsDynamicClientFactory factory = JaxWsDynamicClientFactory.newInstance();
Client createClient = factory.createClient("http://localhost:8080/springMVC1_1/WS/findProduct?wsdl");
Object[] invoke = null;
try {
invoke = createClient.invoke("要调用的方法名","该方法所需的参数,没有参数可不写");
} catch (Exception e) {
e.printStackTrace();
}
String xml = invoke[0].toString();//xml 即为该接口方法的返回值