cxf与spring集成的webService简单实例以及动态调用

在大多数情况下我们用webService调用接口,完成报文的传输,报文格式一般为xml。

1、首先在 web.xml  配置

CXFServices

org.apache.cxf.transport.servlet.CXFServlet

1

CXFServices

/WS/*

 

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 allProduct = mapper.getAllProduct();

StringBuilder sb = new StringBuilder();

sb.append("\n");

sb.append("\n");

for (T_Product product : allProduct) {

sb.append(" \n");

sb.append(" " + product.getName() + "\n");

sb.append(" " + product.getPrice() + "\n");

sb.append(" \n");

}

sb.append("\n");

return sb.toString();

}

注意:接口和实现类的targetNamespace 命名空间一定要一样,这个非常简单,可以先不写,等配置完成后再copy上去

4、与spring集成

在spring配置文件中配置如下:

    头文件中加入: 

         http://cxf.apache.org/jaxws 

         http://cxf.apache.org/schemas/jaxws.xsd"

   要暴露的接口:在访问时 通过address访问

   

          implementor="com.zhu.cxf.service.impl.FindProductImpl">

   

5、访问webService接口

然后在浏览器上访问 http://localhost:8080/springMVC1_1/WS/findProduct?wsdl    本地地址+项目名+访问路径(findProduct为暴露的接口地址)+?wsdl

cxf与spring集成的webService简单实例以及动态调用_第1张图片

显示如上图即配置成功,在图中第三行可以清晰的看到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 即为该接口方法的返回值

 

   

你可能感兴趣的:(java)