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

本文详细介绍如何使用CXF在Web应用中搭建WebService,并与Spring框架进行集成,实现XML报文传输。步骤包括配置web.xml,创建接口及其实现类,配置Spring,以及创建客户端动态调用接口。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在大多数情况下我们用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 即为该接口方法的返回值

 

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值